Set cache dirty on layer creation/destruction
The adapter misses an edge cases where a transaction both destroys and
creates a layer. Under these conditions, assignHwc1LayerIds() is not
called. mHwc1LayerMap contains reference to destroyed layers
and ultimately lead to segfault.
Test: Angler eng device and AUPT.
Change-Id: I96bcbabf74a80cc87df796c0bc84b84e2bda8614
diff --git a/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp b/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp
index 7322c13..92bcb77 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp
@@ -607,6 +607,7 @@
mDevice.mLayers.emplace(std::make_pair(layer->getId(), layer));
*outLayerId = layer->getId();
ALOGV("[%" PRIu64 "] created layer %" PRIu64, mId, *outLayerId);
+ mZIsDirty = true;
return Error::None;
}
@@ -630,6 +631,7 @@
}
}
ALOGV("[%" PRIu64 "] destroyed layer %" PRIu64, mId, layerId);
+ mZIsDirty = true;
return Error::None;
}