Only use zparenting for drawing rects.
Fixes: 345672276
Test: npm run test:unit:ci
Change-Id: If3036ce40b35df980dd1a8d7565016992f0a8778
diff --git a/tools/winscope/src/parsers/hierarchy_tree_builder.ts b/tools/winscope/src/parsers/hierarchy_tree_builder.ts
index 1c1c139..53f755c 100644
--- a/tools/winscope/src/parsers/hierarchy_tree_builder.ts
+++ b/tools/winscope/src/parsers/hierarchy_tree_builder.ts
@@ -83,7 +83,7 @@
child: HierarchyTreeNode,
) {
parent.addOrReplaceChild(child);
- child.setZParent(parent);
+ child.setParent(parent);
}
protected abstract buildIdentifierToChildrenMap(
diff --git a/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation.ts b/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation.ts
index eff955d..07d13b9 100644
--- a/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation.ts
+++ b/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation.ts
@@ -389,7 +389,7 @@
}
private isHiddenByParent(layer: HierarchyTreeNode): boolean {
- const parentLayer = assertDefined(layer.getZParent());
+ const parentLayer = assertDefined(layer.getParent());
return (
!parentLayer.isRoot() &&
(this.isHiddenByPolicy(parentLayer) || this.isHiddenByParent(parentLayer))
diff --git a/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation_test.ts b/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation_test.ts
index 540533c..ca92d01 100644
--- a/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation_test.ts
+++ b/tools/winscope/src/parsers/surface_flinger/computations/visibility_properties_computation_test.ts
@@ -20,6 +20,7 @@
import {HierarchyTreeBuilder} from 'test/unit/hierarchy_tree_builder';
import {HierarchyTreeNode} from 'trace/tree_node/hierarchy_tree_node';
import {VisibilityPropertiesComputation} from './visibility_properties_computation';
+import {ZOrderPathsComputation} from './z_order_paths_computation';
describe('VisibilityPropertiesComputation', () => {
let computation: VisibilityPropertiesComputation;
@@ -126,7 +127,7 @@
expect(getVisibilityReasons(invisibleLayer)).toEqual(['flag is hidden']);
});
- it('detects non-visible layer that is hidden by parent', () => {
+ it('detects non-visible layer that is hidden by parent, even if rel-z parent is not hidden', () => {
const hierarchyRoot = new HierarchyTreeBuilder()
.setId('LayerTraceEntry')
.setName('root')
@@ -176,6 +177,7 @@
backgroundBlurRadius: 0,
layerStack: 0,
z: 0,
+ zOrderRelativeOf: 3,
transform: {
type: 0,
dsdx: 1,
@@ -189,8 +191,37 @@
},
],
},
+ {
+ id: 3,
+ name: 'relZParent',
+ properties: {
+ id: 3,
+ name: 'relZParent',
+ parent: -1,
+ children: [],
+ visibleRegion: {rect: [{left: 0, right: 1, top: 0, bottom: 1}]},
+ activeBuffer: {width: 1, height: 1, stride: 1, format: 1},
+ flags: 0,
+ color: {r: 0, g: 0, b: 0, a: 1},
+ cornerRadius: 0,
+ shadowRadius: 0,
+ backgroundBlurRadius: 0,
+ layerStack: 0,
+ z: 0,
+ transform: {
+ type: 0,
+ dsdx: 1,
+ dtdx: 0,
+ dsdy: 0,
+ dtdy: 1,
+ },
+ screenBounds: null,
+ isOpaque: false,
+ } as android.surfaceflinger.ILayerProto,
+ },
])
.build();
+ new ZOrderPathsComputation().setRoot(hierarchyRoot).executeInPlace();
computation.setRoot(hierarchyRoot).executeInPlace();
const visibleLayer = assertDefined(hierarchyRoot.getChildByName('parent'));
diff --git a/tools/winscope/src/test/unit/hierarchy_tree_builder.ts b/tools/winscope/src/test/unit/hierarchy_tree_builder.ts
index bbe1635..493503f 100644
--- a/tools/winscope/src/test/unit/hierarchy_tree_builder.ts
+++ b/tools/winscope/src/test/unit/hierarchy_tree_builder.ts
@@ -85,7 +85,7 @@
.setChildren(child.children ?? [])
.build();
rootNode.addOrReplaceChild(childNode);
- childNode.setZParent(rootNode);
+ childNode.setParent(rootNode);
}
private makeHierarchyNodeId() {
diff --git a/tools/winscope/src/trace/tree_node/hierarchy_tree_node.ts b/tools/winscope/src/trace/tree_node/hierarchy_tree_node.ts
index ba32fad..95ba8b5 100644
--- a/tools/winscope/src/trace/tree_node/hierarchy_tree_node.ts
+++ b/tools/winscope/src/trace/tree_node/hierarchy_tree_node.ts
@@ -21,7 +21,8 @@
export class HierarchyTreeNode extends TreeNode {
private rects: TraceRect[] | undefined;
- private zParent: this | undefined;
+ private zParent: HierarchyTreeNode | undefined;
+ private parent: this | undefined;
constructor(
id: string,
@@ -51,23 +52,31 @@
return this.rects;
}
- setZParent(parent: this): void {
+ setZParent(parent: HierarchyTreeNode): void {
this.zParent = parent;
}
- getZParent(): this | undefined {
- return this.zParent;
+ getZParent(): HierarchyTreeNode | undefined {
+ return this.zParent ?? this.parent;
+ }
+
+ setParent(parent: this): void {
+ this.parent = parent;
+ }
+
+ getParent(): this | undefined {
+ return this.parent;
}
override isRoot(): boolean {
- return !this.zParent;
+ return !this.parent;
}
findAncestor(targetNodeFilter: (node: this) => boolean): this | undefined {
- let ancestor = this.getZParent();
+ let ancestor = this.getParent();
while (ancestor && !targetNodeFilter(ancestor)) {
- ancestor = ancestor.getZParent();
+ ancestor = ancestor.getParent();
}
return ancestor;
diff --git a/tools/winscope/src/viewers/common/add_diffs_hierarchy_tree_test.ts b/tools/winscope/src/viewers/common/add_diffs_hierarchy_tree_test.ts
index 0978fba..942cf6b 100644
--- a/tools/winscope/src/viewers/common/add_diffs_hierarchy_tree_test.ts
+++ b/tools/winscope/src/viewers/common/add_diffs_hierarchy_tree_test.ts
@@ -119,7 +119,7 @@
exampleProperty: value,
});
rootNode.addOrReplaceChild(child);
- child.setZParent(rootNode);
+ child.setParent(rootNode);
return child;
}
@@ -132,7 +132,7 @@
exampleProperty: 'value',
});
rootNode.addOrReplaceChild(parent);
- parent.setZParent(rootNode);
+ parent.setParent(rootNode);
return parent;
}
});
diff --git a/tools/winscope/src/viewers/common/ui_hierarchy_tree_node.ts b/tools/winscope/src/viewers/common/ui_hierarchy_tree_node.ts
index 134a132..6a311e9 100644
--- a/tools/winscope/src/viewers/common/ui_hierarchy_tree_node.ts
+++ b/tools/winscope/src/viewers/common/ui_hierarchy_tree_node.ts
@@ -38,7 +38,10 @@
const rects = node.getRects();
if (rects) displayNode.setRects(rects);
- if (parent) displayNode.setZParent(parent);
+ if (parent) displayNode.setParent(parent);
+
+ const zParent = node.getZParent();
+ if (zParent) displayNode.setZParent(zParent);
node.getAllChildren().forEach((child) => {
displayNode.addOrReplaceChild(
diff --git a/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts b/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
index b75d02b..7418030 100644
--- a/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
@@ -71,7 +71,7 @@
),
);
const selectedTreeParent = UiHierarchyTreeNode.from(
- assertDefined(layer.getZParent()),
+ assertDefined(layer.getParent()),
);
selectedTree = assertDefined(
selectedTreeParent.getChildByName('Dim layer#53'),