summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steve Pfetsch <spfetsch@google.com> 2016-10-19 04:53:17 +0000
committer android-build-merger <android-build-merger@google.com> 2016-10-19 04:53:17 +0000
commitff06017cfe9f301f86896d884150681b1a6eb1d2 (patch)
tree0284d4e3f836cd5aefcd9d7f4f5ecf3dea701eae
parenta34aade39ae0cf56c1747c13defd996b937dc9f3 (diff)
parent1d3df546d5ee4dcc9e7cae6f8b8b790f741539af (diff)
services: surfaceflinger: ASAN fix
am: 1d3df546d5 Change-Id: If0447f27ab0a1c3033b0a87fc8426f53c2a82ac5
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8db071ed2f..db52d40214 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1768,9 +1768,12 @@ void SurfaceFlinger::updateCursorAsync()
void SurfaceFlinger::commitTransaction()
{
- if (!mLayersPendingRemoval.isEmpty()) {
+ sp<const DisplayDevice> hw = getDefaultDisplayDevice();
+
+ if (!mLayersPendingRemoval.isEmpty() && hw->isDisplayOn()) {
// Notify removed layers now that they can't be drawn from
for (size_t i = 0; i < mLayersPendingRemoval.size(); i++) {
+ mCurrentState.layersSortedByZ.remove(mLayersPendingRemoval[i]);
recordBufferingStats(mLayersPendingRemoval[i]->getName().string(),
mLayersPendingRemoval[i]->getOccupancyHistory(true));
mLayersPendingRemoval[i]->onRemoved();
@@ -2217,14 +2220,10 @@ status_t SurfaceFlinger::removeLayer(const wp<Layer>& weakLayer) {
return NO_ERROR;
}
- ssize_t index = mCurrentState.layersSortedByZ.remove(layer);
- if (index >= 0) {
- mLayersPendingRemoval.push(layer);
- mLayersRemoved = true;
- setTransactionFlags(eTransactionNeeded);
- return NO_ERROR;
- }
- return status_t(index);
+ mLayersPendingRemoval.push(layer);
+ mLayersRemoved = true;
+ setTransactionFlags(eTransactionNeeded);
+ return NO_ERROR;
}
uint32_t SurfaceFlinger::peekTransactionFlags(uint32_t /* flags */) {