SF: Deduplicate state for active display mode
RefreshRateConfigs tracks the active mode, so remove the duplicate (and
not thread-safe) state in DisplayDevice.
Bug: 241285191
Test: Build (-Wthread-safety)
Change-Id: I6b551cc68da3916a797a28085be984667fa1901e
diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h
index d79a6b5..0f52aff 100644
--- a/services/surfaceflinger/DisplayDevice.h
+++ b/services/surfaceflinger/DisplayDevice.h
@@ -189,8 +189,6 @@
/* ------------------------------------------------------------------------
* Display mode management.
*/
- const DisplayModePtr& getActiveMode() const;
-
struct ActiveModeInfo {
DisplayModePtr mode;
scheduler::DisplayModeEvent event = scheduler::DisplayModeEvent::None;
@@ -207,6 +205,10 @@
return mUpcomingActiveMode;
}
+ const DisplayMode& getActiveMode() const REQUIRES(kMainThreadContext) {
+ return mRefreshRateConfigs->getActiveMode();
+ }
+
// Precondition: DisplaySnapshot must contain a mode with DisplayModeId.
void setActiveMode(DisplayModeId, const display::DisplaySnapshot&) REQUIRES(kMainThreadContext);
@@ -226,7 +228,7 @@
}
// Enables an overlay to be displayed with the current refresh rate
- void enableRefreshRateOverlay(bool enable, bool showSpinner);
+ void enableRefreshRateOverlay(bool enable, bool showSpinner) REQUIRES(kMainThreadContext);
bool isRefreshRateOverlayEnabled() const { return mRefreshRateOverlay != nullptr; }
bool onKernelTimerChanged(std::optional<DisplayModeId>, bool timerExpired);
void animateRefreshRateOverlay();
@@ -265,10 +267,10 @@
static ui::Transform::RotationFlags sPrimaryDisplayRotationFlags;
- // allow initial power mode as null.
+ // Allow nullopt as initial power mode.
std::optional<hardware::graphics::composer::hal::PowerMode> mPowerMode;
- DisplayModePtr mActiveMode;
- std::optional<float> mStagedBrightness = std::nullopt;
+
+ std::optional<float> mStagedBrightness;
float mBrightness = -1.f;
std::atomic<nsecs_t> mLastHwVsync = 0;