perf(render): bound animation and alpha scratch residency
Complete Slice D3 by replacing the unbounded animation dictionary with a concurrent byte/count LRU and by putting the three retail alpha scratch owners behind one typed aggregate budget. Preserve immediate growth and draw order while reclaiming one-frame density spikes after sustained under-use. Close stale bounds-cache issue evidence without inventing a cache.
This commit is contained in:
parent
3e18fc2730
commit
f2644d42c2
18 changed files with 857 additions and 34 deletions
|
|
@ -5,6 +5,7 @@ using AcDream.App.Input;
|
|||
using AcDream.App.Interaction;
|
||||
using AcDream.App.Physics;
|
||||
using AcDream.App.Rendering;
|
||||
using AcDream.App.Rendering.Residency;
|
||||
using AcDream.App.Rendering.Selection;
|
||||
using AcDream.App.Rendering.Sky;
|
||||
using AcDream.App.Rendering.Vfx;
|
||||
|
|
@ -586,6 +587,9 @@ internal sealed class LivePresentationCompositionPhase
|
|||
{
|
||||
LivePresentationDependencies d = _dependencies;
|
||||
WorldRenderFoundation foundation = world.Foundation;
|
||||
AlphaScratchBudgetProfile alphaScratchBudgets =
|
||||
AlphaScratchBudgetProfile.Create(
|
||||
d.Options.ResidencyBudgets.AlphaScratchBytes);
|
||||
|
||||
var selectionScene = new RetailSelectionScene(
|
||||
new RetailSelectionGeometryCache(content.Dats, d.DatLock));
|
||||
|
|
@ -601,7 +605,8 @@ internal sealed class LivePresentationCompositionPhase
|
|||
d.ClassificationCache,
|
||||
d.TranslucencyFades,
|
||||
selectionScene,
|
||||
d.RetailAlphaQueue),
|
||||
d.RetailAlphaQueue,
|
||||
alphaScratchBudgets.DispatcherBytes),
|
||||
static value => value.Dispose());
|
||||
var selectionQuery = new WorldSelectionQuery(
|
||||
liveEntities,
|
||||
|
|
@ -883,7 +888,8 @@ internal sealed class LivePresentationCompositionPhase
|
|||
foundation.TextureCache,
|
||||
content.Dats,
|
||||
foundation.MeshAdapter,
|
||||
d.RetailAlphaQueue),
|
||||
d.RetailAlphaQueue,
|
||||
alphaScratchBudgets.ParticleBytes),
|
||||
static value => value.Dispose());
|
||||
Fault(LivePresentationCompositionPoint.SkyAndParticlesCreated);
|
||||
|
||||
|
|
@ -966,6 +972,19 @@ internal sealed class LivePresentationCompositionPhase
|
|||
frameDiagnostics,
|
||||
bindings,
|
||||
landblockLoaded);
|
||||
foundation.Residency.RegisterDomainSource(
|
||||
new DelegateResidencyDomainSource(
|
||||
ResidencyDomain.AlphaScratch,
|
||||
() => new ResidencyDomainSnapshot(
|
||||
ResidencyDomain.AlphaScratch,
|
||||
EntryCount: 3,
|
||||
OwnerCount: 3,
|
||||
Charges: new ResidencyCharges(
|
||||
ScratchBytes: checked(
|
||||
d.RetailAlphaQueue.RetainedScratchBytes
|
||||
+ dispatcherLease.Resource.RetainedAlphaScratchBytes
|
||||
+ particleLease.Resource.RetainedAlphaScratchBytes)),
|
||||
BudgetBytes: alphaScratchBudgets.TotalBytes)));
|
||||
_publication.PublishLivePresentation(result);
|
||||
|
||||
liveRuntimeLease.Transfer();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue