Skip to content

Commit e2eaf69

Browse files
Romain GuyAndroid (Google) Code Review
authored andcommitted
Merge "Prevent crash when flushing the layers cache Bug #6258973"
2 parents 7eae9cb + 5c88fc7 commit e2eaf69

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

libs/hwui/LayerCache.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,14 @@ void LayerCache::setMaxSize(uint32_t maxSize) {
6969

7070
void LayerCache::deleteLayer(Layer* layer) {
7171
if (layer) {
72-
LAYER_LOGD("Destroying layer %dx%d", layer->getWidth(), layer->getHeight());
72+
GLuint fbo = layer->getFbo();
73+
LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(), fbo);
74+
7375
mSize -= layer->getWidth() * layer->getHeight() * 4;
74-
layer->deleteFbo();
76+
77+
if (fbo) Caches::getInstance().fboCache.put(fbo);
7578
layer->deleteTexture();
79+
7680
delete layer;
7781
}
7882
}
@@ -174,6 +178,10 @@ bool LayerCache::put(Layer* layer) {
174178
victim->layer.getHeight());
175179
}
176180

181+
layer->deferredUpdateScheduled = false;
182+
layer->renderer = NULL;
183+
layer->displayList = NULL;
184+
177185
LayerEntry entry(layer);
178186

179187
mCache.add(entry);

libs/hwui/LayerRenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ void LayerRenderer::destroyLayer(Layer* layer) {
309309
if (fbo) {
310310
flushLayer(layer);
311311
Caches::getInstance().fboCache.put(fbo);
312+
layer->setFbo(0);
312313
}
313314

314315
if (!Caches::getInstance().layerCache.put(layer)) {

libs/hwui/OpenGLRenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
678678

679679
// Put the FBO name back in the cache, if it doesn't fit, it will be destroyed
680680
mCaches.fboCache.put(current->fbo);
681+
layer->setFbo(0);
681682
}
682683

683684
dirtyClip();

0 commit comments

Comments
 (0)