Revert "chore: remove deopts and refactor code for controlled optimizations (…" (#11043)

This reverts commit 3ece9cd051.
pull/11047/head
Dominic Gannaway 1 year ago committed by GitHub
parent 3ece9cd051
commit 17281c3df1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -17,10 +17,8 @@ import {
branch, branch,
effect, effect,
pause_effect, pause_effect,
get_out_transitions,
resume_effect,
pause_effects, pause_effects,
destroy_effects resume_effect
} from '../../reactivity/effects.js'; } from '../../reactivity/effects.js';
import { source, mutable_source, set } from '../../reactivity/sources.js'; import { source, mutable_source, set } from '../../reactivity/sources.js';
import { is_array, is_frozen, map_get, map_set } from '../../utils.js'; import { is_array, is_frozen, map_get, map_set } from '../../utils.js';
@ -246,17 +244,9 @@ function reconcile_indexed_array(array, state, anchor, render_fn, flags) {
effects.push(a_items[i].e); effects.push(a_items[i].e);
} }
var transitions = get_out_transitions(effects); pause_effects(effects, () => {
var items = state.items; state.items.length = b;
});
if (transitions.length === 0) {
destroy_effects(effects);
items.length = b;
} else {
pause_effects(effects, transitions, () => {
items.length = b;
});
}
} }
} }
@ -431,16 +421,11 @@ function reconcile_tracked_array(array, state, anchor, render_fn, flags, keys) {
}); });
} }
var transitions = get_out_transitions(to_destroy); // TODO: would be good to avoid this closure in the case where we have no
// transitions at all. It would make it far more JIT friendly in the hot cases.
if (transitions.length === 0) { pause_effects(to_destroy, () => {
destroy_effects(to_destroy);
state.items = b_items; state.items = b_items;
} else { });
pause_effects(to_destroy, transitions, () => {
state.items = b_items;
});
}
} }
/** /**

@ -313,38 +313,23 @@ export function pause_effect(effect, callback = noop) {
* Pause multiple effects simultaneously, and coordinate their * Pause multiple effects simultaneously, and coordinate their
* subsequent destruction. Used in each blocks * subsequent destruction. Used in each blocks
* @param {import('#client').Effect[]} effects * @param {import('#client').Effect[]} effects
* @returns {import('#client').TransitionManager[]} * @param {() => void} callback
*/ */
export function get_out_transitions(effects) { export function pause_effects(effects, callback = noop) {
/** @type {import('#client').TransitionManager[]} */ /** @type {import('#client').TransitionManager[]} */
var transitions = []; var transitions = [];
var length = effects.length;
for (var i = 0; i < effects.length; i++) { for (var i = 0; i < length; i++) {
pause_children(effects[i], transitions, true); pause_children(effects[i], transitions, true);
} }
return transitions; // TODO: would be good to avoid this closure in the case where we have no
} // transitions at all. It would make it far more JIT friendly in the hot cases.
/**
* @param {import('#client').Effect[]} effects
*/
export function destroy_effects(effects) {
for (var i = 0; i < effects.length; i++) {
destroy_effect(effects[i]);
}
}
/**
* Pause multiple effects simultaneously, and coordinate their
* subsequent destruction. Used in each blocks
* @param {import('#client').Effect[]} effects
* @param {import('#client').TransitionManager[]} transitions
* @param {() => void} callback
*/
export function pause_effects(effects, transitions, callback = noop) {
out(transitions, () => { out(transitions, () => {
destroy_effects(effects); for (var i = 0; i < length; i++) {
destroy_effect(effects[i]);
}
callback(); callback();
}); });
} }
@ -385,12 +370,13 @@ function pause_children(effect, transitions, local) {
var child = effect.first; var child = effect.first;
while (child !== null) { while (child !== null) {
var sibling = child.next;
var transparent = (child.f & IS_ELSEIF) !== 0 || (child.f & BRANCH_EFFECT) !== 0; var transparent = (child.f & IS_ELSEIF) !== 0 || (child.f & BRANCH_EFFECT) !== 0;
// TODO we don't need to call pause_children recursively with a linked list in place // TODO we don't need to call pause_children recursively with a linked list in place
// it's slightly more involved though as we have to account for `transparent` changing // it's slightly more involved though as we have to account for `transparent` changing
// through the tree. // through the tree.
pause_children(child, transitions, transparent ? local : false); pause_children(child, transitions, transparent ? local : false);
child = child.next; child = sibling;
} }
} }

Loading…
Cancel
Save