diff options
| -rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/DisplayDevice.h | 3 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 18 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h | 5 |
5 files changed, 13 insertions, 16 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 2963a97608..3ad07ae41a 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -222,6 +222,7 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs&& args) : lastCompositionHadVisibleLayers(false), mFlinger(args.flinger), mDisplayToken(args.displayToken), + mSequenceId(args.sequenceId), mId(args.displayId), mNativeWindow(args.nativeWindow), mGraphicBuffer(nullptr), diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h index 83572282bc..ba85432d52 100644 --- a/services/surfaceflinger/DisplayDevice.h +++ b/services/surfaceflinger/DisplayDevice.h @@ -112,6 +112,7 @@ public: const std::optional<DisplayId>& getId() const { return mId; } const wp<IBinder>& getDisplayToken() const { return mDisplayToken; } + int32_t getSequenceId() const { return mSequenceId; } int32_t getSupportedPerFrameMetadata() const { return mSupportedPerFrameMetadata; } @@ -205,6 +206,7 @@ public: private: const sp<SurfaceFlinger> mFlinger; const wp<IBinder> mDisplayToken; + const int32_t mSequenceId; std::optional<DisplayId> mId; @@ -332,6 +334,7 @@ struct DisplayDeviceCreationArgs { const wp<IBinder> displayToken; const std::optional<DisplayId> displayId; + int32_t sequenceId{0}; bool isVirtual{false}; bool isSecure{false}; sp<ANativeWindow> nativeWindow; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 178317caca..e6a43c521c 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1494,7 +1494,7 @@ void SurfaceFlinger::updateVrFlinger() { // Re-enable default display. display = getDefaultDisplayDeviceLocked(); LOG_ALWAYS_FATAL_IF(!display); - setPowerModeInternal(display, currentDisplayPowerMode, /*stateLockHeld*/ true); + setPowerModeInternal(display, currentDisplayPowerMode); // Reset the timing values to account for the period of the swapped in HWC const auto activeConfig = getHwComposer().getActiveConfig(*display->getId()); @@ -2358,6 +2358,7 @@ sp<DisplayDevice> SurfaceFlinger::setupNewDisplayDeviceInternal( const DisplayDeviceState& state, const sp<DisplaySurface>& dispSurface, const sp<IGraphicBufferProducer>& producer) { DisplayDeviceCreationArgs creationArgs(this, displayToken, displayId); + creationArgs.sequenceId = state.sequenceId; creationArgs.isVirtual = state.isVirtual(); creationArgs.isSecure = state.isSecure; creationArgs.displaySurface = dispSurface; @@ -3932,7 +3933,7 @@ void SurfaceFlinger::onInitializeDisplays() { const auto display = getDisplayDevice(displayToken); if (!display) return; - setPowerModeInternal(display, HWC_POWER_MODE_NORMAL, /*stateLockHeld*/ false); + setPowerModeInternal(display, HWC_POWER_MODE_NORMAL); const auto activeConfig = getHwComposer().getActiveConfig(*display->getId()); const nsecs_t period = activeConfig->getVsyncPeriod(); @@ -3949,8 +3950,7 @@ void SurfaceFlinger::initializeDisplays() { postMessageAsync(new LambdaMessage([this] { onInitializeDisplays(); })); } -void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, int mode, - bool stateLockHeld) { +void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, int mode) { if (display->isVirtual()) { ALOGE("%s: Invalid operation on virtual display", __FUNCTION__); return; @@ -3969,13 +3969,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, int display->setPowerMode(mode); if (mInterceptor->isEnabled()) { - ConditionalLock lock(mStateLock, !stateLockHeld); - ssize_t idx = mCurrentState.displays.indexOfKey(display->getDisplayToken()); - if (idx < 0) { - ALOGW("Surface Interceptor SavePowerMode: invalid display token"); - return; - } - mInterceptor->savePowerModeUpdate(mCurrentState.displays.valueAt(idx).sequenceId, mode); + mInterceptor->savePowerModeUpdate(display->getSequenceId(), mode); } if (currentMode == HWC_POWER_MODE_OFF) { @@ -4070,7 +4064,7 @@ void SurfaceFlinger::setPowerMode(const sp<IBinder>& displayToken, int mode) { } else if (display->isVirtual()) { ALOGW("Attempt to set power mode %d for virtual display", mode); } else { - setPowerModeInternal(display, mode, /*stateLockHeld*/ false); + setPowerModeInternal(display, mode); } })); } diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 4977ca08d2..d3f0ecef16 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -524,7 +524,7 @@ private: // called on the main thread in response to setActiveConfig() void setActiveConfigInternal(const sp<DisplayDevice>& display, int mode); // called on the main thread in response to setPowerMode() - void setPowerModeInternal(const sp<DisplayDevice>& display, int mode, bool stateLockHeld); + void setPowerModeInternal(const sp<DisplayDevice>& display, int mode); // Called on the main thread in response to setActiveColorMode() void setActiveColorModeInternal(const sp<DisplayDevice>& display, ui::ColorMode colorMode, diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h index 63216a9294..4da08b840a 100644 --- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h @@ -227,9 +227,8 @@ public: auto onInitializeDisplays() { return mFlinger->onInitializeDisplays(); } - auto setPowerModeInternal(const sp<DisplayDevice>& display, int mode, - bool stateLockHeld = false) { - return mFlinger->setPowerModeInternal(display, mode, stateLockHeld); + auto setPowerModeInternal(const sp<DisplayDevice>& display, int mode) { + return mFlinger->setPowerModeInternal(display, mode); } auto onMessageReceived(int32_t what) { return mFlinger->onMessageReceived(what); } |