refactor(runtime): cut graphical host over to canonical root
Make every App composition phase borrow one GameRuntime, retire the duplicate view/event adapters, and dispose the root only after its graphical borrowers release. This preserves synchronous UI commands while giving shutdown one exact ownership ledger. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
ecb9f79444
commit
ce41efb9e5
29 changed files with 613 additions and 778 deletions
|
|
@ -363,7 +363,7 @@ public sealed class LandblockBuildOriginTests
|
|||
Assert.True(sessionStage >= 0);
|
||||
|
||||
int sessionOperation = source.IndexOf(
|
||||
"Hard(\"live session\", () => DisposeLiveSession(ingress.LiveSession))",
|
||||
"Hard(\"game runtime session\", ingress.Runtime.StopSession)",
|
||||
sessionStage,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(sessionOperation > sessionStage);
|
||||
|
|
@ -380,25 +380,30 @@ public sealed class LandblockBuildOriginTests
|
|||
StringComparison.Ordinal);
|
||||
Assert.True(streamerDispose > dependentStage);
|
||||
|
||||
int helper = source.IndexOf(
|
||||
"private static void DisposeLiveSession(LiveSessionController? controller)",
|
||||
string runtime = File.ReadAllText(Path.Combine(
|
||||
FindRepoRoot(),
|
||||
"src",
|
||||
"AcDream.Runtime",
|
||||
"GameRuntime.cs"));
|
||||
int helper = runtime.IndexOf(
|
||||
"public void StopSession()",
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(helper > streamerDispose);
|
||||
int sessionDispose = source.IndexOf(
|
||||
"controller.Dispose()",
|
||||
Assert.True(helper >= 0);
|
||||
int sessionDispose = runtime.IndexOf(
|
||||
"Session.Dispose();",
|
||||
helper,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(sessionDispose > helper);
|
||||
|
||||
int disposalCompletionBarrier = source.IndexOf(
|
||||
"if (!controller.IsDisposalComplete)",
|
||||
int disposalCompletionBarrier = runtime.IndexOf(
|
||||
"if (!Session.IsDisposalComplete)",
|
||||
sessionDispose,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(disposalCompletionBarrier > sessionDispose);
|
||||
|
||||
Assert.Contains(
|
||||
"Live-session disposal was deferred by a reentrant lifecycle callback.",
|
||||
source[disposalCompletionBarrier..],
|
||||
"The Runtime session shutdown was deferred by a re-entrant callback.",
|
||||
runtime[disposalCompletionBarrier..],
|
||||
StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue