|
43 | 43 | #include <utils/Errors.h> |
44 | 44 |
|
45 | 45 | #include <common/FlagManager.h> |
| 46 | +#include <scheduler/FrameRateMode.h> |
46 | 47 | #include <scheduler/VsyncConfig.h> |
47 | 48 | #include "FrameTimeline.h" |
48 | 49 | #include "VSyncDispatch.h" |
@@ -102,6 +103,10 @@ std::string toString(const DisplayEventReceiver::Event& event) { |
102 | 103 | to_string(event.header.displayId).c_str(), |
103 | 104 | event.hdcpLevelsChange.connectedLevel, |
104 | 105 | event.hdcpLevelsChange.maxLevel); |
| 106 | + case DisplayEventReceiver::DISPLAY_EVENT_MODE_REJECTION: |
| 107 | + return StringPrintf("ModeRejected{displayId=%s, modeId=%u}", |
| 108 | + to_string(event.header.displayId).c_str(), |
| 109 | + event.modeRejection.modeId); |
105 | 110 | default: |
106 | 111 | return "Event{}"; |
107 | 112 | } |
@@ -186,6 +191,18 @@ DisplayEventReceiver::Event makeHdcpLevelsChange(PhysicalDisplayId displayId, |
186 | 191 | }; |
187 | 192 | } |
188 | 193 |
|
| 194 | +DisplayEventReceiver::Event makeModeRejection(PhysicalDisplayId displayId, DisplayModeId modeId) { |
| 195 | + return DisplayEventReceiver::Event{ |
| 196 | + .header = |
| 197 | + DisplayEventReceiver::Event::Header{ |
| 198 | + .type = DisplayEventReceiver::DISPLAY_EVENT_MODE_REJECTION, |
| 199 | + .displayId = displayId, |
| 200 | + .timestamp = systemTime(), |
| 201 | + }, |
| 202 | + .modeRejection.modeId = ftl::to_underlying(modeId), |
| 203 | + }; |
| 204 | +} |
| 205 | + |
189 | 206 | } // namespace |
190 | 207 |
|
191 | 208 | EventThreadConnection::EventThreadConnection(EventThread* eventThread, uid_t callingUid, |
@@ -480,6 +497,13 @@ void EventThread::onHdcpLevelsChanged(PhysicalDisplayId displayId, int32_t conne |
480 | 497 | mCondition.notify_all(); |
481 | 498 | } |
482 | 499 |
|
| 500 | +void EventThread::onModeRejected(PhysicalDisplayId displayId, DisplayModeId modeId) { |
| 501 | + std::lock_guard<std::mutex> lock(mMutex); |
| 502 | + |
| 503 | + mPendingEvents.push_back(makeModeRejection(displayId, modeId)); |
| 504 | + mCondition.notify_all(); |
| 505 | +} |
| 506 | + |
483 | 507 | // Merge lists of buffer stuffed Uids |
484 | 508 | void EventThread::addBufferStuffedUids(BufferStuffingMap bufferStuffedUids) { |
485 | 509 | std::lock_guard<std::mutex> lock(mMutex); |
|
0 commit comments