Merge "Fix "Display root layer not found""
diff --git a/libraries/flicker/src/com/android/server/wm/flicker/LayersTrace.java b/libraries/flicker/src/com/android/server/wm/flicker/LayersTrace.java
index 38b9004..b273e6b 100644
--- a/libraries/flicker/src/com/android/server/wm/flicker/LayersTrace.java
+++ b/libraries/flicker/src/com/android/server/wm/flicker/LayersTrace.java
@@ -140,7 +140,7 @@
int numKeys = layerMap.size();
for (int i = 0; i < numKeys; ++i) {
Layer currentLayer = layerMap.valueAt(i);
- if (currentLayer.getName().contains("Display Root")) {
+ if (currentLayer.isRootLayer()) {
knownRoot = currentLayer;
break;
}
@@ -434,7 +434,7 @@
}
public boolean isRootLayer() {
- return mParent == null || mParent.mProto == null;
+ return mParent != null && mParent.mProto == null;
}
public boolean isInvisible() {
diff --git a/libraries/flicker/test/assets/testdata/layers_trace_root.pb b/libraries/flicker/test/assets/testdata/layers_trace_root.pb
new file mode 100644
index 0000000..d961714
--- /dev/null
+++ b/libraries/flicker/test/assets/testdata/layers_trace_root.pb
Binary files differ
diff --git a/libraries/flicker/test/assets/testdata/layers_trace_root_aosp.pb b/libraries/flicker/test/assets/testdata/layers_trace_root_aosp.pb
new file mode 100644
index 0000000..666b328
--- /dev/null
+++ b/libraries/flicker/test/assets/testdata/layers_trace_root_aosp.pb
Binary files differ
diff --git a/libraries/flicker/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java b/libraries/flicker/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java
index 0415f81..2ccae42 100644
--- a/libraries/flicker/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java
+++ b/libraries/flicker/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java
@@ -33,6 +33,8 @@
import org.junit.runners.MethodSorters;
import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* Contains {@link LayersTraceSubject} tests. To run this test: {@code atest
@@ -89,7 +91,9 @@
assertWithMessage("Contains path to trace")
.that(e.getMessage())
.contains("layers_trace_invalid_layer_visibility.pb");
- assertWithMessage("Contains timestamp").that(e.getMessage()).contains("70h13m14s303ms");
+ assertWithMessage("Contains timestamp")
+ .that(e.getMessage())
+ .contains("2d22h13m14s303ms");
assertWithMessage("Contains assertion function")
.that(e.getMessage())
.contains("!isVisible");
@@ -100,4 +104,37 @@
+ ".SimpleActivity#0 is visible");
}
}
+
+ private void detectRootLayer(String fileName) {
+ LayersTrace layersTrace = readLayerTraceFromFile(fileName);
+
+ for (LayersTrace.Entry entry : layersTrace.getEntries()) {
+ List<LayersTrace.Layer> flattened = entry.asFlattenedLayers();
+ List<LayersTrace.Layer> rootLayers =
+ flattened
+ .stream()
+ .filter(LayersTrace.Layer::isRootLayer)
+ .collect(Collectors.toList());
+
+ assertWithMessage("Does not have any root layer")
+ .that(rootLayers.size())
+ .isGreaterThan(0);
+
+ int firstParentId = rootLayers.get(0).getParentId();
+
+ assertWithMessage("Has multiple root layers")
+ .that(rootLayers.stream().allMatch(p -> p.getParentId() == firstParentId))
+ .isTrue();
+ }
+ }
+
+ @Test
+ public void testCanDetectRootLayer() {
+ detectRootLayer("layers_trace_root.pb");
+ }
+
+ @Test
+ public void testCanDetectRootLayerAOSP() {
+ detectRootLayer("layers_trace_root_aosp.pb");
+ }
}