diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3d5002e009..8f411121bc 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1544,9 +1544,15 @@ void SurfaceFlinger::initiateDisplayModeChanges() { constraints.seamlessRequired = false; hal::VsyncPeriodChangeTimeline outTimeline; - if (mDisplayModeController.initiateModeChange(displayId, std::move(*desiredModeOpt), - constraints, outTimeline) != - display::DisplayModeController::ModeChangeResult::Changed) { + const auto error = + mDisplayModeController.initiateModeChange(displayId, std::move(*desiredModeOpt), + constraints, outTimeline); + if (error != display::DisplayModeController::ModeChangeResult::Changed) { + dropModeRequest(displayId); + if (FlagManager::getInstance().display_config_error_hal() && + error == display::DisplayModeController::ModeChangeResult::Rejected) { + mScheduler->onDisplayModeRejected(displayId, desiredModeId); + } continue; } |