Merge "[SurfaceFlinger] Checking nullptr for HWC layer." am: 7038766ba1
am: 1560941b5e
Change-Id: I4c410239c9f8734fea33cb5adb7777cc316f4d55
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 7ac1432..f5b5eda 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);