summaryrefslogtreecommitdiff
path: root/libs/gui/DisplayEventDispatcher.cpp
diff options
context:
space:
mode:
author Alec Mouri <alecmouri@google.com> 2020-08-05 12:50:03 -0700
committer Alec Mouri <alecmouri@google.com> 2020-09-23 20:11:23 +0000
commite88f23af664f9c03f21d80b8f26022b7e70b2f05 (patch)
tree9f0efe833b699fe2c4af1cfc32344c599952797f /libs/gui/DisplayEventDispatcher.cpp
parentd4c28086bcbaffde7dd5a662ab9d5ab068097a84 (diff)
Fix refresh rate callback fan-out for choreographer
* AChoreographer receives refresh rates from DisplayManager already, so there's no need to default-enable them - AChoreographer only needs to pump an event with the latest refresh rate to wake up looper. This also ensures that AChoreographer's callbacks are entirely in-sync with DisplayManager since there's no raciness. * Instead of re-requesting a config change from SF, instead inject it in AChoreographer correctly to save on binder. Bug: 154874011 Bug: 158680912 Bug: 161406626 Bug: 168776852 Test: while [ true ]; do adb shell service call SurfaceFlinger 1035 i32 1; adb shell service call SurfaceFlinger 1035 i32 0; and repeatedly rotate the home screen with auto-rotate off. Change-Id: I66abc2e28e60f06987ce3a54be294c94b77524fc Merged-In: I66abc2e28e60f06987ce3a54be294c94b77524fc
Diffstat (limited to 'libs/gui/DisplayEventDispatcher.cpp')
-rw-r--r--libs/gui/DisplayEventDispatcher.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/libs/gui/DisplayEventDispatcher.cpp b/libs/gui/DisplayEventDispatcher.cpp
index b33bc9e556..682fe911de 100644
--- a/libs/gui/DisplayEventDispatcher.cpp
+++ b/libs/gui/DisplayEventDispatcher.cpp
@@ -89,12 +89,8 @@ status_t DisplayEventDispatcher::scheduleVsync() {
return OK;
}
-void DisplayEventDispatcher::requestLatestConfig() {
- status_t status = mReceiver.requestLatestConfig();
- if (status) {
- ALOGW("Failed enable config events, status=%d", status);
- return;
- }
+void DisplayEventDispatcher::injectEvent(const DisplayEventReceiver::Event& event) {
+ mReceiver.sendEvents(&event, 1);
}
int DisplayEventDispatcher::getFd() const {
@@ -157,6 +153,9 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp,
dispatchConfigChanged(ev.header.timestamp, ev.header.displayId,
ev.config.configId, ev.config.vsyncPeriod);
break;
+ case DisplayEventReceiver::DISPLAY_EVENT_NULL:
+ dispatchNullEvent(ev.header.timestamp, ev.header.displayId);
+ break;
default:
ALOGW("dispatcher %p ~ ignoring unknown event type %#x", this, ev.header.type);
break;
@@ -168,4 +167,5 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp,
}
return gotVsync;
}
+
} // namespace android