Speed up runspace and tab initialization (#4793)

* Add startup performance tracing

* Lazy initialize non-default tabs

* Render install app entries incrementally

* Defer and cache toggle status checks

* Clean up runspace invocation ownership

* Defer GUI runspace pool startup

* Defer status taskbar asset rendering

* Record final speed verification

* Fix deferred install render timer callback

* Add dispatcher smoke coverage for install rendering

* Replace install render timer with dispatcher callbacks

* Gate performance tracing behind compile switch

* Clean up analyzer warnings in speed changes

* Speed up runspace and tab initialization
This commit is contained in:
Chris Titus
2026-07-01 23:34:59 -05:00
committed by GitHub
parent 916dc761ba
commit 93dc23dd66
31 changed files with 1114 additions and 133 deletions
@@ -0,0 +1,14 @@
function Start-WinUtilPerformanceTrace {
if (-not (Test-WinUtilPerformanceTrace) -or $null -eq $sync) {
return
}
if (-not $sync.ContainsKey("PerformanceTrace")) {
$sync.PerformanceTrace = @{
Stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
LastElapsedMs = 0.0
}
}
Write-WinUtilPerformanceCheckpoint -Name "Startup trace started"
}
@@ -0,0 +1,15 @@
function Stop-WinUtilPerformanceTrace {
param(
[string]$Name = "Startup trace complete"
)
if (-not (Test-WinUtilPerformanceTrace) -or $null -eq $sync -or -not $sync.ContainsKey("PerformanceTrace")) {
return
}
Write-WinUtilPerformanceCheckpoint -Name $Name
if ($null -ne $sync.PerformanceTrace.Stopwatch) {
$sync.PerformanceTrace.Stopwatch.Stop()
}
}
@@ -0,0 +1,12 @@
function Test-WinUtilPerformanceTrace {
$enabledValue = ([string]$env:WINUTIL_PERF_LOG).ToLowerInvariant()
if ($enabledValue -in @("1", "true", "yes", "on")) {
return $true
}
if ($null -ne $sync -and $sync.ContainsKey("PerformanceTraceEnabled")) {
return [bool]$sync.PerformanceTraceEnabled
}
return $false
}
@@ -0,0 +1,23 @@
function Write-WinUtilPerformanceCheckpoint {
param(
[Parameter(Mandatory = $true)]
[string]$Name
)
if (-not (Test-WinUtilPerformanceTrace) -or $null -eq $sync) {
return
}
if (-not $sync.ContainsKey("PerformanceTrace") -or $null -eq $sync.PerformanceTrace.Stopwatch) {
$sync.PerformanceTrace = @{
Stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
LastElapsedMs = 0.0
}
}
$elapsedMs = [math]::Round($sync.PerformanceTrace.Stopwatch.Elapsed.TotalMilliseconds, 2)
$deltaMs = [math]::Round($elapsedMs - [double]$sync.PerformanceTrace.LastElapsedMs, 2)
$sync.PerformanceTrace.LastElapsedMs = $elapsedMs
Write-WinUtilLog -Level "DEBUG" -Component "StartupPerf" -Message ("{0}: {1:N2} ms (+{2:N2} ms)" -f $Name, $elapsedMs, $deltaMs)
}