|
42 | 42 |
|
43 | 43 | #include <utils/Errors.h> |
44 | 44 |
|
| 45 | +#include <Scheduler/Scheduler.h> |
45 | 46 | #include <common/FlagManager.h> |
46 | 47 | #include <scheduler/FrameRateMode.h> |
47 | 48 | #include <scheduler/VsyncConfig.h> |
@@ -96,8 +97,11 @@ std::string toString(const DisplayEventReceiver::Event& event) { |
96 | 97 | to_string(event.header.displayId).c_str(), event.vsync.count, |
97 | 98 | event.vsync.vsyncData.preferredExpectedPresentationTime()); |
98 | 99 | case DisplayEventType::DISPLAY_EVENT_MODE_CHANGE: |
99 | | - return StringPrintf("ModeChanged{displayId=%s, modeId=%u}", |
100 | | - to_string(event.header.displayId).c_str(), event.modeChange.modeId); |
| 100 | + return StringPrintf("ModeChanged{displayId=%s, modeId=%u, appVsyncOffset=%" PRId64 |
| 101 | + ", presentationDeadline=%" PRId64 "}", |
| 102 | + to_string(event.header.displayId).c_str(), event.modeChange.modeId, |
| 103 | + event.modeChange.appVsyncOffset, |
| 104 | + event.modeChange.presentationDeadline); |
101 | 105 | case DisplayEventType::DISPLAY_EVENT_HDCP_LEVELS_CHANGE: |
102 | 106 | return StringPrintf("HdcpLevelsChange{displayId=%s, connectedLevel=%d, maxLevel=%d}", |
103 | 107 | to_string(event.header.displayId).c_str(), |
@@ -153,12 +157,17 @@ DisplayEventReceiver::Event makeVSync(PhysicalDisplayId displayId, nsecs_t times |
153 | 157 | return event; |
154 | 158 | } |
155 | 159 |
|
156 | | -DisplayEventReceiver::Event makeModeChanged(const scheduler::FrameRateMode& mode) { |
| 160 | +DisplayEventReceiver::Event makeModeChanged(const scheduler::FrameRateMode& mode, |
| 161 | + scheduler::VsyncConfigSet config) { |
157 | 162 | DisplayEventReceiver::Event event; |
158 | 163 | event.header = {DisplayEventType::DISPLAY_EVENT_MODE_CHANGE, |
159 | 164 | mode.modePtr->getPhysicalDisplayId(), systemTime()}; |
160 | 165 | event.modeChange.modeId = ftl::to_underlying(mode.modePtr->getId()); |
161 | 166 | event.modeChange.vsyncPeriod = mode.fps.getPeriodNsecs(); |
| 167 | + event.modeChange.appVsyncOffset = config.late.appOffset; |
| 168 | + event.modeChange.presentationDeadline = |
| 169 | + scheduler::Scheduler::getPresentationDeadline(mode.fps, |
| 170 | + Duration::fromNs(config.late.sfOffset)); |
162 | 171 | return event; |
163 | 172 | } |
164 | 173 |
|
@@ -478,10 +487,11 @@ void EventThread::onHotplugConnectionError(int32_t errorCode) { |
478 | 487 | mCondition.notify_all(); |
479 | 488 | } |
480 | 489 |
|
481 | | -void EventThread::onModeChanged(const scheduler::FrameRateMode& mode) { |
| 490 | +void EventThread::onModeChanged(const scheduler::FrameRateMode& mode, |
| 491 | + scheduler::VsyncConfigSet config) { |
482 | 492 | std::lock_guard<std::mutex> lock(mMutex); |
483 | 493 |
|
484 | | - mPendingEvents.push_back(makeModeChanged(mode)); |
| 494 | + mPendingEvents.push_back(makeModeChanged(mode, config)); |
485 | 495 | mCondition.notify_all(); |
486 | 496 | } |
487 | 497 |
|
|
0 commit comments