From 591618c8b58e2a5200dbaeda73041e842d581d2b Mon Sep 17 00:00:00 2001 From: Nataniel Borges Date: Thu, 27 Dec 2018 11:32:26 -0800 Subject: [PATCH] Display only elements actually visible on the screen as "Visible" Use the visibleRegion property to determine if a layer is visible on the screen or not. Elements may have a size and a crop but be displayed below another. While the visible option cannot be used to render the elements due to transforms, it only has a value if the element is displayed on the screen. Note that elements may still not appear on the screen as all their visible regions are below the screen (right < 0 or bottom < 0) Test: Open trace in winscope, check if only layers visible on the screen have a visible chip and are displayed. Change-Id: I75137a5057a5bda96db887b110b053e64b49f885 --- tools/winscope/src/transform_sf.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/winscope/src/transform_sf.js b/tools/winscope/src/transform_sf.js index bfe12d1e6..a3693c42d 100644 --- a/tools/winscope/src/transform_sf.js +++ b/tools/winscope/src/transform_sf.js @@ -89,11 +89,12 @@ function transform_layer(layer, {parentBounds, parentHidden}) { * @param {layer} layer * @returns if the layer is visible on screen or not */ - function is_visible(layer, visibleRect) { + function is_visible(layer) { var visible = (layer.activeBuffer || layer.type === 'ColorLayer') - && !hidden && layer.color.a > 0; - if (visibleRect != undefined) { - visible &= has_size(visibleRect); + && !hidden && layer.color.a > 0; + if (visible && layer.visibleRegion != undefined) { + var isRectVisible = layer.visibleRegion.rect.some(has_size); + visible &= isRectVisible; } return visible } @@ -101,7 +102,7 @@ function transform_layer(layer, {parentBounds, parentHidden}) { var chips = []; var rect = transform_bounds(layer, parentBounds); var hidden = (layer.flags & FLAG_HIDDEN) != 0 || parentHidden; - var visible = is_visible(layer, rect); + var visible = is_visible(layer); if (visible) { chips.push(get_visible_chip()); } else {