diff --git a/Packages/src/Editor/FirstPartyTools/FirstPartyToolsEditorStartup.cs b/Packages/src/Editor/FirstPartyTools/FirstPartyToolsEditorStartup.cs index 0420ae88c..549fa3457 100644 --- a/Packages/src/Editor/FirstPartyTools/FirstPartyToolsEditorStartup.cs +++ b/Packages/src/Editor/FirstPartyTools/FirstPartyToolsEditorStartup.cs @@ -11,6 +11,7 @@ public static void Initialize() DomainReloadDisableScopeRecovery.RestoreForEditorStartup(); ExternalSceneChangeTracker.Initialize(); ControlPlayModeEditorStartup.Initialize(); + PausePointEditorStartup.Initialize(); ExecuteDynamicCodeEditorStartup.Initialize(); GetLogsEditorStartup.Initialize(); ScreenshotEditorStartup.Initialize(); diff --git a/Packages/src/Editor/FirstPartyTools/PausePoint/AssemblyInfo.cs b/Packages/src/Editor/FirstPartyTools/PausePoint/AssemblyInfo.cs index 99cb7a0a0..eaac1fe9a 100644 --- a/Packages/src/Editor/FirstPartyTools/PausePoint/AssemblyInfo.cs +++ b/Packages/src/Editor/FirstPartyTools/PausePoint/AssemblyInfo.cs @@ -1,5 +1,6 @@ using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.Editor")] [assembly: InternalsVisibleTo("UnityCLILoop.Tests.Editor.SourcePausePointResolver")] [assembly: InternalsVisibleTo("UnityCLILoop.Tests.Editor.SourcePausePointCapture")] [assembly: InternalsVisibleTo("UnityCLILoop.Tests.Editor.SourcePausePointPatcher")] diff --git a/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointDomainReloadTracker.cs b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointDomainReloadTracker.cs index 264d99fce..0112611e3 100644 --- a/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointDomainReloadTracker.cs +++ b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointDomainReloadTracker.cs @@ -1,21 +1,30 @@ using System; -using UnityEditor; +using UnityEngine; namespace io.github.hatayama.UnityCliLoop.FirstPartyTools { - // [InitializeOnLoad] runs this type's static field initializers once per AppDomain load, so - // LoadedAtUtc marks this domain's birth. Used by physics-callback dispatch diagnostics to - // report how long the current domain has been alive without a reload -- a suspected factor in - // the existing-instance physics-dispatch miss (see docs/regression-harness.md). - [InitializeOnLoad] + // MarkDomainLoaded is invoked once per AppDomain load by the composition-root bootstrap + // (through FirstPartyToolsEditorStartup), so the recorded timestamp marks this domain's + // birth. Used by physics-callback dispatch diagnostics to report how long the current + // domain has been alive without a reload -- a suspected factor in the existing-instance + // physics-dispatch miss (see docs/regression-harness.md). internal static class PausePointDomainReloadTracker { - public static readonly DateTime LoadedAtUtc = DateTime.UtcNow; + private static DateTime? _loadedAtUtc; + + public static void MarkDomainLoaded() + { + Debug.Assert(!_loadedAtUtc.HasValue, "MarkDomainLoaded must run once per domain load"); + + _loadedAtUtc = DateTime.UtcNow; + } public static double SecondsSinceLoad() { - return (DateTime.UtcNow - LoadedAtUtc).TotalSeconds; + Debug.Assert(_loadedAtUtc.HasValue, "MarkDomainLoaded must run before SecondsSinceLoad"); + + return (DateTime.UtcNow - _loadedAtUtc.Value).TotalSeconds; } } } diff --git a/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs new file mode 100644 index 000000000..ef376e6cd --- /dev/null +++ b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs @@ -0,0 +1,12 @@ +namespace io.github.hatayama.UnityCliLoop.FirstPartyTools +{ + // Keeps pause-point startup wiring inside the pause-point assembly so the composition + // root only depends on the bundled-tool facade. + internal static class PausePointEditorStartup + { + public static void Initialize() + { + PausePointDomainReloadTracker.MarkDomainLoaded(); + } + } +} diff --git a/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs.meta b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs.meta new file mode 100644 index 000000000..2dc8ffb74 --- /dev/null +++ b/Packages/src/Editor/FirstPartyTools/PausePoint/PausePointEditorStartup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1caf71ad9cb024a0d8ff2a5d31e82d1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/src/Editor/FirstPartyTools/SetGameViewSize/SetGameViewSizeSchema.cs b/Packages/src/Editor/FirstPartyTools/SetGameViewSize/SetGameViewSizeSchema.cs index 836289565..c1a658f60 100644 --- a/Packages/src/Editor/FirstPartyTools/SetGameViewSize/SetGameViewSizeSchema.cs +++ b/Packages/src/Editor/FirstPartyTools/SetGameViewSize/SetGameViewSizeSchema.cs @@ -1,5 +1,3 @@ -using System.ComponentModel; - using io.github.hatayama.UnityCliLoop.ToolContracts; namespace io.github.hatayama.UnityCliLoop.FirstPartyTools @@ -9,10 +7,8 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools /// public sealed class SetGameViewSizeSchema : UnityCliLoopToolSchema { - [Description("Target Game View rendering width in pixels. Provide with Height to change the resolution.")] public int? Width { get; set; } - [Description("Target Game View rendering height in pixels. Provide with Width to change the resolution.")] public int? Height { get; set; } } }