Loading services/surfaceflinger/SurfaceFlinger.cpp +19 −6 Original line number Diff line number Diff line Loading @@ -1416,6 +1416,8 @@ status_t SurfaceFlinger::setActiveModeFromBackdoor(const sp<display::DisplayToke return future.get(); } // TODO: b/241285876 - Restore thread safety analysis once mStateLock below is unconditional. [[clang::no_thread_safety_analysis]] void SurfaceFlinger::finalizeDisplayModeChange(PhysicalDisplayId displayId) { SFTRACE_NAME(ftl::Concat(__func__, ' ', displayId.value).c_str()); Loading @@ -1431,7 +1433,7 @@ void SurfaceFlinger::finalizeDisplayModeChange(PhysicalDisplayId displayId) { if (const auto oldResolution = mDisplayModeController.getActiveMode(displayId).modePtr->getResolution(); oldResolution != activeMode.modePtr->getResolution()) { Mutex::Autolock lock(mStateLock); ConditionalLock lock(mStateLock, !FlagManager::getInstance().connected_display()); auto& state = mCurrentState.displays.editValueFor(getPhysicalDisplayTokenLocked(displayId)); // We need to generate new sequenceId in order to recreate the display (and this Loading Loading @@ -1483,7 +1485,7 @@ void SurfaceFlinger::applyActiveMode(PhysicalDisplayId displayId) { void SurfaceFlinger::initiateDisplayModeChanges() { SFTRACE_CALL(); for (const auto& [displayId, physical] : FTL_FAKE_GUARD(mStateLock, mPhysicalDisplays)) { for (const auto& [displayId, physical] : mPhysicalDisplays) { auto desiredModeOpt = mDisplayModeController.getDesiredMode(displayId); if (!desiredModeOpt) { continue; Loading Loading @@ -2611,11 +2613,15 @@ bool SurfaceFlinger::commit(PhysicalDisplayId pacesetterId, return false; } { ConditionalLock lock(mStateLock, FlagManager::getInstance().connected_display()); for (const auto [displayId, _] : frameTargets) { if (mDisplayModeController.isModeSetPending(displayId)) { finalizeDisplayModeChange(displayId); } } } if (pacesetterFrameTarget.isFramePending()) { if (mBackpressureGpuComposition || pacesetterFrameTarget.didMissHwcFrame()) { Loading Loading @@ -2712,9 +2718,16 @@ bool SurfaceFlinger::commit(PhysicalDisplayId pacesetterId, ? &mLayerHierarchyBuilder.getHierarchy() : nullptr, updateAttachedChoreographer); if (FlagManager::getInstance().connected_display()) { initiateDisplayModeChanges(); } } if (!FlagManager::getInstance().connected_display()) { ftl::FakeGuard guard(mStateLock); initiateDisplayModeChanges(); } updateCursorAsync(); if (!mustComposite) { Loading services/surfaceflinger/SurfaceFlinger.h +2 −2 Original line number Diff line number Diff line Loading @@ -739,9 +739,9 @@ private: status_t setActiveModeFromBackdoor(const sp<display::DisplayToken>&, DisplayModeId, Fps minFps, Fps maxFps); void initiateDisplayModeChanges() REQUIRES(kMainThreadContext) EXCLUDES(mStateLock); void initiateDisplayModeChanges() REQUIRES(kMainThreadContext) REQUIRES(mStateLock); void finalizeDisplayModeChange(PhysicalDisplayId) REQUIRES(kMainThreadContext) EXCLUDES(mStateLock); REQUIRES(mStateLock); void dropModeRequest(PhysicalDisplayId) REQUIRES(kMainThreadContext); void applyActiveMode(PhysicalDisplayId) REQUIRES(kMainThreadContext); Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +19 −6 Original line number Diff line number Diff line Loading @@ -1416,6 +1416,8 @@ status_t SurfaceFlinger::setActiveModeFromBackdoor(const sp<display::DisplayToke return future.get(); } // TODO: b/241285876 - Restore thread safety analysis once mStateLock below is unconditional. [[clang::no_thread_safety_analysis]] void SurfaceFlinger::finalizeDisplayModeChange(PhysicalDisplayId displayId) { SFTRACE_NAME(ftl::Concat(__func__, ' ', displayId.value).c_str()); Loading @@ -1431,7 +1433,7 @@ void SurfaceFlinger::finalizeDisplayModeChange(PhysicalDisplayId displayId) { if (const auto oldResolution = mDisplayModeController.getActiveMode(displayId).modePtr->getResolution(); oldResolution != activeMode.modePtr->getResolution()) { Mutex::Autolock lock(mStateLock); ConditionalLock lock(mStateLock, !FlagManager::getInstance().connected_display()); auto& state = mCurrentState.displays.editValueFor(getPhysicalDisplayTokenLocked(displayId)); // We need to generate new sequenceId in order to recreate the display (and this Loading Loading @@ -1483,7 +1485,7 @@ void SurfaceFlinger::applyActiveMode(PhysicalDisplayId displayId) { void SurfaceFlinger::initiateDisplayModeChanges() { SFTRACE_CALL(); for (const auto& [displayId, physical] : FTL_FAKE_GUARD(mStateLock, mPhysicalDisplays)) { for (const auto& [displayId, physical] : mPhysicalDisplays) { auto desiredModeOpt = mDisplayModeController.getDesiredMode(displayId); if (!desiredModeOpt) { continue; Loading Loading @@ -2611,11 +2613,15 @@ bool SurfaceFlinger::commit(PhysicalDisplayId pacesetterId, return false; } { ConditionalLock lock(mStateLock, FlagManager::getInstance().connected_display()); for (const auto [displayId, _] : frameTargets) { if (mDisplayModeController.isModeSetPending(displayId)) { finalizeDisplayModeChange(displayId); } } } if (pacesetterFrameTarget.isFramePending()) { if (mBackpressureGpuComposition || pacesetterFrameTarget.didMissHwcFrame()) { Loading Loading @@ -2712,9 +2718,16 @@ bool SurfaceFlinger::commit(PhysicalDisplayId pacesetterId, ? &mLayerHierarchyBuilder.getHierarchy() : nullptr, updateAttachedChoreographer); if (FlagManager::getInstance().connected_display()) { initiateDisplayModeChanges(); } } if (!FlagManager::getInstance().connected_display()) { ftl::FakeGuard guard(mStateLock); initiateDisplayModeChanges(); } updateCursorAsync(); if (!mustComposite) { Loading
services/surfaceflinger/SurfaceFlinger.h +2 −2 Original line number Diff line number Diff line Loading @@ -739,9 +739,9 @@ private: status_t setActiveModeFromBackdoor(const sp<display::DisplayToken>&, DisplayModeId, Fps minFps, Fps maxFps); void initiateDisplayModeChanges() REQUIRES(kMainThreadContext) EXCLUDES(mStateLock); void initiateDisplayModeChanges() REQUIRES(kMainThreadContext) REQUIRES(mStateLock); void finalizeDisplayModeChange(PhysicalDisplayId) REQUIRES(kMainThreadContext) EXCLUDES(mStateLock); REQUIRES(mStateLock); void dropModeRequest(PhysicalDisplayId) REQUIRES(kMainThreadContext); void applyActiveMode(PhysicalDisplayId) REQUIRES(kMainThreadContext); Loading