diff options
| author | 2020-08-05 12:50:03 -0700 | |
|---|---|---|
| committer | 2020-09-23 20:11:23 +0000 | |
| commit | e88f23af664f9c03f21d80b8f26022b7e70b2f05 (patch) | |
| tree | 9f0efe833b699fe2c4af1cfc32344c599952797f /libs/gui/DisplayEventDispatcher.cpp | |
| parent | d4c28086bcbaffde7dd5a662ab9d5ab068097a84 (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.cpp | 12 | 
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  |