Merge "[SurfaceFlinger] Checking nullptr for HWC layer."
am: 7038766ba1
Change-Id: I91c890583b6a1d40d7df8cb7f00911ee67012ab2
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 12267ad..3db633b 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -622,6 +622,9 @@
const auto& viewport = displayDevice->getViewport();
Region visible = tr.transform(visibleRegion.intersect(viewport));
auto hwcId = displayDevice->getHwcDisplayId();
+ if (!hasHwcLayer(hwcId)) {
+ return;
+ }
auto& hwcInfo = getBE().mHwcLayers[hwcId];
auto& hwcLayer = hwcInfo.layer;
auto error = hwcLayer->setVisibleRegion(visible);
diff --git a/services/surfaceflinger/ColorLayer.cpp b/services/surfaceflinger/ColorLayer.cpp
index 512564c..ff957c0 100644
--- a/services/surfaceflinger/ColorLayer.cpp
+++ b/services/surfaceflinger/ColorLayer.cpp
@@ -66,6 +66,9 @@
const auto& viewport = displayDevice->getViewport();
Region visible = tr.transform(visibleRegion.intersect(viewport));
auto hwcId = displayDevice->getHwcDisplayId();
+ if (!hasHwcLayer(hwcId)) {
+ return;
+ }
auto& hwcInfo = getBE().mHwcLayers[hwcId];
auto& hwcLayer = hwcInfo.layer;
auto error = hwcLayer->setVisibleRegion(visible);
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index a14bb98..90e0e9e 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -500,6 +500,9 @@
void Layer::setGeometry(const sp<const DisplayDevice>& displayDevice, uint32_t z)
{
const auto hwcId = displayDevice->getHwcDisplayId();
+ if (!hasHwcLayer(hwcId)) {
+ return;
+ }
auto& hwcInfo = getBE().mHwcLayers[hwcId];
// enable this layer
@@ -2009,6 +2012,9 @@
}
void Layer::writeToProto(LayerProto* layerInfo, int32_t hwcId) {
+ if (!hasHwcLayer(hwcId)) {
+ return;
+ }
writeToProto(layerInfo, LayerVector::StateSet::Drawing);
const auto& hwcInfo = getBE().mHwcLayers.at(hwcId);