fix(rendering): bound portal resource lifetime

Separate logical ownership, render publication, and GPU retirement across live entities, landblocks, particles, textures, mesh arenas, portal/UI teardown, and per-frame scratch storage. Add bounded DAT/texture caches, upload budgets, three-frame fence retirement, exact-incarnation appearance reconciliation, frame pacing, and extensive lifetime conformance coverage.\n\nThe seven-destination connected route now cuts peak working/private memory roughly in half, returns Caul to 125-153 FPS locally, and produces no WER or AMD reset.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-18 21:35:16 +02:00
parent 3971997689
commit 749e8ceeb1
225 changed files with 29107 additions and 3914 deletions

View file

@ -0,0 +1,81 @@
using AcDream.App.Rendering;
namespace AcDream.App.Tests.Rendering;
public sealed class ResourceShutdownTransactionTests
{
[Fact]
public void AttemptsIndependentOperationsAndRetriesOnlyPendingOnes()
{
var calls = new List<string>();
int retryAttempts = 0;
var transaction = new ResourceShutdownTransaction(
new ResourceShutdownStage("owners",
[
new("first", () => calls.Add("first")),
new("retry", () =>
{
calls.Add("retry");
if (retryAttempts++ == 0)
throw new InvalidOperationException("synthetic transient failure");
}),
new("last", () => calls.Add("last")),
]),
new ResourceShutdownStage("dependent",
[
new("dependent", () => calls.Add("dependent")),
]));
transaction.CompleteOrThrow();
Assert.Equal(["first", "retry", "last", "retry", "dependent"], calls);
Assert.True(transaction.IsComplete);
}
[Fact]
public void PersistentFailureNeverRunsDependentStage()
{
int failures = 0;
int dependentCalls = 0;
var transaction = new ResourceShutdownTransaction(
new ResourceShutdownStage("owner",
[
new("persistent", () =>
{
failures++;
throw new InvalidOperationException("persistent");
}),
]),
new ResourceShutdownStage("dependent",
[
new("must-not-run", () => dependentCalls++),
]));
Assert.Throws<AggregateException>(transaction.CompleteOrThrow);
Assert.Equal(2, failures);
Assert.Equal(0, dependentCalls);
Assert.False(transaction.IsComplete);
}
[Fact]
public void ReentrantCompletionDoesNotReplayActiveOperation()
{
ResourceShutdownTransaction? transaction = null;
int calls = 0;
transaction = new ResourceShutdownTransaction(
new ResourceShutdownStage("stage",
[
new("reentrant", () =>
{
calls++;
transaction!.CompleteOrThrow();
}),
]));
transaction.CompleteOrThrow();
Assert.Equal(1, calls);
Assert.True(transaction.IsComplete);
}
}