Skip to content

Commit f208f6c

Browse files
perf: cache scalingModeRenderer feature flag in GL/Metal view controllers
Replace repeated PVFeatureFlags.shared.isEnabled(.scalingModeRenderer) calls in render loops with a single lazy-initialized stored property. The flag is read once on first access and reused for the session lifetime. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0acdf51 commit f208f6c

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

PVUI/Sources/PVUIBase/PVGLViewController/PVGLViewController.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ final class PVGLViewController: PVGPUViewController, PVRenderDelegate {
159159

160160
var renderSettings = RenderSettings()
161161

162+
/// Cached feature flag — read once at init; unlikely to change during emulation.
163+
private lazy var scalingModeRendererEnabled: Bool = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
164+
162165
#if USE_METAL
163166
var glContext: CIContext?
164167
var alternateThreadGLContext: CIContext?
@@ -338,7 +341,7 @@ final class PVGLViewController: PVGPUViewController, PVRenderDelegate {
338341
break
339342
}
340343

341-
if (PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
344+
if (scalingModeRendererEnabled
342345
? Defaults[.scalingMode] == .nativeResolution
343346
: Defaults[.nativeScaleEnabled]) {
344347
let scale = UIScreen.main.scale
@@ -468,7 +471,7 @@ final class PVGLViewController: PVGPUViewController, PVRenderDelegate {
468471
var width: CGFloat = 0
469472

470473
let scalingMode = renderSettings.scalingMode
471-
let useNewScalingRenderer = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
474+
let useNewScalingRenderer = scalingModeRendererEnabled
472475

473476
if useNewScalingRenderer {
474477
switch scalingMode {

PVUI/Sources/PVUIBase/PVGLViewController/PVMetalViewController.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ class PVMetalViewController : PVGPUViewController, PVRenderDelegate, MTKViewDele
175175

176176
var renderSettings: RenderSettings = .init()
177177

178+
/// Cached feature flag — read once at init; unlikely to change during emulation.
179+
private lazy var scalingModeRendererEnabled: Bool = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
180+
178181
// MARK: Internal properties
179182

180183
var device: MTLDevice? = nil
@@ -788,7 +791,7 @@ class PVMetalViewController : PVGPUViewController, PVRenderDelegate, MTKViewDele
788791
var width: CGFloat = 0
789792

790793
let scalingMode = renderSettings.scalingMode
791-
let useNewScalingRenderer = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
794+
let useNewScalingRenderer = scalingModeRendererEnabled
792795

793796
/// Calculate dimensions in points first
794797
if useNewScalingRenderer {
@@ -944,7 +947,7 @@ class PVMetalViewController : PVGPUViewController, PVRenderDelegate, MTKViewDele
944947
// Metal render only supports native scale on iOS/tvOS
945948
#if !(os(macOS) || targetEnvironment(macCatalyst))
946949
let screenBounds = UIScreen.main.bounds
947-
let nativeScaleEnabled = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
950+
let nativeScaleEnabled = scalingModeRendererEnabled
948951
? Defaults[.scalingMode] == .nativeResolution
949952
: Defaults[.nativeScaleEnabled]
950953

@@ -2088,7 +2091,7 @@ class PVMetalViewController : PVGPUViewController, PVRenderDelegate, MTKViewDele
20882091
#if os(iOS) || os(tvOS)
20892092
let screenBounds = UIScreen.main.bounds
20902093
let screenScale = UIScreen.main.scale
2091-
let useNativeScale = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
2094+
let useNativeScale = scalingModeRendererEnabled
20922095
? Defaults[.scalingMode] == .nativeResolution
20932096
: Defaults[.nativeScaleEnabled]
20942097
#else
@@ -3388,7 +3391,7 @@ class PVMetalViewController : PVGPUViewController, PVRenderDelegate, MTKViewDele
33883391
metalView.clearColor = MTLClearColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
33893392
configureMetalLayer(for: metalView)
33903393

3391-
let _nativeResolutionActive = PVFeatureFlags.shared.isEnabled(.scalingModeRenderer)
3394+
let _nativeResolutionActive = scalingModeRendererEnabled
33923395
? Defaults[.scalingMode] == .nativeResolution
33933396
: Defaults[.nativeScaleEnabled]
33943397
if _nativeResolutionActive {

0 commit comments

Comments
 (0)