graphics: hwc2on1adapter: Buffer hotplug event after display creation

If the HWC2 hotplug callback has not registered we buffer this event then
return, but do so too early leading to no display being created. Buffer
the event and return only after creating the display so when the callback
is registered we have a display for this hotplug event.

Test: Hotplug a display before the HWC2 hotplug callback is registered
Change-Id: I999e3fd7cbe87d12969fb2d2d82dbd956ee8d97b
Signed-off-by: Andrew F. Davis <afd@ti.com>
This commit is contained in:
Andrew F. Davis 2019-08-13 15:37:50 -04:00 committed by Andrew Davis
parent 69879436a5
commit 272ff4a626

View file

@ -2590,13 +2590,6 @@ void HWC2On1Adapter::hwc1Hotplug(int hwc1DisplayId, int connected) {
std::unique_lock<std::recursive_timed_mutex> lock(mStateMutex);
// If the HWC2-side callback hasn't been registered yet, buffer this until
// it is registered
if (mCallbacks.count(Callback::Hotplug) == 0) {
mPendingHotplugs.emplace_back(hwc1DisplayId, connected);
return;
}
hwc2_display_t displayId = UINT64_MAX;
if (mHwc1DisplayMap.count(hwc1DisplayId) == 0) {
if (connected == 0) {
@ -2625,6 +2618,13 @@ void HWC2On1Adapter::hwc1Hotplug(int hwc1DisplayId, int connected) {
mDisplays.erase(displayId);
}
// If the HWC2-side callback hasn't been registered yet, buffer this until
// it is registered
if (mCallbacks.count(Callback::Hotplug) == 0) {
mPendingHotplugs.emplace_back(hwc1DisplayId, connected);
return;
}
const auto& callbackInfo = mCallbacks[Callback::Hotplug];
// Call back without the state lock held