diff options
author | 2025-01-31 00:12:06 +0000 | |
---|---|---|
committer | 2025-02-06 11:47:25 -0800 | |
commit | 4759f605384c5739a0223f4db16347b91cb8388b (patch) | |
tree | c0220ee1a748e1cb507c6f2b6aef65577a4a9814 /libs/gui/DisplayEventDispatcher.cpp | |
parent | 6cd42cbdc70e768c8f4b28f111c1b3efac41b823 (diff) |
SF: Fix dispatch of DISPLAY_EVENT_MODE_REJECTION
The onModeRejected() callback was not getting dispatched
correctly from SF to DM because of the missing case for this display
event in EventThread.cpp, so add that.
While at it, make the Display Event Types enum an enum class
so that the compiler will complain for any missing cases.
Do the necessary refactor in other files for this.
Bug: 393133868
Test: m surfaceflinger, End to End testing forcing Display config
failure in DRM HWC and checking that the correct failure and
is propagated from DRM HWC to SF and received in DM
Flag: com.android.graphics.surfaceflinger.flags.display_config_error_hal
Change-Id: I63914a3555466bc6c382ab1bf9ed57eb5eef7cd0
Signed-off-by: Manasi Navare <navaremanasi@google.com>
Diffstat (limited to 'libs/gui/DisplayEventDispatcher.cpp')
-rw-r--r-- | libs/gui/DisplayEventDispatcher.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/libs/gui/DisplayEventDispatcher.cpp b/libs/gui/DisplayEventDispatcher.cpp index 68f10f4d80..6f238859a4 100644 --- a/libs/gui/DisplayEventDispatcher.cpp +++ b/libs/gui/DisplayEventDispatcher.cpp @@ -167,7 +167,7 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, for (ssize_t i = 0; i < n; i++) { const DisplayEventReceiver::Event& ev = buf[i]; switch (ev.header.type) { - case DisplayEventReceiver::DISPLAY_EVENT_VSYNC: + case DisplayEventType::DISPLAY_EVENT_VSYNC: // Later vsync events will just overwrite the info from earlier // ones. That's fine, we only care about the most recent. gotVsync = true; @@ -183,7 +183,7 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, ATRACE_INT("RenderRate", fps); } break; - case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG: + case DisplayEventType::DISPLAY_EVENT_HOTPLUG: if (ev.hotplug.connectionError == 0) { dispatchHotplug(ev.header.timestamp, ev.header.displayId, ev.hotplug.connected); @@ -192,31 +192,28 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, ev.hotplug.connectionError); } break; - case DisplayEventReceiver::DISPLAY_EVENT_MODE_CHANGE: + case DisplayEventType::DISPLAY_EVENT_MODE_CHANGE: dispatchModeChanged(ev.header.timestamp, ev.header.displayId, ev.modeChange.modeId, ev.modeChange.vsyncPeriod); break; - case DisplayEventReceiver::DISPLAY_EVENT_NULL: + case DisplayEventType::DISPLAY_EVENT_NULL: dispatchNullEvent(ev.header.timestamp, ev.header.displayId); break; - case DisplayEventReceiver::DISPLAY_EVENT_FRAME_RATE_OVERRIDE: + case DisplayEventType::DISPLAY_EVENT_FRAME_RATE_OVERRIDE: mFrameRateOverrides.emplace_back(ev.frameRateOverride); break; - case DisplayEventReceiver::DISPLAY_EVENT_FRAME_RATE_OVERRIDE_FLUSH: + case DisplayEventType::DISPLAY_EVENT_FRAME_RATE_OVERRIDE_FLUSH: dispatchFrameRateOverrides(ev.header.timestamp, ev.header.displayId, std::move(mFrameRateOverrides)); break; - case DisplayEventReceiver::DISPLAY_EVENT_HDCP_LEVELS_CHANGE: + case DisplayEventType::DISPLAY_EVENT_HDCP_LEVELS_CHANGE: dispatchHdcpLevelsChanged(ev.header.displayId, ev.hdcpLevelsChange.connectedLevel, ev.hdcpLevelsChange.maxLevel); break; - case DisplayEventReceiver::DISPLAY_EVENT_MODE_REJECTION: + case DisplayEventType::DISPLAY_EVENT_MODE_REJECTION: dispatchModeRejected(ev.header.displayId, ev.modeRejection.modeId); break; - default: - ALOGW("dispatcher %p ~ ignoring unknown event type %#x", this, ev.header.type); - break; } } } |