From 9c5f595ed39a4e290ef380b33178aa92db6ea93d Mon Sep 17 00:00:00 2001 From: chaviw Date: Mon, 13 Jan 2020 13:33:24 -0800 Subject: [PATCH] Added visibility check for missing relativeOf When the layer has the flag isRelativeOf but the relativeOf is -1, that means the relativeOf layer has been removed. This would prevent the layer from showing up on screen, but still be in memory. Added this reason to list of reasons why layer wouldn't be visible. Also added fix for BufferLayer check to instead check for BufferQueueLayer and BufferStateLayer. Test: winscope shows "RelativeOf layer has been removed" Change-Id: Id1d59bd71a5aac7a011204ba345d694f67c28a29 --- tools/winscope/src/transform_sf.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/winscope/src/transform_sf.js b/tools/winscope/src/transform_sf.js index 6316fd980..446af29a8 100644 --- a/tools/winscope/src/transform_sf.js +++ b/tools/winscope/src/transform_sf.js @@ -209,10 +209,8 @@ function transform_layer(layer, {parentBounds, parentHidden}) { if (is_transform_invalid(layer.transform)) { reasons.push('Transform is invalid'); } - var isBufferLayer = (layer.type === 'BufferStateLayer' || layer.type === 'BufferQueueLayer'); - if (isBufferLayer && is_transform_invalid(layer.bufferTransform) - && layer.activeBuffer) { - reasons.push('BufferTransform is invalid') + if (layer.isRelativeOf && layer.zOrderRelativeOf == -1) { + reasons.push('RelativeOf layer has been removed'); } return reasons.join(); } @@ -220,12 +218,13 @@ function transform_layer(layer, {parentBounds, parentHidden}) { layer.invisibleDueTo = 'Hidden by parent with ID: ' + parentHidden; } else { let reasons_hidden = visibilityReason(layer); + let isBufferLayer = (layer.type === 'BufferStateLayer' || layer.type === 'BufferQueueLayer'); if (reasons_hidden) { layer.invisibleDueTo = reasons_hidden; parentHidden = layer.id } else if (layer.type === 'ContainerLayer') { layer.invisibleDueTo = 'This is a ContainerLayer.'; - } else if (layer.type === 'BufferLayer' && (!layer.activeBuffer || + } else if (isBufferLayer && (!layer.activeBuffer || layer.activeBuffer.height === 0 || layer.activeBuffer.width === 0)) { layer.invisibleDueTo = 'The buffer is empty.'; } else if (!visible) {