Fix Wave-2 review findings: FX union on re-park, per-project reconcile memo, shared undo mask, decayed test oracle
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
// FX half is captured here (a read) but never written here; the reclaimer owns
|
||||
// every TrackFX_SetOffline, off the switch's synchronous path.
|
||||
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -27,6 +28,42 @@ inline const char* trackFlagParm(Flag f) {
|
||||
return "B_SHOWINTCP"; // unreachable; keeps the compiler quiet
|
||||
}
|
||||
|
||||
// A re-park's FX half, unioned rather than overwritten: keeps every FX identity
|
||||
// `prior` already names (the user's real pre-park state, still offline while the
|
||||
// reclaimer hasn't run) and appends whatever identity `live` sees that `prior`
|
||||
// does not — a plugin added during the restored interval, which a verbatim keep
|
||||
// of `prior` would otherwise never capture and leave stuck offline for good once
|
||||
// the reclaimer lands. Only meaningful when `prior` is Identity-keyed; a
|
||||
// Slot-keyed legacy record has no identities to union against, so parkTrack falls
|
||||
// back to trusting it verbatim instead of calling this. An empty fxGuid (REAPER
|
||||
// reported no identity) is never deduped against another empty one — it is
|
||||
// unrestorable either way, so appending it costs nothing and dedup would be a
|
||||
// coin flip.
|
||||
inline std::vector<FxOfflineState> unionFxOfflineOnRepark(
|
||||
const std::vector<FxOfflineState>& prior, const std::vector<FxOfflineState>& live) {
|
||||
std::vector<FxOfflineState> merged = prior;
|
||||
std::set<std::string> named;
|
||||
for (const FxOfflineState& fx : merged)
|
||||
if (!fx.fxGuid.empty()) named.insert(fx.fxGuid);
|
||||
for (const FxOfflineState& fx : live)
|
||||
if (fx.fxGuid.empty() || named.insert(fx.fxGuid).second) merged.push_back(fx);
|
||||
return merged;
|
||||
}
|
||||
|
||||
// The undo-state domains both the mode-switch apply (view.cpp) and lane minting
|
||||
// (view_lanes.cpp) write: track config/routing, item lane assignment, and the
|
||||
// ext-state block (UNDO_STATE_MISCCFG covers extension state). NOT UNDO_STATE_ALL,
|
||||
// and no UNDO_STATE_FX at all — neither writer moves FX state, so carrying the
|
||||
// project's whole FX chunk on every point would cost with the plugin count for
|
||||
// nothing. One symbol, not two identically-valued constants free to diverge.
|
||||
// [verify — DAW] INFERRED, not documented: UNDO_STATE_TRACKCFG reads "track/master
|
||||
// vol/pan/routing" (reaper_plugin.h:1541) and names neither the fixed-lane
|
||||
// properties (assumed to ride UNDO_STATE_ITEMS, :1543) nor
|
||||
// B_SHOWINTCP/B_SHOWINMIXER — and for the visibility pair that inference is now
|
||||
// DISPROVEN in the DAW: REAPER's undo does not restore them, which is what
|
||||
// view_reconcile exists to repair.
|
||||
extern const int kViewUndoMask;
|
||||
|
||||
// A track parameter written only when it is not already there. A reapply re-plans
|
||||
// every flag it already applied, so most of what it writes is a value the track
|
||||
// already holds. The read is ASSUMED cheaper than the write it elides (unmeasured);
|
||||
|
||||
Reference in New Issue
Block a user