From f5c828cb48c2b01828a967e1af64faa34daf8fc7 Mon Sep 17 00:00:00 2001 From: Nataniel Borges Date: Mon, 9 Sep 2019 17:29:23 +0200 Subject: [PATCH] Make Flicker Tests compatible with current AOSP Current status: atest FlickerTests: Passed: 132, Failed: 11, Ignored: 0 Test: atest FlickerTests Change-Id: I581005fd293631630a3939eeaae485c1fd41ebb9 --- tests/FlickerTests/AndroidManifest.xml | 4 +- tests/FlickerTests/lib/Android.bp | 57 --- .../com/android/server/wm/flicker/Assertions.java | 134 ------- .../server/wm/flicker/AssertionsChecker.java | 183 --------- .../com/android/server/wm/flicker/ITraceEntry.java | 27 -- .../com/android/server/wm/flicker/LayersTrace.java | 420 -------------------- .../server/wm/flicker/LayersTraceSubject.java | 140 ------- .../server/wm/flicker/TransitionRunner.java | 433 --------------------- .../server/wm/flicker/WindowManagerTrace.java | 240 ------------ .../com/android/server/wm/flicker/WindowUtils.java | 144 ------- .../android/server/wm/flicker/WmTraceSubject.java | 192 --------- .../server/wm/flicker/helpers/AutomationUtils.java | 263 ------------- .../wm/flicker/monitor/ITransitionMonitor.java | 63 --- .../wm/flicker/monitor/LayersTraceMonitor.java | 64 --- .../server/wm/flicker/monitor/ScreenRecorder.java | 80 ---- .../server/wm/flicker/monitor/TraceMonitor.java | 74 ---- .../monitor/WindowAnimationFrameStatsMonitor.java | 100 ----- .../flicker/monitor/WindowManagerTraceMonitor.java | 59 --- tests/FlickerTests/lib/test/Android.bp | 33 -- tests/FlickerTests/lib/test/AndroidManifest.xml | 26 -- tests/FlickerTests/lib/test/AndroidTest.xml | 20 - .../assets/testdata/layers_trace_emptyregion.pb | Bin 565800 -> 0 bytes .../layers_trace_invalid_layer_visibility.pb | Bin 3580523 -> 0 bytes .../assets/testdata/layers_trace_orphanlayers.pb | Bin 1936878 -> 0 bytes .../test/assets/testdata/wm_trace_openchrome.pb | Bin 355010 -> 0 bytes .../test/assets/testdata/wm_trace_openchrome2.pb | Bin 194353 -> 0 bytes .../server/wm/flicker/AssertionsCheckerTest.java | 181 --------- .../android/server/wm/flicker/AssertionsTest.java | 60 --- .../server/wm/flicker/LayersTraceSubjectTest.java | 88 ----- .../android/server/wm/flicker/LayersTraceTest.java | 230 ----------- .../android/server/wm/flicker/TestFileUtils.java | 36 -- .../server/wm/flicker/TransitionRunnerTest.java | 258 ------------ .../server/wm/flicker/WindowManagerTraceTest.java | 108 ----- .../server/wm/flicker/WmTraceSubjectTest.java | 49 --- .../wm/flicker/monitor/LayersTraceMonitorTest.java | 78 ---- .../wm/flicker/monitor/ScreenRecorderTest.java | 70 ---- .../WindowAnimationFrameStatsMonitorTest.java | 50 --- .../monitor/WindowManagerTraceMonitorTest.java | 79 ---- .../server/wm/flicker/ChangeAppRotationTest.java | 33 +- .../server/wm/flicker/CloseImeWindowToAppTest.java | 5 +- .../wm/flicker/CloseImeWindowToHomeTest.java | 5 +- .../server/wm/flicker/CommonTransitions.java | 12 +- .../com/android/server/wm/flicker/DebugTest.java | 5 + .../android/server/wm/flicker/FlickerTestBase.java | 39 +- .../android/server/wm/flicker/OpenAppColdTest.java | 9 +- .../wm/flicker/OpenAppToSplitScreenTest.java | 7 +- .../android/server/wm/flicker/OpenAppWarmTest.java | 9 +- .../server/wm/flicker/OpenImeWindowTest.java | 5 +- .../server/wm/flicker/ResizeSplitScreenTest.java | 7 +- .../server/wm/flicker/SeamlessAppRotationTest.java | 5 +- .../wm/flicker/SplitScreenToLauncherTest.java | 11 +- .../server/wm/flicker/StandardAppHelper.java | 59 --- .../flicker/testapp/SeamlessRotationActivity.java | 5 +- 53 files changed, 103 insertions(+), 4156 deletions(-) delete mode 100644 tests/FlickerTests/lib/Android.bp delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/Assertions.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/AssertionsChecker.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/ITraceEntry.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTrace.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTraceSubject.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/TransitionRunner.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowManagerTrace.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowUtils.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/WmTraceSubject.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/helpers/AutomationUtils.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ITransitionMonitor.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/LayersTraceMonitor.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ScreenRecorder.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/TraceMonitor.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitor.java delete mode 100644 tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitor.java delete mode 100644 tests/FlickerTests/lib/test/Android.bp delete mode 100644 tests/FlickerTests/lib/test/AndroidManifest.xml delete mode 100644 tests/FlickerTests/lib/test/AndroidTest.xml delete mode 100644 tests/FlickerTests/lib/test/assets/testdata/layers_trace_emptyregion.pb delete mode 100644 tests/FlickerTests/lib/test/assets/testdata/layers_trace_invalid_layer_visibility.pb delete mode 100644 tests/FlickerTests/lib/test/assets/testdata/layers_trace_orphanlayers.pb delete mode 100644 tests/FlickerTests/lib/test/assets/testdata/wm_trace_openchrome.pb delete mode 100644 tests/FlickerTests/lib/test/assets/testdata/wm_trace_openchrome2.pb delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsCheckerTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TestFileUtils.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TransitionRunnerTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WindowManagerTraceTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WmTraceSubjectTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/LayersTraceMonitorTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/ScreenRecorderTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitorTest.java delete mode 100644 tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitorTest.java delete mode 100644 tests/FlickerTests/src/com/android/server/wm/flicker/StandardAppHelper.java diff --git a/tests/FlickerTests/AndroidManifest.xml b/tests/FlickerTests/AndroidManifest.xml index 5b1a36b84cc4..9b73abfd6908 100644 --- a/tests/FlickerTests/AndroidManifest.xml +++ b/tests/FlickerTests/AndroidManifest.xml @@ -23,6 +23,8 @@ + + @@ -33,4 +35,4 @@ android:targetPackage="com.android.server.wm.flicker" android:label="WindowManager Flicker Tests"> - \ No newline at end of file + diff --git a/tests/FlickerTests/lib/Android.bp b/tests/FlickerTests/lib/Android.bp deleted file mode 100644 index e0f0188ee618..000000000000 --- a/tests/FlickerTests/lib/Android.bp +++ /dev/null @@ -1,57 +0,0 @@ -// -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -java_test { - name: "flickerlib", - platform_apis: true, - srcs: ["src/**/*.java"], - static_libs: [ - "androidx.test.janktesthelper", - "cts-wm-util", - "platformprotosnano", - "layersprotosnano", - "truth-prebuilt", - "sysui-helper", - "launcher-helper-lib", - ], -} - -java_library { - name: "flickerlib_without_helpers", - platform_apis: true, - srcs: ["src/**/*.java"], - exclude_srcs: ["src/**/helpers/*.java"], - static_libs: [ - "cts-wm-util", - "platformprotosnano", - "layersprotosnano", - "truth-prebuilt" - ], -} - -java_library { - name: "flickerautomationhelperlib", - sdk_version: "test_current", - srcs: [ - "src/com/android/server/wm/flicker/helpers/AutomationUtils.java", - "src/com/android/server/wm/flicker/WindowUtils.java", - ], - static_libs: [ - "sysui-helper", - "launcher-helper-lib", - "compatibility-device-util-axt", - ], -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/Assertions.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/Assertions.java deleted file mode 100644 index 38255ee6fe8d..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/Assertions.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import java.util.concurrent.TimeUnit; -import java.util.function.Function; - -/** - * Collection of functional interfaces and classes representing assertions and their associated - * results. Assertions are functions that are applied over a single trace entry and returns a - * result which includes a detailed reason if the assertion fails. - */ -public class Assertions { - /** - * Checks assertion on a single trace entry. - * - * @param trace entry type to perform the assertion on. - */ - @FunctionalInterface - public interface TraceAssertion extends Function { - /** - * Returns an assertion that represents the logical negation of this assertion. - * - * @return a assertion that represents the logical negation of this assertion - */ - default TraceAssertion negate() { - return (T t) -> apply(t).negate(); - } - } - - /** - * Checks assertion on a single layers trace entry. - */ - @FunctionalInterface - public interface LayersTraceAssertion extends TraceAssertion { - - } - - /** - * Utility class to store assertions with an identifier to help generate more useful debug - * data when dealing with multiple assertions. - */ - public static class NamedAssertion { - public final TraceAssertion assertion; - public final String name; - - public NamedAssertion(TraceAssertion assertion, String name) { - this.assertion = assertion; - this.name = name; - } - } - - /** - * Contains the result of an assertion including the reason for failed assertions. - */ - public static class Result { - public static final String NEGATION_PREFIX = "!"; - public final boolean success; - public final long timestamp; - public final String assertionName; - public final String reason; - - public Result(boolean success, long timestamp, String assertionName, String reason) { - this.success = success; - this.timestamp = timestamp; - this.assertionName = assertionName; - this.reason = reason; - } - - public Result(boolean success, String reason) { - this.success = success; - this.reason = reason; - this.assertionName = ""; - this.timestamp = 0; - } - - /** - * Returns the negated {@code Result} and adds a negation prefix to the assertion name. - */ - public Result negate() { - String negatedAssertionName; - if (this.assertionName.startsWith(NEGATION_PREFIX)) { - negatedAssertionName = this.assertionName.substring(NEGATION_PREFIX.length() + 1); - } else { - negatedAssertionName = NEGATION_PREFIX + this.assertionName; - } - return new Result(!this.success, this.timestamp, negatedAssertionName, this.reason); - } - - public boolean passed() { - return this.success; - } - - public boolean failed() { - return !this.success; - } - - @Override - public String toString() { - return "Timestamp: " + prettyTimestamp(timestamp) - + "\nAssertion: " + assertionName - + "\nReason: " + reason; - } - - private String prettyTimestamp(long timestamp_ns) { - StringBuilder prettyTimestamp = new StringBuilder(); - TimeUnit[] timeUnits = {TimeUnit.HOURS, TimeUnit.MINUTES, TimeUnit.SECONDS, TimeUnit - .MILLISECONDS}; - String[] unitSuffixes = {"h", "m", "s", "ms"}; - - for (int i = 0; i < timeUnits.length; i++) { - long convertedTime = timeUnits[i].convert(timestamp_ns, TimeUnit.NANOSECONDS); - timestamp_ns -= TimeUnit.NANOSECONDS.convert(convertedTime, timeUnits[i]); - prettyTimestamp.append(convertedTime).append(unitSuffixes[i]); - } - - return prettyTimestamp.toString(); - } - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/AssertionsChecker.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/AssertionsChecker.java deleted file mode 100644 index 5c4df81299c1..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/AssertionsChecker.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import com.android.server.wm.flicker.Assertions.NamedAssertion; -import com.android.server.wm.flicker.Assertions.Result; -import com.android.server.wm.flicker.Assertions.TraceAssertion; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -/** - * Captures some of the common logic in {@link LayersTraceSubject} and {@link WmTraceSubject} - * used to filter trace entries and combine multiple assertions. - * - * @param trace entry type - */ -public class AssertionsChecker { - private boolean mFilterEntriesByRange = false; - private long mFilterStartTime = 0; - private long mFilterEndTime = 0; - private AssertionOption mOption = AssertionOption.NONE; - private List> mAssertions = new LinkedList<>(); - - public void add(Assertions.TraceAssertion assertion, String name) { - mAssertions.add(new NamedAssertion<>(assertion, name)); - } - - public void filterByRange(long startTime, long endTime) { - mFilterEntriesByRange = true; - mFilterStartTime = startTime; - mFilterEndTime = endTime; - } - - private void setOption(AssertionOption option) { - if (mOption != AssertionOption.NONE && option != mOption) { - throw new IllegalArgumentException("Cannot use " + mOption + " option with " - + option + " option."); - } - mOption = option; - } - - public void checkFirstEntry() { - setOption(AssertionOption.CHECK_FIRST_ENTRY); - } - - public void checkLastEntry() { - setOption(AssertionOption.CHECK_LAST_ENTRY); - } - - public void checkChangingAssertions() { - setOption(AssertionOption.CHECK_CHANGING_ASSERTIONS); - } - - - /** - * Filters trace entries then runs assertions returning a list of failures. - * - * @param entries list of entries to perform assertions on - * @return list of failed assertion results - */ - public List test(List entries) { - List filteredEntries; - List failures; - - if (mFilterEntriesByRange) { - filteredEntries = entries.stream() - .filter(e -> ((e.getTimestamp() >= mFilterStartTime) - && (e.getTimestamp() <= mFilterEndTime))) - .collect(Collectors.toList()); - } else { - filteredEntries = entries; - } - - switch (mOption) { - case CHECK_CHANGING_ASSERTIONS: - return assertChanges(filteredEntries); - case CHECK_FIRST_ENTRY: - return assertEntry(filteredEntries.get(0)); - case CHECK_LAST_ENTRY: - return assertEntry(filteredEntries.get(filteredEntries.size() - 1)); - } - return assertAll(filteredEntries); - } - - /** - * Steps through each trace entry checking if provided assertions are true in the order they - * are added. Each assertion must be true for at least a single trace entry. - * - * This can be used to check for asserting a change in property over a trace. Such as visibility - * for a window changes from true to false or top-most window changes from A to Bb and back to A - * again. - */ - private List assertChanges(List entries) { - List failures = new ArrayList<>(); - int entryIndex = 0; - int assertionIndex = 0; - int lastPassedAssertionIndex = -1; - - if (mAssertions.size() == 0) { - return failures; - } - - while (assertionIndex < mAssertions.size() && entryIndex < entries.size()) { - TraceAssertion currentAssertion = mAssertions.get(assertionIndex).assertion; - Result result = currentAssertion.apply(entries.get(entryIndex)); - if (result.passed()) { - lastPassedAssertionIndex = assertionIndex; - entryIndex++; - continue; - } - - if (lastPassedAssertionIndex != assertionIndex) { - failures.add(result); - break; - } - assertionIndex++; - - if (assertionIndex == mAssertions.size()) { - failures.add(result); - break; - } - } - - if (failures.isEmpty()) { - if (assertionIndex != mAssertions.size() - 1) { - String reason = "\nAssertion " + mAssertions.get(assertionIndex).name - + " never became false"; - reason += "\nPassed assertions: " + mAssertions.stream().limit(assertionIndex) - .map(assertion -> assertion.name).collect(Collectors.joining(",")); - reason += "\nUntested assertions: " + mAssertions.stream().skip(assertionIndex + 1) - .map(assertion -> assertion.name).collect(Collectors.joining(",")); - - Result result = new Result(false /* success */, 0 /* timestamp */, - "assertChanges", "Not all assertions passed." + reason); - failures.add(result); - } - } - return failures; - } - - private List assertEntry(T entry) { - List failures = new ArrayList<>(); - for (NamedAssertion assertion : mAssertions) { - Result result = assertion.assertion.apply(entry); - if (result.failed()) { - failures.add(result); - } - } - return failures; - } - - private List assertAll(List entries) { - return mAssertions.stream().flatMap( - assertion -> entries.stream() - .map(assertion.assertion) - .filter(Result::failed)) - .collect(Collectors.toList()); - } - - private enum AssertionOption { - NONE, - CHECK_CHANGING_ASSERTIONS, - CHECK_FIRST_ENTRY, - CHECK_LAST_ENTRY, - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/ITraceEntry.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/ITraceEntry.java deleted file mode 100644 index c47f7f42e54e..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/ITraceEntry.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -/** - * Common interface for Layer and WindowManager trace entries. - */ -public interface ITraceEntry { - /** - * @return timestamp of current entry - */ - long getTimestamp(); -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTrace.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTrace.java deleted file mode 100644 index 68986d48783a..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTrace.java +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import android.graphics.Rect; -import android.surfaceflinger.nano.Layers.LayerProto; -import android.surfaceflinger.nano.Layers.RectProto; -import android.surfaceflinger.nano.Layers.RegionProto; -import android.surfaceflinger.nano.Layerstrace.LayersTraceFileProto; -import android.surfaceflinger.nano.Layerstrace.LayersTraceProto; -import android.util.SparseArray; - -import androidx.annotation.Nullable; - -import com.android.server.wm.flicker.Assertions.Result; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * Contains a collection of parsed Layers trace entries and assertions to apply over - * a single entry. - * - * Each entry is parsed into a list of {@link LayersTrace.Entry} objects. - */ -public class LayersTrace { - final private List mEntries; - @Nullable - final private Path mSource; - - private LayersTrace(List entries, Path source) { - this.mEntries = entries; - this.mSource = source; - } - - /** - * Parses {@code LayersTraceFileProto} from {@code data} and uses the proto to generates a list - * of trace entries, storing the flattened layers into its hierarchical structure. - * - * @param data binary proto data - * @param source Path to source of data for additional debug information - */ - public static LayersTrace parseFrom(byte[] data, Path source) { - List entries = new ArrayList<>(); - LayersTraceFileProto fileProto; - try { - fileProto = LayersTraceFileProto.parseFrom(data); - } catch (Exception e) { - throw new RuntimeException(e); - } - for (LayersTraceProto traceProto : fileProto.entry) { - Entry entry = Entry.fromFlattenedLayers(traceProto.elapsedRealtimeNanos, - traceProto.layers.layers); - entries.add(entry); - } - return new LayersTrace(entries, source); - } - - /** - * Parses {@code LayersTraceFileProto} from {@code data} and uses the proto to generates a list - * of trace entries, storing the flattened layers into its hierarchical structure. - * - * @param data binary proto data - */ - public static LayersTrace parseFrom(byte[] data) { - return parseFrom(data, null); - } - - public List getEntries() { - return mEntries; - } - - public Entry getEntry(long timestamp) { - Optional entry = mEntries.stream() - .filter(e -> e.getTimestamp() == timestamp) - .findFirst(); - if (!entry.isPresent()) { - throw new RuntimeException("Entry does not exist for timestamp " + timestamp); - } - return entry.get(); - } - - public Optional getSource() { - return Optional.ofNullable(mSource); - } - - /** - * Represents a single Layer trace entry. - */ - public static class Entry implements ITraceEntry { - private long mTimestamp; - private List mRootLayers; // hierarchical representation of layers - private List mFlattenedLayers = null; - - private Entry(long timestamp, List rootLayers) { - this.mTimestamp = timestamp; - this.mRootLayers = rootLayers; - } - - /** - * Constructs the layer hierarchy from a flattened list of layers. - */ - public static Entry fromFlattenedLayers(long timestamp, LayerProto[] protos) { - SparseArray layerMap = new SparseArray<>(); - ArrayList orphans = new ArrayList<>(); - for (LayerProto proto : protos) { - int id = proto.id; - int parentId = proto.parent; - - Layer newLayer = layerMap.get(id); - if (newLayer == null) { - newLayer = new Layer(proto); - layerMap.append(id, newLayer); - } else if (newLayer.mProto != null) { - throw new RuntimeException("Duplicate layer id found:" + id); - } else { - newLayer.mProto = proto; - orphans.remove(newLayer); - } - - // add parent placeholder - if (layerMap.get(parentId) == null) { - Layer orphanLayer = new Layer(null); - layerMap.append(parentId, orphanLayer); - orphans.add(orphanLayer); - } - layerMap.get(parentId).addChild(newLayer); - newLayer.addParent(layerMap.get(parentId)); - } - - // Fail if we find orphan layers. - orphans.remove(layerMap.get(-1)); - orphans.forEach(orphan -> { - String childNodes = orphan.mChildren.stream().map(node -> - Integer.toString(node.getId())).collect(Collectors.joining(", ")); - int orphanId = orphan.mChildren.get(0).mProto.parent; - throw new RuntimeException( - "Failed to parse layers trace. Found orphan layers with parent " - + "layer id:" + orphanId + " : " + childNodes); - }); - - return new Entry(timestamp, layerMap.get(-1).mChildren); - } - - /** - * Extracts {@link Rect} from {@link RectProto}. - */ - private static Rect extract(RectProto proto) { - return new Rect(proto.left, proto.top, proto.right, proto.bottom); - } - - /** - * Extracts {@link Rect} from {@link RegionProto} by returning a rect that encompasses all - * the rects making up the region. - */ - private static Rect extract(RegionProto regionProto) { - Rect region = new Rect(); - for (RectProto proto : regionProto.rect) { - region.union(proto.left, proto.top, proto.right, proto.bottom); - } - return region; - } - - /** - * Checks if a region specified by {@code testRect} is covered by all visible layers. - */ - public Result coversRegion(Rect testRect) { - String assertionName = "coversRegion"; - Collection layers = asFlattenedLayers(); - - for (int x = testRect.left; x < testRect.right; x++) { - for (int y = testRect.top; y < testRect.bottom; y++) { - boolean emptyRegionFound = true; - for (Layer layer : layers) { - if (layer.isInvisible() || layer.isHiddenByParent()) { - continue; - } - for (RectProto rectProto : layer.mProto.visibleRegion.rect) { - Rect r = extract(rectProto); - if (r.contains(x, y)) { - y = r.bottom; - emptyRegionFound = false; - } - } - } - if (emptyRegionFound) { - String reason = "Region to test: " + testRect - + "\nfirst empty point: " + x + ", " + y; - reason += "\nvisible regions:"; - for (Layer layer : layers) { - if (layer.isInvisible() || layer.isHiddenByParent()) { - continue; - } - Rect r = extract(layer.mProto.visibleRegion); - reason += "\n" + layer.mProto.name + r.toString(); - } - return new Result(false /* success */, this.mTimestamp, assertionName, - reason); - } - } - } - String info = "Region covered: " + testRect; - return new Result(true /* success */, this.mTimestamp, assertionName, info); - } - - /** - * Checks if a layer with name {@code layerName} has a visible region - * {@code expectedVisibleRegion}. - */ - public Result hasVisibleRegion(String layerName, Rect expectedVisibleRegion) { - String assertionName = "hasVisibleRegion"; - String reason = "Could not find " + layerName; - for (Layer layer : asFlattenedLayers()) { - if (layer.mProto.name.contains(layerName)) { - if (layer.isHiddenByParent()) { - reason = layer.getHiddenByParentReason(); - continue; - } - if (layer.isInvisible()) { - reason = layer.getVisibilityReason(); - continue; - } - Rect visibleRegion = extract(layer.mProto.visibleRegion); - if (visibleRegion.equals(expectedVisibleRegion)) { - return new Result(true /* success */, this.mTimestamp, assertionName, - layer.mProto.name + "has visible region " + expectedVisibleRegion); - } - reason = layer.mProto.name + " has visible region:" + visibleRegion + " " - + "expected:" + expectedVisibleRegion; - } - } - return new Result(false /* success */, this.mTimestamp, assertionName, reason); - } - - /** - * Checks if a layer with name {@code layerName} is visible. - */ - public Result isVisible(String layerName) { - String assertionName = "isVisible"; - String reason = "Could not find " + layerName; - for (Layer layer : asFlattenedLayers()) { - if (layer.mProto.name.contains(layerName)) { - if (layer.isHiddenByParent()) { - reason = layer.getHiddenByParentReason(); - continue; - } - if (layer.isInvisible()) { - reason = layer.getVisibilityReason(); - continue; - } - return new Result(true /* success */, this.mTimestamp, assertionName, - layer.mProto.name + " is visible"); - } - } - return new Result(false /* success */, this.mTimestamp, assertionName, reason); - } - - @Override - public long getTimestamp() { - return mTimestamp; - } - - public List getRootLayers() { - return mRootLayers; - } - - /** - * Returns all layers as a flattened list using a depth first traversal. - */ - public List asFlattenedLayers() { - if (mFlattenedLayers == null) { - mFlattenedLayers = new LinkedList<>(); - ArrayList pendingLayers = new ArrayList<>(this.mRootLayers); - while (!pendingLayers.isEmpty()) { - Layer layer = pendingLayers.remove(0); - mFlattenedLayers.add(layer); - pendingLayers.addAll(0, layer.mChildren); - } - } - return mFlattenedLayers; - } - - public Rect getVisibleBounds(String layerName) { - List layers = asFlattenedLayers(); - for (Layer layer : layers) { - if (layer.mProto.name.contains(layerName) && layer.isVisible()) { - return extract(layer.mProto.visibleRegion); - } - } - return new Rect(0, 0, 0, 0); - } - } - - /** - * Represents a single layer with links to its parent and child layers. - */ - public static class Layer { - @Nullable - public LayerProto mProto; - public List mChildren; - @Nullable - public Layer mParent = null; - - private Layer(LayerProto proto) { - this.mProto = proto; - this.mChildren = new ArrayList<>(); - } - - private void addChild(Layer childLayer) { - this.mChildren.add(childLayer); - } - - private void addParent(Layer parentLayer) { - this.mParent = parentLayer; - } - - public int getId() { - return mProto.id; - } - - public boolean isActiveBufferEmpty() { - return this.mProto.activeBuffer == null || this.mProto.activeBuffer.height == 0 - || this.mProto.activeBuffer.width == 0; - } - - public boolean isVisibleRegionEmpty() { - if (this.mProto.visibleRegion == null) { - return true; - } - Rect visibleRect = Entry.extract(this.mProto.visibleRegion); - return visibleRect.height() == 0 || visibleRect.width() == 0; - } - - public boolean isHidden() { - return (this.mProto.flags & /* FLAG_HIDDEN */ 0x1) != 0x0; - } - - public boolean isVisible() { - return (!isActiveBufferEmpty() || isColorLayer()) - && !isHidden() - && this.mProto.color != null - && this.mProto.color.a > 0 - && !isVisibleRegionEmpty(); - } - - public boolean isColorLayer() { - return this.mProto.type.equals("ColorLayer"); - } - - public boolean isRootLayer() { - return mParent == null || mParent.mProto == null; - } - - public boolean isInvisible() { - return !isVisible(); - } - - public boolean isHiddenByParent() { - return !isRootLayer() && (mParent.isHidden() || mParent.isHiddenByParent()); - } - - public String getHiddenByParentReason() { - String reason = "Layer " + mProto.name; - if (isHiddenByParent()) { - reason += " is hidden by parent: " + mParent.mProto.name; - } else { - reason += " is not hidden by parent: " + mParent.mProto.name; - } - return reason; - } - - public String getVisibilityReason() { - String reason = "Layer " + mProto.name; - if (isVisible()) { - reason += " is visible:"; - } else { - reason += " is invisible:"; - if (this.mProto.activeBuffer == null) { - reason += " activeBuffer=null"; - } else if (this.mProto.activeBuffer.height == 0) { - reason += " activeBuffer.height=0"; - } else if (this.mProto.activeBuffer.width == 0) { - reason += " activeBuffer.width=0"; - } - if (!isColorLayer()) { - reason += " type != ColorLayer"; - } - if (isHidden()) { - reason += " flags=" + this.mProto.flags + " (FLAG_HIDDEN set)"; - } - if (this.mProto.color == null || this.mProto.color.a == 0) { - reason += " color.a=0"; - } - if (isVisibleRegionEmpty()) { - reason += " visible region is empty"; - } - } - return reason; - } - } -} \ No newline at end of file diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTraceSubject.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTraceSubject.java deleted file mode 100644 index 4a5129ed2269..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/LayersTraceSubject.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.google.common.truth.Truth.assertAbout; -import static com.google.common.truth.Truth.assertWithMessage; - -import android.graphics.Rect; - -import androidx.annotation.Nullable; - -import com.android.server.wm.flicker.Assertions.Result; -import com.android.server.wm.flicker.LayersTrace.Entry; -import com.android.server.wm.flicker.TransitionRunner.TransitionResult; - -import com.google.common.truth.FailureMetadata; -import com.google.common.truth.Subject; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * Truth subject for {@link LayersTrace} objects. - */ -public class LayersTraceSubject extends Subject { - // Boiler-plate Subject.Factory for LayersTraceSubject - private static final Subject.Factory FACTORY = - new Subject.Factory() { - @Override - public LayersTraceSubject createSubject( - FailureMetadata fm, @Nullable LayersTrace target) { - return new LayersTraceSubject(fm, target); - } - }; - - private AssertionsChecker mChecker = new AssertionsChecker<>(); - - private LayersTraceSubject(FailureMetadata fm, @Nullable LayersTrace subject) { - super(fm, subject); - } - - // User-defined entry point - public static LayersTraceSubject assertThat(@Nullable LayersTrace entry) { - return assertAbout(FACTORY).that(entry); - } - - // User-defined entry point - public static LayersTraceSubject assertThat(@Nullable TransitionResult result) { - LayersTrace entries = LayersTrace.parseFrom(result.getLayersTrace(), - result.getLayersTracePath()); - return assertWithMessage(result.toString()).about(FACTORY).that(entries); - } - - // Static method for getting the subject factory (for use with assertAbout()) - public static Subject.Factory entries() { - return FACTORY; - } - - public void forAllEntries() { - test(); - } - - public void forRange(long startTime, long endTime) { - mChecker.filterByRange(startTime, endTime); - test(); - } - - public LayersTraceSubject then() { - mChecker.checkChangingAssertions(); - return this; - } - - public void inTheBeginning() { - if (getSubject().getEntries().isEmpty()) { - fail("No entries found."); - } - mChecker.checkFirstEntry(); - test(); - } - - public void atTheEnd() { - if (getSubject().getEntries().isEmpty()) { - fail("No entries found."); - } - mChecker.checkLastEntry(); - test(); - } - - private void test() { - List failures = mChecker.test(getSubject().getEntries()); - if (!failures.isEmpty()) { - String failureLogs = failures.stream().map(Result::toString) - .collect(Collectors.joining("\n")); - String tracePath = ""; - if (getSubject().getSource().isPresent()) { - tracePath = "\nLayers Trace can be found in: " - + getSubject().getSource().get().toAbsolutePath() + "\n"; - } - fail(tracePath + failureLogs); - } - } - - public LayersTraceSubject coversRegion(Rect rect) { - mChecker.add(entry -> entry.coversRegion(rect), - "coversRegion(" + rect + ")"); - return this; - } - - public LayersTraceSubject hasVisibleRegion(String layerName, Rect size) { - mChecker.add(entry -> entry.hasVisibleRegion(layerName, size), - "hasVisibleRegion(" + layerName + size + ")"); - return this; - } - - public LayersTraceSubject showsLayer(String layerName) { - mChecker.add(entry -> entry.isVisible(layerName), - "showsLayer(" + layerName + ")"); - return this; - } - - public LayersTraceSubject hidesLayer(String layerName) { - mChecker.add(entry -> entry.isVisible(layerName).negate(), - "hidesLayer(" + layerName + ")"); - return this; - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/TransitionRunner.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/TransitionRunner.java deleted file mode 100644 index 241a1c04bdb8..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/TransitionRunner.java +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.android.server.wm.flicker.monitor.ITransitionMonitor.OUTPUT_DIR; - -import android.util.Log; - -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; -import androidx.test.InstrumentationRegistry; - -import com.android.server.wm.flicker.monitor.ITransitionMonitor; -import com.android.server.wm.flicker.monitor.LayersTraceMonitor; -import com.android.server.wm.flicker.monitor.ScreenRecorder; -import com.android.server.wm.flicker.monitor.WindowAnimationFrameStatsMonitor; -import com.android.server.wm.flicker.monitor.WindowManagerTraceMonitor; - -import com.google.common.io.Files; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -/** - * Builds and runs UI transitions capturing test artifacts. - * - * User can compose a transition from simpler steps, specifying setup and teardown steps. During - * a transition, Layers trace, WindowManager trace, screen recordings and window animation frame - * stats can be captured. - * - *
- * Transition builder options:
- *  {@link TransitionBuilder#run(Runnable)} run transition under test. Monitors will be started
- *  before the transition and stopped after the transition is completed.
- *  {@link TransitionBuilder#repeat(int)} repeat transitions under test multiple times recording
- *  result for each run.
- *  {@link TransitionBuilder#withTag(String)} specify a string identifier used to prefix logs and
- *  artifacts generated.
- *  {@link TransitionBuilder#runBeforeAll(Runnable)} run setup transitions once before all other
- *  transition are run to set up an initial state on device.
- *  {@link TransitionBuilder#runBefore(Runnable)} run setup transitions before each test transition
- *  run.
- *  {@link TransitionBuilder#runAfter(Runnable)} run teardown transitions after each test
- *  transition.
- *  {@link TransitionBuilder#runAfter(Runnable)} run teardown transitions once after all
- *  other transition  are run.
- *  {@link TransitionBuilder#includeJankyRuns()} disables {@link WindowAnimationFrameStatsMonitor}
- *  to monitor janky frames. If janky frames are detected, then the test run is skipped. This
- *  monitor is enabled by default.
- *  {@link TransitionBuilder#skipLayersTrace()} disables {@link LayersTraceMonitor} used to
- *  capture Layers trace during a transition. This monitor is enabled by default.
- *  {@link TransitionBuilder#skipWindowManagerTrace()} disables {@link WindowManagerTraceMonitor}
- *  used to capture WindowManager trace during a transition. This monitor is enabled by
- *  default.
- *  {@link TransitionBuilder#recordAllRuns()} records the screen contents and saves it to a file.
- *  All the runs including setup and teardown transitions are included in the recording. This
- *  monitor is used for debugging purposes.
- *  {@link TransitionBuilder#recordEachRun()} records the screen contents during test transitions
- *  and saves it to a file for each run. This monitor is used for debugging purposes.
- *
- * Example transition to capture WindowManager and Layers trace when opening a test app:
- * {@code
- * TransitionRunner.newBuilder()
- *      .withTag("OpenTestAppFast")
- *      .runBeforeAll(UiAutomationLib::wakeUp)
- *      .runBeforeAll(UiAutomationLib::UnlockDevice)
- *      .runBeforeAll(UiAutomationLib::openTestApp)
- *      .runBefore(UiAutomationLib::closeTestApp)
- *      .run(UiAutomationLib::openTestApp)
- *      .runAfterAll(UiAutomationLib::closeTestApp)
- *      .repeat(5)
- *      .build()
- *      .run();
- * }
- * 
- */ -public class TransitionRunner { - private static final String TAG = "FLICKER"; - private final ScreenRecorder mScreenRecorder; - private final WindowManagerTraceMonitor mWmTraceMonitor; - private final LayersTraceMonitor mLayersTraceMonitor; - private final WindowAnimationFrameStatsMonitor mFrameStatsMonitor; - - private final List mAllRunsMonitors; - private final List mPerRunMonitors; - private final List mBeforeAlls; - private final List mBefores; - private final List mTransitions; - private final List mAfters; - private final List mAfterAlls; - - private final int mIterations; - private final String mTestTag; - - @Nullable - private List mResults = null; - - private TransitionRunner(TransitionBuilder builder) { - mScreenRecorder = builder.mScreenRecorder; - mWmTraceMonitor = builder.mWmTraceMonitor; - mLayersTraceMonitor = builder.mLayersTraceMonitor; - mFrameStatsMonitor = builder.mFrameStatsMonitor; - - mAllRunsMonitors = builder.mAllRunsMonitors; - mPerRunMonitors = builder.mPerRunMonitors; - mBeforeAlls = builder.mBeforeAlls; - mBefores = builder.mBefores; - mTransitions = builder.mTransitions; - mAfters = builder.mAfters; - mAfterAlls = builder.mAfterAlls; - - mIterations = builder.mIterations; - mTestTag = builder.mTestTag; - } - - public static TransitionBuilder newBuilder() { - return newBuilder(OUTPUT_DIR.toString()); - } - - public static TransitionBuilder newBuilder(String outputDir) { - return new TransitionBuilder(outputDir); - } - - /** - * Runs the composed transition and calls monitors at the appropriate stages. If jank monitor - * is enabled, transitions with jank are skipped. - * - * @return itself - */ - public TransitionRunner run() { - mResults = new ArrayList<>(); - mAllRunsMonitors.forEach(ITransitionMonitor::start); - mBeforeAlls.forEach(Runnable::run); - for (int iteration = 0; iteration < mIterations; iteration++) { - mBefores.forEach(Runnable::run); - mPerRunMonitors.forEach(ITransitionMonitor::start); - mTransitions.forEach(Runnable::run); - mPerRunMonitors.forEach(ITransitionMonitor::stop); - mAfters.forEach(Runnable::run); - if (runJankFree() && mFrameStatsMonitor.jankyFramesDetected()) { - String msg = String.format("Skipping iteration %d/%d for test %s due to jank. %s", - iteration, mIterations - 1, mTestTag, mFrameStatsMonitor.toString()); - Log.e(TAG, msg); - continue; - } - mResults.add(saveResult(iteration)); - } - mAfterAlls.forEach(Runnable::run); - mAllRunsMonitors.forEach(monitor -> { - monitor.stop(); - monitor.save(mTestTag); - }); - return this; - } - - /** - * Returns a list of transition results. - * - * @return list of transition results. - */ - public List getResults() { - if (mResults == null) { - throw new IllegalStateException("Results do not exist!"); - } - return mResults; - } - - /** - * Deletes all transition results that are not marked for saving. - * - * @return list of transition results. - */ - public void deleteResults() { - if (mResults == null) { - return; - } - mResults.stream() - .filter(TransitionResult::canDelete) - .forEach(TransitionResult::delete); - mResults = null; - } - - /** - * Saves monitor results to file. - * - * @return object containing paths to test artifacts - */ - private TransitionResult saveResult(int iteration) { - Path windowTrace = null; - Path layerTrace = null; - Path screenCaptureVideo = null; - - if (mPerRunMonitors.contains(mWmTraceMonitor)) { - windowTrace = mWmTraceMonitor.save(mTestTag, iteration); - } - if (mPerRunMonitors.contains(mLayersTraceMonitor)) { - layerTrace = mLayersTraceMonitor.save(mTestTag, iteration); - } - if (mPerRunMonitors.contains(mScreenRecorder)) { - screenCaptureVideo = mScreenRecorder.save(mTestTag, iteration); - } - return new TransitionResult(layerTrace, windowTrace, screenCaptureVideo); - } - - private boolean runJankFree() { - return mPerRunMonitors.contains(mFrameStatsMonitor); - } - - public String getTestTag() { - return mTestTag; - } - - /** - * Stores paths to all test artifacts. - */ - @VisibleForTesting - public static class TransitionResult { - @Nullable - public final Path layersTrace; - @Nullable - public final Path windowManagerTrace; - @Nullable - public final Path screenCaptureVideo; - private boolean flaggedForSaving; - - public TransitionResult(@Nullable Path layersTrace, @Nullable Path windowManagerTrace, - @Nullable Path screenCaptureVideo) { - this.layersTrace = layersTrace; - this.windowManagerTrace = windowManagerTrace; - this.screenCaptureVideo = screenCaptureVideo; - } - - public void flagForSaving() { - flaggedForSaving = true; - } - - public boolean canDelete() { - return !flaggedForSaving; - } - - public boolean layersTraceExists() { - return layersTrace != null && layersTrace.toFile().exists(); - } - - public byte[] getLayersTrace() { - try { - return Files.toByteArray(this.layersTrace.toFile()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public Path getLayersTracePath() { - return layersTrace; - } - - public boolean windowManagerTraceExists() { - return windowManagerTrace != null && windowManagerTrace.toFile().exists(); - } - - public byte[] getWindowManagerTrace() { - try { - return Files.toByteArray(this.windowManagerTrace.toFile()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public Path getWindowManagerTracePath() { - return windowManagerTrace; - } - - public boolean screenCaptureVideoExists() { - return screenCaptureVideo != null && screenCaptureVideo.toFile().exists(); - } - - public Path screenCaptureVideoPath() { - return screenCaptureVideo; - } - - public void delete() { - if (layersTraceExists()) layersTrace.toFile().delete(); - if (windowManagerTraceExists()) windowManagerTrace.toFile().delete(); - if (screenCaptureVideoExists()) screenCaptureVideo.toFile().delete(); - } - } - - /** - * Builds a {@link TransitionRunner} instance. - */ - public static class TransitionBuilder { - private ScreenRecorder mScreenRecorder; - private WindowManagerTraceMonitor mWmTraceMonitor; - private LayersTraceMonitor mLayersTraceMonitor; - private WindowAnimationFrameStatsMonitor mFrameStatsMonitor; - - private List mAllRunsMonitors = new LinkedList<>(); - private List mPerRunMonitors = new LinkedList<>(); - private List mBeforeAlls = new LinkedList<>(); - private List mBefores = new LinkedList<>(); - private List mTransitions = new LinkedList<>(); - private List mAfters = new LinkedList<>(); - private List mAfterAlls = new LinkedList<>(); - - private boolean mRunJankFree = true; - private boolean mCaptureWindowManagerTrace = true; - private boolean mCaptureLayersTrace = true; - private boolean mRecordEachRun = false; - private int mIterations = 1; - private String mTestTag = ""; - - private boolean mRecordAllRuns = false; - - public TransitionBuilder(String outputDir) { - mScreenRecorder = new ScreenRecorder(); - mWmTraceMonitor = new WindowManagerTraceMonitor(outputDir); - mLayersTraceMonitor = new LayersTraceMonitor(outputDir); - mFrameStatsMonitor = new - WindowAnimationFrameStatsMonitor(InstrumentationRegistry.getInstrumentation()); - } - - public TransitionRunner build() { - if (mCaptureWindowManagerTrace) { - mPerRunMonitors.add(mWmTraceMonitor); - } - - if (mCaptureLayersTrace) { - mPerRunMonitors.add(mLayersTraceMonitor); - } - - if (mRunJankFree) { - mPerRunMonitors.add(mFrameStatsMonitor); - } - - if (mRecordAllRuns) { - mAllRunsMonitors.add(mScreenRecorder); - } - - if (mRecordEachRun) { - mPerRunMonitors.add(mScreenRecorder); - } - - return new TransitionRunner(this); - } - - public TransitionBuilder runBeforeAll(Runnable runnable) { - mBeforeAlls.add(runnable); - return this; - } - - public TransitionBuilder runBefore(Runnable runnable) { - mBefores.add(runnable); - return this; - } - - public TransitionBuilder run(Runnable runnable) { - mTransitions.add(runnable); - return this; - } - - public TransitionBuilder runAfter(Runnable runnable) { - mAfters.add(runnable); - return this; - } - - public TransitionBuilder runAfterAll(Runnable runnable) { - mAfterAlls.add(runnable); - return this; - } - - public TransitionBuilder repeat(int iterations) { - mIterations = iterations; - return this; - } - - public TransitionBuilder skipWindowManagerTrace() { - mCaptureWindowManagerTrace = false; - return this; - } - - public TransitionBuilder skipLayersTrace() { - mCaptureLayersTrace = false; - return this; - } - - public TransitionBuilder includeJankyRuns() { - mRunJankFree = false; - return this; - } - - public TransitionBuilder recordEachRun() { - if (mRecordAllRuns) { - throw new IllegalArgumentException("Invalid option with recordAllRuns"); - } - mRecordEachRun = true; - return this; - } - - public TransitionBuilder recordAllRuns() { - if (mRecordEachRun) { - throw new IllegalArgumentException("Invalid option with recordEachRun"); - } - mRecordAllRuns = true; - return this; - } - - public TransitionBuilder withTag(String testTag) { - if (testTag.contains(" ")) { - throw new IllegalArgumentException("The test tag can not contain spaces since it " - + "is a part of the file name"); - } - mTestTag = testTag; - return this; - } - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowManagerTrace.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowManagerTrace.java deleted file mode 100644 index 412e72d82e55..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowManagerTrace.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import androidx.annotation.Nullable; - -import com.android.server.wm.flicker.Assertions.Result; -import com.android.server.wm.nano.AppWindowTokenProto; -import com.android.server.wm.nano.StackProto; -import com.android.server.wm.nano.TaskProto; -import com.android.server.wm.nano.WindowManagerTraceFileProto; -import com.android.server.wm.nano.WindowManagerTraceProto; -import com.android.server.wm.nano.WindowStateProto; -import com.android.server.wm.nano.WindowTokenProto; - -import com.google.protobuf.nano.InvalidProtocolBufferNanoException; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * Contains a collection of parsed WindowManager trace entries and assertions to apply over - * a single entry. - * - * Each entry is parsed into a list of {@link WindowManagerTrace.Entry} objects. - */ -public class WindowManagerTrace { - private static final int DEFAULT_DISPLAY = 0; - private final List mEntries; - @Nullable - final private Path mSource; - - private WindowManagerTrace(List entries, Path source) { - this.mEntries = entries; - this.mSource = source; - } - - /** - * Parses {@code WindowManagerTraceFileProto} from {@code data} and uses the proto to - * generates a list of trace entries. - * - * @param data binary proto data - * @param source Path to source of data for additional debug information - */ - public static WindowManagerTrace parseFrom(byte[] data, Path source) { - List entries = new ArrayList<>(); - - WindowManagerTraceFileProto fileProto; - try { - fileProto = WindowManagerTraceFileProto.parseFrom(data); - } catch (InvalidProtocolBufferNanoException e) { - throw new RuntimeException(e); - } - for (WindowManagerTraceProto entryProto : fileProto.entry) { - entries.add(new Entry(entryProto)); - } - return new WindowManagerTrace(entries, source); - } - - public static WindowManagerTrace parseFrom(byte[] data) { - return parseFrom(data, null); - } - - public List getEntries() { - return mEntries; - } - - public Entry getEntry(long timestamp) { - Optional entry = mEntries.stream() - .filter(e -> e.getTimestamp() == timestamp) - .findFirst(); - if (!entry.isPresent()) { - throw new RuntimeException("Entry does not exist for timestamp " + timestamp); - } - return entry.get(); - } - - public Optional getSource() { - return Optional.ofNullable(mSource); - } - - /** - * Represents a single WindowManager trace entry. - */ - public static class Entry implements ITraceEntry { - private final WindowManagerTraceProto mProto; - - public Entry(WindowManagerTraceProto proto) { - mProto = proto; - } - - private static Result isWindowVisible(String windowTitle, - WindowTokenProto[] windowTokenProtos) { - boolean titleFound = false; - for (WindowTokenProto windowToken : windowTokenProtos) { - for (WindowStateProto windowState : windowToken.windows) { - if (windowState.identifier.title.contains(windowTitle)) { - titleFound = true; - if (isVisible(windowState)) { - return new Result(true /* success */, - windowState.identifier.title + " is visible"); - } - } - } - } - - String reason; - if (!titleFound) { - reason = windowTitle + " cannot be found"; - } else { - reason = windowTitle + " is invisible"; - } - return new Result(false /* success */, reason); - } - - private static boolean isVisible(WindowStateProto windowState) { - return windowState.windowContainer.visible; - } - - @Override - public long getTimestamp() { - return mProto.elapsedRealtimeNanos; - } - - /** - * Returns window title of the top most visible app window. - */ - private String getTopVisibleAppWindow() { - StackProto[] stacks = mProto.windowManagerService.rootWindowContainer - .displays[DEFAULT_DISPLAY].stacks; - for (StackProto stack : stacks) { - for (TaskProto task : stack.tasks) { - for (AppWindowTokenProto token : task.appWindowTokens) { - for (WindowStateProto windowState : token.windowToken.windows) { - if (windowState.windowContainer.visible) { - return task.appWindowTokens[0].name; - } - } - } - } - } - - return ""; - } - - /** - * Checks if aboveAppWindow with {@code windowTitle} is visible. - */ - public Result isAboveAppWindowVisible(String windowTitle) { - WindowTokenProto[] windowTokenProtos = mProto.windowManagerService - .rootWindowContainer - .displays[DEFAULT_DISPLAY].aboveAppWindows; - Result result = isWindowVisible(windowTitle, windowTokenProtos); - return new Result(result.success, getTimestamp(), "showsAboveAppWindow", result.reason); - } - - /** - * Checks if belowAppWindow with {@code windowTitle} is visible. - */ - public Result isBelowAppWindowVisible(String windowTitle) { - WindowTokenProto[] windowTokenProtos = mProto.windowManagerService - .rootWindowContainer - .displays[DEFAULT_DISPLAY].belowAppWindows; - Result result = isWindowVisible(windowTitle, windowTokenProtos); - return new Result(result.success, getTimestamp(), "isBelowAppWindowVisible", - result.reason); - } - - /** - * Checks if imeWindow with {@code windowTitle} is visible. - */ - public Result isImeWindowVisible(String windowTitle) { - WindowTokenProto[] windowTokenProtos = mProto.windowManagerService - .rootWindowContainer - .displays[DEFAULT_DISPLAY].imeWindows; - Result result = isWindowVisible(windowTitle, windowTokenProtos); - return new Result(result.success, getTimestamp(), "isImeWindowVisible", - result.reason); - } - - /** - * Checks if app window with {@code windowTitle} is on top. - */ - public Result isVisibleAppWindowOnTop(String windowTitle) { - String topAppWindow = getTopVisibleAppWindow(); - boolean success = topAppWindow.contains(windowTitle); - String reason = "wanted=" + windowTitle + " found=" + topAppWindow; - return new Result(success, getTimestamp(), "isAppWindowOnTop", reason); - } - - /** - * Checks if app window with {@code windowTitle} is visible. - */ - public Result isAppWindowVisible(String windowTitle) { - final String assertionName = "isAppWindowVisible"; - boolean titleFound = false; - StackProto[] stacks = mProto.windowManagerService.rootWindowContainer - .displays[DEFAULT_DISPLAY].stacks; - for (StackProto stack : stacks) { - for (TaskProto task : stack.tasks) { - for (AppWindowTokenProto token : task.appWindowTokens) { - if (token.name.contains(windowTitle)) { - titleFound = true; - for (WindowStateProto windowState : token.windowToken.windows) { - if (windowState.windowContainer.visible) { - return new Result(true /* success */, getTimestamp(), - assertionName, "Window " + token.name + - "is visible"); - } - } - } - } - } - } - String reason; - if (!titleFound) { - reason = "Window " + windowTitle + " cannot be found"; - } else { - reason = "Window " + windowTitle + " is invisible"; - } - return new Result(false /* success */, getTimestamp(), assertionName, reason); - } - } -} \ No newline at end of file diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowUtils.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowUtils.java deleted file mode 100644 index 3d25fbed5135..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WindowUtils.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Point; -import android.graphics.Rect; -import android.view.Surface; -import android.view.WindowManager; - -import androidx.test.InstrumentationRegistry; - -/** - * Helper functions to retrieve system window sizes and positions. - */ -public class WindowUtils { - - public static Rect getDisplayBounds() { - Point display = new Point(); - WindowManager wm = - (WindowManager) InstrumentationRegistry.getContext().getSystemService( - Context.WINDOW_SERVICE); - wm.getDefaultDisplay().getRealSize(display); - return new Rect(0, 0, display.x, display.y); - } - - private static int getCurrentRotation() { - WindowManager wm = - (WindowManager) InstrumentationRegistry.getContext().getSystemService( - Context.WINDOW_SERVICE); - return wm.getDefaultDisplay().getRotation(); - } - - public static Rect getDisplayBounds(int requestedRotation) { - Rect displayBounds = getDisplayBounds(); - int currentDisplayRotation = getCurrentRotation(); - - boolean displayIsRotated = (currentDisplayRotation == Surface.ROTATION_90 || - currentDisplayRotation == Surface.ROTATION_270); - - boolean requestedDisplayIsRotated = requestedRotation == Surface.ROTATION_90 || - requestedRotation == Surface.ROTATION_270; - - // if the current orientation changes with the requested rotation, - // flip height and width of display bounds. - if (displayIsRotated != requestedDisplayIsRotated) { - return new Rect(0, 0, displayBounds.height(), displayBounds.width()); - } - - return new Rect(0, 0, displayBounds.width(), displayBounds.height()); - } - - - public static Rect getAppPosition(int requestedRotation) { - Rect displayBounds = getDisplayBounds(); - int currentDisplayRotation = getCurrentRotation(); - - boolean displayIsRotated = currentDisplayRotation == Surface.ROTATION_90 || - currentDisplayRotation == Surface.ROTATION_270; - - boolean requestedAppIsRotated = requestedRotation == Surface.ROTATION_90 || - requestedRotation == Surface.ROTATION_270; - - // display size will change if the display is reflected. Flip height and width of app if the - // requested rotation is different from the current rotation. - if (displayIsRotated != requestedAppIsRotated) { - return new Rect(0, 0, displayBounds.height(), displayBounds.width()); - } - - return new Rect(0, 0, displayBounds.width(), displayBounds.height()); - } - - public static Rect getStatusBarPosition(int requestedRotation) { - Resources resources = InstrumentationRegistry.getContext().getResources(); - String resourceName; - Rect displayBounds = getDisplayBounds(); - int width; - if (requestedRotation == Surface.ROTATION_0 || requestedRotation == Surface.ROTATION_180) { - resourceName = "status_bar_height_portrait"; - width = Math.min(displayBounds.width(), displayBounds.height()); - } else { - resourceName = "status_bar_height_landscape"; - width = Math.max(displayBounds.width(), displayBounds.height()); - } - - int resourceId = resources.getIdentifier(resourceName, "dimen", "android"); - int height = resources.getDimensionPixelSize(resourceId); - - return new Rect(0, 0, width, height); - } - - public static Rect getNavigationBarPosition(int requestedRotation) { - Resources resources = InstrumentationRegistry.getContext().getResources(); - Rect displayBounds = getDisplayBounds(); - int displayWidth = Math.min(displayBounds.width(), displayBounds.height()); - int displayHeight = Math.max(displayBounds.width(), displayBounds.height()); - int resourceId; - if (requestedRotation == Surface.ROTATION_0 || requestedRotation == Surface.ROTATION_180) { - resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); - int height = resources.getDimensionPixelSize(resourceId); - return new Rect(0, displayHeight - height, displayWidth, displayHeight); - } else { - resourceId = resources.getIdentifier("navigation_bar_width", "dimen", "android"); - int width = resources.getDimensionPixelSize(resourceId); - // swap display dimensions in landscape or seascape mode - int temp = displayHeight; - displayHeight = displayWidth; - displayWidth = temp; - if (requestedRotation == Surface.ROTATION_90) { - return new Rect(0, 0, width, displayHeight); - } else { - return new Rect(displayWidth - width, 0, displayWidth, displayHeight); - } - } - } - - public static int getNavigationBarHeight() { - Resources resources = InstrumentationRegistry.getContext().getResources(); - int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); - return resources.getDimensionPixelSize(resourceId); - } - - public static int getDockedStackDividerInset() { - Resources resources = InstrumentationRegistry.getContext().getResources(); - int resourceId = resources.getIdentifier("docked_stack_divider_insets", "dimen", - "android"); - return resources.getDimensionPixelSize(resourceId); - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WmTraceSubject.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WmTraceSubject.java deleted file mode 100644 index 064cc2702f39..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/WmTraceSubject.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.google.common.truth.Truth.assertAbout; -import static com.google.common.truth.Truth.assertWithMessage; - -import androidx.annotation.Nullable; - -import com.android.server.wm.flicker.Assertions.Result; -import com.android.server.wm.flicker.TransitionRunner.TransitionResult; - -import com.google.common.truth.FailureMetadata; -import com.google.common.truth.Subject; - -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * Truth subject for {@link WindowManagerTrace} objects. - */ -public class WmTraceSubject extends Subject { - // Boiler-plate Subject.Factory for WmTraceSubject - private static final Subject.Factory FACTORY = - new Subject.Factory() { - @Override - public WmTraceSubject createSubject( - FailureMetadata fm, @Nullable WindowManagerTrace target) { - return new WmTraceSubject(fm, target); - } - }; - - private AssertionsChecker mChecker = new AssertionsChecker<>(); - - private WmTraceSubject(FailureMetadata fm, @Nullable WindowManagerTrace subject) { - super(fm, subject); - } - - // User-defined entry point - public static WmTraceSubject assertThat(@Nullable WindowManagerTrace entry) { - return assertAbout(FACTORY).that(entry); - } - - // User-defined entry point - public static WmTraceSubject assertThat(@Nullable TransitionResult result) { - WindowManagerTrace entries = WindowManagerTrace.parseFrom(result.getWindowManagerTrace(), - result.getWindowManagerTracePath()); - return assertWithMessage(result.toString()).about(FACTORY).that(entries); - } - - // Static method for getting the subject factory (for use with assertAbout()) - public static Subject.Factory entries() { - return FACTORY; - } - - public void forAllEntries() { - test(); - } - - public void forRange(long startTime, long endTime) { - mChecker.filterByRange(startTime, endTime); - test(); - } - - public WmTraceSubject then() { - mChecker.checkChangingAssertions(); - return this; - } - - public void inTheBeginning() { - if (getSubject().getEntries().isEmpty()) { - fail("No entries found."); - } - mChecker.checkFirstEntry(); - test(); - } - - public void atTheEnd() { - if (getSubject().getEntries().isEmpty()) { - fail("No entries found."); - } - mChecker.checkLastEntry(); - test(); - } - - private void test() { - List failures = mChecker.test(getSubject().getEntries()); - if (!failures.isEmpty()) { - Optional failureTracePath = getSubject().getSource(); - String failureLogs = failures.stream().map(Result::toString) - .collect(Collectors.joining("\n")); - String tracePath = ""; - if (failureTracePath.isPresent()) { - tracePath = "\nWindowManager Trace can be found in: " - + failureTracePath.get().toAbsolutePath() + "\n"; - } - fail(tracePath + failureLogs); - } - } - - public WmTraceSubject showsAboveAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isAboveAppWindowVisible(partialWindowTitle), - "showsAboveAppWindow(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject hidesAboveAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isAboveAppWindowVisible(partialWindowTitle).negate(), - "hidesAboveAppWindow" + "(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject showsBelowAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isBelowAppWindowVisible(partialWindowTitle), - "showsBelowAppWindow(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject hidesBelowAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isBelowAppWindowVisible(partialWindowTitle).negate(), - "hidesBelowAppWindow" + "(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject showsImeWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isImeWindowVisible(partialWindowTitle), - "showsBelowAppWindow(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject hidesImeWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isImeWindowVisible(partialWindowTitle).negate(), - "hidesImeWindow" + "(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject showsAppWindowOnTop(String partialWindowTitle) { - mChecker.add( - entry -> { - Result result = entry.isAppWindowVisible(partialWindowTitle); - if (result.passed()) { - result = entry.isVisibleAppWindowOnTop(partialWindowTitle); - } - return result; - }, - "showsAppWindowOnTop(" + partialWindowTitle + ")" - ); - return this; - } - - public WmTraceSubject hidesAppWindowOnTop(String partialWindowTitle) { - mChecker.add( - entry -> { - Result result = entry.isAppWindowVisible(partialWindowTitle).negate(); - if (result.failed()) { - result = entry.isVisibleAppWindowOnTop(partialWindowTitle).negate(); - } - return result; - }, - "hidesAppWindowOnTop(" + partialWindowTitle + ")" - ); - return this; - } - - public WmTraceSubject showsAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isAppWindowVisible(partialWindowTitle), - "showsAppWindow(" + partialWindowTitle + ")"); - return this; - } - - public WmTraceSubject hidesAppWindow(String partialWindowTitle) { - mChecker.add(entry -> entry.isAppWindowVisible(partialWindowTitle).negate(), - "hidesAppWindow(" + partialWindowTitle + ")"); - return this; - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/helpers/AutomationUtils.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/helpers/AutomationUtils.java deleted file mode 100644 index 6821ff02e371..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/helpers/AutomationUtils.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.helpers; - -import static android.os.SystemClock.sleep; -import static android.system.helpers.OverviewHelper.isRecentsInLauncher; -import static android.view.Surface.ROTATION_0; - -import static com.android.compatibility.common.util.SystemUtil.runShellCommand; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.graphics.Point; -import android.graphics.Rect; -import android.os.RemoteException; -import android.support.test.launcherhelper.LauncherStrategyFactory; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.BySelector; -import android.support.test.uiautomator.Configurator; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.util.Log; -import android.util.Rational; -import android.view.View; -import android.view.ViewConfiguration; - -import androidx.test.InstrumentationRegistry; - -import com.android.server.wm.flicker.WindowUtils; - -/** - * Collection of UI Automation helper functions. - */ -public class AutomationUtils { - private static final String SYSTEMUI_PACKAGE = "com.android.systemui"; - private static final long FIND_TIMEOUT = 10000; - private static final long LONG_PRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout() * 2L; - private static final String TAG = "FLICKER"; - - public static void wakeUpAndGoToHomeScreen() { - UiDevice device = UiDevice.getInstance(InstrumentationRegistry - .getInstrumentation()); - try { - device.wakeUp(); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - device.pressHome(); - } - - /** - * Sets {@link android.app.UiAutomation#waitForIdle(long, long)} global timeout to 0 causing - * the {@link android.app.UiAutomation#waitForIdle(long, long)} function to timeout instantly. - * This removes some delays when using the UIAutomator library required to create fast UI - * transitions. - */ - public static void setFastWait() { - Configurator.getInstance().setWaitForIdleTimeout(0); - } - - /** - * Reverts {@link android.app.UiAutomation#waitForIdle(long, long)} to default behavior. - */ - public static void setDefaultWait() { - Configurator.getInstance().setWaitForIdleTimeout(10000); - } - - public static boolean isQuickstepEnabled(UiDevice device) { - return device.findObject(By.res(SYSTEMUI_PACKAGE, "recent_apps")) == null; - } - - public static void openQuickstep(UiDevice device) { - if (isQuickstepEnabled(device)) { - int height = device.getDisplayHeight(); - UiObject2 navBar = device.findObject(By.res(SYSTEMUI_PACKAGE, "navigation_bar_frame")); - - Rect navBarVisibleBounds; - - // TODO(vishnun) investigate why this object cannot be found. - if (navBar != null) { - navBarVisibleBounds = navBar.getVisibleBounds(); - } else { - Log.e(TAG, "Could not find nav bar, infer location"); - navBarVisibleBounds = WindowUtils.getNavigationBarPosition(ROTATION_0); - } - - // Swipe from nav bar to 2/3rd down the screen. - device.swipe( - navBarVisibleBounds.centerX(), navBarVisibleBounds.centerY(), - navBarVisibleBounds.centerX(), height * 2 / 3, - (navBarVisibleBounds.centerY() - height * 2 / 3) / 100); // 100 px/step - } else { - try { - device.pressRecentApps(); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - BySelector RECENTS = By.res(SYSTEMUI_PACKAGE, "recents_view"); - - // use a long timeout to wait until recents populated - if (device.wait( - Until.findObject(isRecentsInLauncher() - ? getLauncherOverviewSelector(device) : RECENTS), - 10000) == null) { - fail("Recents didn't appear"); - } - device.waitForIdle(); - } - - public static void clearRecents(UiDevice device) { - if (isQuickstepEnabled(device)) { - openQuickstep(device); - - for (int i = 0; i < 5; i++) { - device.swipe(device.getDisplayWidth() / 2, - device.getDisplayHeight() / 2, device.getDisplayWidth(), - device.getDisplayHeight() / 2, - 5); - - BySelector clearAllSelector = By.res("com.google.android.apps.nexuslauncher", - "clear_all_button"); - UiObject2 clearAllButton = device.wait(Until.findObject(clearAllSelector), 100); - if (clearAllButton != null) { - clearAllButton.click(); - return; - } - } - } - } - - private static BySelector getLauncherOverviewSelector(UiDevice device) { - return By.res(device.getLauncherPackageName(), "overview_panel"); - } - - private static void longPressRecents(UiDevice device) { - BySelector recentsSelector = By.res(SYSTEMUI_PACKAGE, "recent_apps"); - UiObject2 recentsButton = device.wait(Until.findObject(recentsSelector), FIND_TIMEOUT); - assertNotNull("Unable to find recents button", recentsButton); - recentsButton.click(LONG_PRESS_TIMEOUT); - } - - public static void launchSplitScreen(UiDevice device) { - String mLauncherPackage = LauncherStrategyFactory.getInstance(device) - .getLauncherStrategy().getSupportedLauncherPackage(); - - if (isQuickstepEnabled(device)) { - // Quickstep enabled - openQuickstep(device); - - BySelector overviewIconSelector = By.res(mLauncherPackage, "icon") - .clazz(View.class); - UiObject2 overviewIcon = device.wait(Until.findObject(overviewIconSelector), - FIND_TIMEOUT); - assertNotNull("Unable to find app icon in Overview", overviewIcon); - overviewIcon.click(); - - BySelector splitscreenButtonSelector = By.text("Split screen"); - UiObject2 splitscreenButton = device.wait(Until.findObject(splitscreenButtonSelector), - FIND_TIMEOUT); - assertNotNull("Unable to find Split screen button in Overview", splitscreenButton); - splitscreenButton.click(); - } else { - // Classic long press recents - longPressRecents(device); - } - // Wait for animation to complete. - sleep(2000); - } - - public static void exitSplitScreen(UiDevice device) { - if (isQuickstepEnabled(device)) { - // Quickstep enabled - BySelector dividerSelector = By.res(SYSTEMUI_PACKAGE, "docked_divider_handle"); - UiObject2 divider = device.wait(Until.findObject(dividerSelector), FIND_TIMEOUT); - assertNotNull("Unable to find Split screen divider", divider); - - // Drag the split screen divider to the top of the screen - divider.drag(new Point(device.getDisplayWidth() / 2, 0), 400); - } else { - // Classic long press recents - longPressRecents(device); - } - // Wait for animation to complete. - sleep(2000); - } - - public static void resizeSplitScreen(UiDevice device, Rational windowHeightRatio) { - BySelector dividerSelector = By.res(SYSTEMUI_PACKAGE, "docked_divider_handle"); - UiObject2 divider = device.wait(Until.findObject(dividerSelector), FIND_TIMEOUT); - assertNotNull("Unable to find Split screen divider", divider); - int destHeight = - (int) (WindowUtils.getDisplayBounds().height() * windowHeightRatio.floatValue()); - // Drag the split screen divider to so that the ratio of top window height and bottom - // window height is windowHeightRatio - device.drag(divider.getVisibleBounds().centerX(), divider.getVisibleBounds().centerY(), - device.getDisplayWidth() / 2, destHeight, 10); - //divider.drag(new Point(device.getDisplayWidth() / 2, destHeight), 400) - divider = device.wait(Until.findObject(dividerSelector), FIND_TIMEOUT); - - // Wait for animation to complete. - sleep(2000); - } - - public static void closePipWindow(UiDevice device) { - UiObject2 pipWindow = device.findObject( - By.res(SYSTEMUI_PACKAGE, "background")); - pipWindow.click(); - UiObject2 exitPipObject = device.findObject( - By.res(SYSTEMUI_PACKAGE, "dismiss")); - exitPipObject.click(); - // Wait for animation to complete. - sleep(2000); - } - - public static void expandPipWindow(UiDevice device) { - UiObject2 pipWindow = device.findObject( - By.res(SYSTEMUI_PACKAGE, "background")); - pipWindow.click(); - pipWindow.click(); - } - - public static void stopPackage(Context context, String packageName) { - runShellCommand("am force-stop " + packageName); - int packageUid; - try { - packageUid = context.getPackageManager().getPackageUid(packageName, /* flags= */0); - } catch (PackageManager.NameNotFoundException e) { - return; - } - while (targetPackageIsRunning(packageUid)) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - //ignore - } - } - } - - private static boolean targetPackageIsRunning(int uid) { - final String result = runShellCommand( - String.format("cmd activity get-uid-state %d", uid)); - return !result.contains("(NONEXISTENT)"); - } -} \ No newline at end of file diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ITransitionMonitor.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ITransitionMonitor.java deleted file mode 100644 index 67e0ecc1cde7..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ITransitionMonitor.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import android.os.Environment; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * Collects test artifacts during a UI transition. - */ -public interface ITransitionMonitor { - Path OUTPUT_DIR = Paths.get(Environment.getExternalStorageDirectory().toString(), "flicker"); - - /** - * Starts monitor. - */ - void start(); - - /** - * Stops monitor. - */ - void stop(); - - /** - * Saves any monitor artifacts to file adding {@code testTag} and {@code iteration} - * to the file name. - * - * @param testTag suffix added to artifact name - * @param iteration suffix added to artifact name - * - * @return Path to saved artifact - */ - default Path save(String testTag, int iteration) { - return save(testTag + "_" + iteration); - } - - /** - * Saves any monitor artifacts to file adding {@code testTag} to the file name. - * - * @param testTag suffix added to artifact name - * - * @return Path to saved artifact - */ - default Path save(String testTag) { - throw new UnsupportedOperationException("Save not implemented for this monitor"); - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/LayersTraceMonitor.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/LayersTraceMonitor.java deleted file mode 100644 index da75b3e86d6b..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/LayersTraceMonitor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import android.os.RemoteException; -import android.view.IWindowManager; -import android.view.WindowManagerGlobal; - -/** - * Captures Layers trace from SurfaceFlinger. - */ -public class LayersTraceMonitor extends TraceMonitor { - private IWindowManager mWm = WindowManagerGlobal.getWindowManagerService(); - - public LayersTraceMonitor() { - this(OUTPUT_DIR.toString()); - } - - public LayersTraceMonitor(String outputDir) { - super(outputDir, "layers_trace.pb"); - } - - @Override - public void start() { - setEnabled(true); - } - - @Override - public void stop() { - setEnabled(false); - } - - @Override - public boolean isEnabled() throws RemoteException { - try { - return mWm.isLayerTracing(); - } catch (RemoteException e) { - e.printStackTrace(); - } - return false; - } - - private void setEnabled(boolean isEnabled) { - try { - mWm.setLayerTracing(isEnabled); - } catch (RemoteException e) { - e.printStackTrace(); - } - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ScreenRecorder.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ScreenRecorder.java deleted file mode 100644 index dce1c2739b15..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/ScreenRecorder.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static com.android.compatibility.common.util.SystemUtil.runShellCommand; - -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; - -import android.util.Log; - -import androidx.annotation.VisibleForTesting; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -/** - * Captures screen contents and saves it as a mp4 video file. - */ -public class ScreenRecorder implements ITransitionMonitor { - @VisibleForTesting - public static final Path DEFAULT_OUTPUT_PATH = OUTPUT_DIR.resolve("transition.mp4"); - private static final String TAG = "FLICKER"; - private Thread recorderThread; - - @VisibleForTesting - public static Path getPath(String testTag) { - return OUTPUT_DIR.resolve(testTag + ".mp4"); - } - - @Override - public void start() { - OUTPUT_DIR.toFile().mkdirs(); - String command = "screenrecord " + DEFAULT_OUTPUT_PATH; - recorderThread = new Thread(() -> { - try { - Runtime.getRuntime().exec(command); - } catch (IOException e) { - Log.e(TAG, "Error executing " + command, e); - } - }); - recorderThread.start(); - } - - @Override - public void stop() { - runShellCommand("killall -s 2 screenrecord"); - try { - recorderThread.join(); - } catch (InterruptedException e) { - // ignore - } - } - - @Override - public Path save(String testTag) { - try { - Path targetPath = Files.move(DEFAULT_OUTPUT_PATH, getPath(testTag), - REPLACE_EXISTING); - Log.i(TAG, "Video saved to " + targetPath.toString()); - return targetPath; - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/TraceMonitor.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/TraceMonitor.java deleted file mode 100644 index 1ba36bba92ef..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/TraceMonitor.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static com.android.compatibility.common.util.SystemUtil.runShellCommand; - -import android.os.RemoteException; - -import androidx.annotation.VisibleForTesting; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Locale; - -/** - * Base class for monitors containing common logic to read the trace - * as a byte array and save the trace to another location. - */ -public abstract class TraceMonitor implements ITransitionMonitor { - public static final String TAG = "FLICKER"; - private static final String TRACE_DIR = "/data/misc/wmtrace/"; - - private Path mOutputDir; - public String mTraceFileName; - - public abstract boolean isEnabled() throws RemoteException; - - public TraceMonitor(String outputDir, String traceFileName) { - mOutputDir = Paths.get(outputDir); - mTraceFileName = traceFileName; - } - - /** - * Saves trace file to the external storage directory suffixing the name with the testtag - * and iteration. - * - * Moves the trace file from the default location via a shell command since the test app - * does not have security privileges to access /data/misc/wmtrace. - * - * @param testTag suffix added to trace name used to identify trace - * - * @return Path to saved trace file - */ - @Override - public Path save(String testTag) { - OUTPUT_DIR.toFile().mkdirs(); - Path traceFileCopy = getOutputTraceFilePath(testTag); - - // Read the input stream fully. - String copyCommand = String.format(Locale.getDefault(), "mv %s%s %s", TRACE_DIR, - mTraceFileName, traceFileCopy.toString()); - runShellCommand(copyCommand); - return traceFileCopy; - } - - @VisibleForTesting - public Path getOutputTraceFilePath(String testTag) { - return mOutputDir.resolve(mTraceFileName + "_" + testTag); - } -} diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitor.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitor.java deleted file mode 100644 index 3f86f0d001d7..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitor.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static android.view.FrameStats.UNDEFINED_TIME_NANO; - -import android.app.Instrumentation; -import android.util.Log; -import android.view.FrameStats; - -/** - * Monitors {@link android.view.WindowAnimationFrameStats} to detect janky frames. - * - * Adapted from {@link androidx.test.jank.internal.WindowAnimationFrameStatsMonitorImpl} - * using the same threshold to determine jank. - */ -public class WindowAnimationFrameStatsMonitor implements ITransitionMonitor { - - private static final String TAG = "FLICKER"; - // Maximum normalized error in frame duration before the frame is considered janky - private static final double MAX_ERROR = 0.5f; - // Maximum normalized frame duration before the frame is considered a pause - private static final double PAUSE_THRESHOLD = 15.0f; - private Instrumentation mInstrumentation; - private FrameStats stats; - private int numJankyFrames; - private long mLongestFrameNano = 0L; - - - /** - * Constructs a WindowAnimationFrameStatsMonitor instance. - */ - public WindowAnimationFrameStatsMonitor(Instrumentation instrumentation) { - mInstrumentation = instrumentation; - } - - private void analyze() { - int frameCount = stats.getFrameCount(); - long refreshPeriodNano = stats.getRefreshPeriodNano(); - - // Skip first frame - for (int i = 2; i < frameCount; i++) { - // Handle frames that have not been presented. - if (stats.getFramePresentedTimeNano(i) == UNDEFINED_TIME_NANO) { - // The animation must not have completed. Warn and break out of the loop. - Log.w(TAG, "Skipping fenced frame."); - break; - } - long frameDurationNano = stats.getFramePresentedTimeNano(i) - - stats.getFramePresentedTimeNano(i - 1); - double normalized = (double) frameDurationNano / refreshPeriodNano; - if (normalized < PAUSE_THRESHOLD) { - if (normalized > 1.0f + MAX_ERROR) { - numJankyFrames++; - } - mLongestFrameNano = Math.max(mLongestFrameNano, frameDurationNano); - } - } - } - - @Override - public void start() { - // Clear out any previous data - numJankyFrames = 0; - mLongestFrameNano = 0; - mInstrumentation.getUiAutomation().clearWindowAnimationFrameStats(); - } - - @Override - public void stop() { - stats = mInstrumentation.getUiAutomation().getWindowAnimationFrameStats(); - analyze(); - } - - public boolean jankyFramesDetected() { - return stats.getFrameCount() > 0 && numJankyFrames > 0; - } - - @Override - public String toString() { - return stats.toString() + - " RefreshPeriodNano:" + stats.getRefreshPeriodNano() + - " NumJankyFrames:" + numJankyFrames + - " LongestFrameNano:" + mLongestFrameNano; - } -} \ No newline at end of file diff --git a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitor.java b/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitor.java deleted file mode 100644 index 11de4aa86343..000000000000 --- a/tests/FlickerTests/lib/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitor.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import android.os.RemoteException; -import android.view.IWindowManager; -import android.view.WindowManagerGlobal; - -/** - * Captures WindowManager trace from WindowManager. - */ -public class WindowManagerTraceMonitor extends TraceMonitor { - private IWindowManager mWm = WindowManagerGlobal.getWindowManagerService(); - - public WindowManagerTraceMonitor() { - this(OUTPUT_DIR.toString()); - } - - public WindowManagerTraceMonitor(String outputDir) { - super(outputDir, "wm_trace.pb"); - } - - @Override - public void start() { - try { - mWm.startWindowTrace(); - } catch (RemoteException e) { - throw new RuntimeException("Could not start trace", e); - } - } - - @Override - public void stop() { - try { - mWm.stopWindowTrace(); - } catch (RemoteException e) { - throw new RuntimeException("Could not stop trace", e); - } - } - - @Override - public boolean isEnabled() throws RemoteException{ - return mWm.isWindowTraceEnabled(); - } -} diff --git a/tests/FlickerTests/lib/test/Android.bp b/tests/FlickerTests/lib/test/Android.bp deleted file mode 100644 index bfeb75b23469..000000000000 --- a/tests/FlickerTests/lib/test/Android.bp +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -android_test { - name: "FlickerLibTest", - // sign this with platform cert, so this test is allowed to call private platform apis - certificate: "platform", - platform_apis: true, - test_suites: ["tests"], - srcs: ["src/**/*.java"], - libs: ["android.test.runner"], - static_libs: [ - "androidx.test.rules", - "platform-test-annotations", - "truth-prebuilt", - "platformprotosnano", - "layersprotosnano", - "flickerlib", - ], -} diff --git a/tests/FlickerTests/lib/test/AndroidManifest.xml b/tests/FlickerTests/lib/test/AndroidManifest.xml deleted file mode 100644 index 6451a5710821..000000000000 --- a/tests/FlickerTests/lib/test/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/FlickerTests/lib/test/AndroidTest.xml b/tests/FlickerTests/lib/test/AndroidTest.xml deleted file mode 100644 index e4cc298a2aa8..000000000000 --- a/tests/FlickerTests/lib/test/AndroidTest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - diff --git a/tests/FlickerTests/lib/test/assets/testdata/layers_trace_emptyregion.pb b/tests/FlickerTests/lib/test/assets/testdata/layers_trace_emptyregion.pb deleted file mode 100644 index 98ee6f3ed2698c1b4cdac07ffd33dfb4859db769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565800 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

+8H<=IxQs8 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 z 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 z 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 diff --git a/tests/FlickerTests/lib/test/assets/testdata/layers_trace_orphanlayers.pb b/tests/FlickerTests/lib/test/assets/testdata/layers_trace_orphanlayers.pb deleted file mode 100644 index af4079707c69e05879b404262306f6d1643eba09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1936878 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 z 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


8XlR# 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 In=1PLKceQwqyPW_ diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsCheckerTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsCheckerTest.java deleted file mode 100644 index 8e7fe1b4f942..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsCheckerTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.google.common.truth.Truth.assertThat; - -import com.android.server.wm.flicker.Assertions.Result; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -/** - * Contains {@link AssertionsChecker} tests. - * To run this test: {@code atest FlickerLibTest:AssertionsCheckerTest} - */ -public class AssertionsCheckerTest { - - /** - * Returns a list of SimpleEntry objects with {@code data} and incremental timestamps starting - * at 0. - */ - private static List getTestEntries(int... data) { - List entries = new ArrayList<>(); - for (int i = 0; i < data.length; i++) { - entries.add(new SimpleEntry(i, data[i])); - } - return entries; - } - - @Test - public void canCheckAllEntries() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.add(SimpleEntry::isData42, "isData42"); - - List failures = checker.test(getTestEntries(1, 1, 1, 1, 1)); - - assertThat(failures).hasSize(5); - } - - @Test - public void canCheckFirstEntry() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.checkFirstEntry(); - checker.add(SimpleEntry::isData42, "isData42"); - - List failures = checker.test(getTestEntries(1, 1, 1, 1, 1)); - - assertThat(failures).hasSize(1); - assertThat(failures.get(0).timestamp).isEqualTo(0); - } - - @Test - public void canCheckLastEntry() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.checkLastEntry(); - checker.add(SimpleEntry::isData42, "isData42"); - - List failures = checker.test(getTestEntries(1, 1, 1, 1, 1)); - - assertThat(failures).hasSize(1); - assertThat(failures.get(0).timestamp).isEqualTo(4); - } - - @Test - public void canCheckRangeOfEntries() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.filterByRange(1, 2); - checker.add(SimpleEntry::isData42, "isData42"); - - List failures = checker.test(getTestEntries(1, 42, 42, 1, 1)); - - assertThat(failures).hasSize(0); - } - - @Test - public void emptyRangePasses() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.filterByRange(9, 10); - checker.add(SimpleEntry::isData42, "isData42"); - - List failures = checker.test(getTestEntries(1, 1, 1, 1, 1)); - - assertThat(failures).isEmpty(); - } - - @Test - public void canCheckChangingAssertions() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.add(SimpleEntry::isData42, "isData42"); - checker.add(SimpleEntry::isData0, "isData0"); - checker.checkChangingAssertions(); - - List failures = checker.test(getTestEntries(42, 0, 0, 0, 0)); - - assertThat(failures).isEmpty(); - } - - @Test - public void canCheckChangingAssertions_withNoAssertions() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.checkChangingAssertions(); - - List failures = checker.test(getTestEntries(42, 0, 0, 0, 0)); - - assertThat(failures).isEmpty(); - } - - @Test - public void canCheckChangingAssertions_withSingleAssertion() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.add(SimpleEntry::isData42, "isData42"); - checker.checkChangingAssertions(); - - List failures = checker.test(getTestEntries(42, 42, 42, 42, 42)); - - assertThat(failures).isEmpty(); - } - - @Test - public void canFailCheckChangingAssertions_ifStartingAssertionFails() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.add(SimpleEntry::isData42, "isData42"); - checker.add(SimpleEntry::isData0, "isData0"); - checker.checkChangingAssertions(); - - List failures = checker.test(getTestEntries(0, 0, 0, 0, 0)); - - assertThat(failures).hasSize(1); - } - - @Test - public void canFailCheckChangingAssertions_ifStartingAssertionAlwaysPasses() { - AssertionsChecker checker = new AssertionsChecker<>(); - checker.add(SimpleEntry::isData42, "isData42"); - checker.add(SimpleEntry::isData0, "isData0"); - checker.checkChangingAssertions(); - - List failures = checker.test(getTestEntries(0, 0, 0, 0, 0)); - - assertThat(failures).hasSize(1); - } - - static class SimpleEntry implements ITraceEntry { - long timestamp; - int data; - - SimpleEntry(long timestamp, int data) { - this.timestamp = timestamp; - this.data = data; - } - - @Override - public long getTimestamp() { - return timestamp; - } - - Result isData42() { - return new Result(this.data == 42, this.timestamp, "is42", ""); - } - - Result isData0() { - return new Result(this.data == 0, this.timestamp, "is42", ""); - } - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsTest.java deleted file mode 100644 index 7fd178ca6e51..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/AssertionsTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.google.common.truth.Truth.assertThat; - -import com.android.server.wm.flicker.Assertions.Result; - -import org.junit.Test; - -/** - * Contains {@link Assertions} tests. - * To run this test: {@code atest FlickerLibTest:AssertionsTest} - */ -public class AssertionsTest { - @Test - public void traceEntryAssertionCanNegateResult() { - Assertions.TraceAssertion assertNumEquals42 = - getIntegerTraceEntryAssertion(); - - assertThat(assertNumEquals42.apply(1).success).isFalse(); - assertThat(assertNumEquals42.negate().apply(1).success).isTrue(); - - assertThat(assertNumEquals42.apply(42).success).isTrue(); - assertThat(assertNumEquals42.negate().apply(42).success).isFalse(); - } - - @Test - public void resultCanBeNegated() { - String reason = "Everything is fine!"; - Result result = new Result(true, 0, "TestAssert", reason); - Result negatedResult = result.negate(); - assertThat(negatedResult.success).isFalse(); - assertThat(negatedResult.reason).isEqualTo(reason); - assertThat(negatedResult.assertionName).isEqualTo("!TestAssert"); - } - - private Assertions.TraceAssertion getIntegerTraceEntryAssertion() { - return (num) -> { - if (num == 42) { - return new Result(true, "Num equals 42"); - } - return new Result(false, "Num doesn't equal 42, actual:" + num); - }; - } -} \ No newline at end of file diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java deleted file mode 100644 index d06c5d76552b..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceSubjectTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.android.server.wm.flicker.LayersTraceSubject.assertThat; -import static com.android.server.wm.flicker.TestFileUtils.readTestFile; - -import static com.google.common.truth.Truth.assertWithMessage; - -import static org.junit.Assert.fail; - -import android.graphics.Rect; - -import org.junit.Test; - -import java.nio.file.Paths; - -/** - * Contains {@link LayersTraceSubject} tests. - * To run this test: {@code atest FlickerLibTest:LayersTraceSubjectTest} - */ -public class LayersTraceSubjectTest { - private static final Rect displayRect = new Rect(0, 0, 1440, 2880); - - private static LayersTrace readLayerTraceFromFile(String relativePath) { - try { - return LayersTrace.parseFrom(readTestFile(relativePath), Paths.get(relativePath)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void testCanDetectEmptyRegionFromLayerTrace() { - LayersTrace layersTraceEntries = readLayerTraceFromFile("layers_trace_emptyregion.pb"); - try { - assertThat(layersTraceEntries).coversRegion(displayRect).forAllEntries(); - fail("Assertion passed"); - } catch (AssertionError e) { - assertWithMessage("Contains path to trace") - .that(e.getMessage()).contains("layers_trace_emptyregion.pb"); - assertWithMessage("Contains timestamp") - .that(e.getMessage()).contains("0h38m28s8ms"); - assertWithMessage("Contains assertion function") - .that(e.getMessage()).contains("coversRegion"); - assertWithMessage("Contains debug info") - .that(e.getMessage()).contains("Region to test: " + displayRect); - assertWithMessage("Contains debug info") - .that(e.getMessage()).contains("first empty point: 0, 99"); - } - } - - @Test - public void testCanDetectIncorrectVisibilityFromLayerTrace() { - LayersTrace layersTraceEntries = readLayerTraceFromFile( - "layers_trace_invalid_layer_visibility.pb"); - try { - assertThat(layersTraceEntries).showsLayer("com.android.server.wm.flicker.testapp") - .then().hidesLayer("com.android.server.wm.flicker.testapp").forAllEntries(); - fail("Assertion passed"); - } catch (AssertionError e) { - 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 assertion function") - .that(e.getMessage()).contains("!isVisible"); - assertWithMessage("Contains debug info") - .that(e.getMessage()).contains( - "com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp" - + ".SimpleActivity#0 is visible"); - } - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceTest.java deleted file mode 100644 index 7d77126fd7d4..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/LayersTraceTest.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.android.server.wm.flicker.TestFileUtils.readTestFile; - -import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; - -import static org.junit.Assert.fail; - -import android.content.Context; -import android.graphics.Point; -import android.graphics.Rect; -import android.view.WindowManager; - -import androidx.test.InstrumentationRegistry; - -import org.junit.Test; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * Contains {@link LayersTrace} tests. - * To run this test: {@code atest FlickerLibTest:LayersTraceTest} - */ -public class LayersTraceTest { - private static LayersTrace readLayerTraceFromFile(String relativePath) { - try { - return LayersTrace.parseFrom(readTestFile(relativePath)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private static Rect getDisplayBounds() { - Point display = new Point(); - WindowManager wm = - (WindowManager) InstrumentationRegistry.getContext().getSystemService( - Context.WINDOW_SERVICE); - wm.getDefaultDisplay().getRealSize(display); - return new Rect(0, 0, display.x, display.y); - } - - @Test - public void canParseAllLayers() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - assertThat(trace.getEntries()).isNotEmpty(); - assertThat(trace.getEntries().get(0).getTimestamp()).isEqualTo(2307984557311L); - assertThat(trace.getEntries().get(trace.getEntries().size() - 1).getTimestamp()) - .isEqualTo(2308521813510L); - List flattenedLayers = trace.getEntries().get(0).asFlattenedLayers(); - String msg = "Layers:\n" + flattenedLayers.stream().map(layer -> layer.mProto.name) - .collect(Collectors.joining("\n\t")); - assertWithMessage(msg).that(flattenedLayers).hasSize(47); - } - - @Test - public void canParseVisibleLayers() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - assertThat(trace.getEntries()).isNotEmpty(); - assertThat(trace.getEntries().get(0).getTimestamp()).isEqualTo(2307984557311L); - assertThat(trace.getEntries().get(trace.getEntries().size() - 1).getTimestamp()) - .isEqualTo(2308521813510L); - List flattenedLayers = trace.getEntries().get(0).asFlattenedLayers(); - List visibleLayers = flattenedLayers.stream() - .filter(layer -> layer.isVisible() && !layer.isHiddenByParent()) - .collect(Collectors.toList()); - - String msg = "Visible Layers:\n" + visibleLayers.stream() - .map(layer -> layer.mProto.name) - .collect(Collectors.joining("\n\t")); - - assertWithMessage(msg).that(visibleLayers).hasSize(9); - } - - @Test - public void canParseLayerHierarchy() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - assertThat(trace.getEntries()).isNotEmpty(); - assertThat(trace.getEntries().get(0).getTimestamp()).isEqualTo(2307984557311L); - assertThat(trace.getEntries().get(trace.getEntries().size() - 1).getTimestamp()) - .isEqualTo(2308521813510L); - List layers = trace.getEntries().get(0).getRootLayers(); - assertThat(layers).hasSize(2); - assertThat(layers.get(0).mChildren).hasSize(layers.get(0).mProto.children.length); - assertThat(layers.get(1).mChildren).hasSize(layers.get(1).mProto.children.length); - } - - // b/76099859 - @Test - public void canDetectOrphanLayers() { - try { - readLayerTraceFromFile( - "layers_trace_orphanlayers.pb"); - fail("Failed to detect orphaned layers."); - } catch (RuntimeException exception) { - assertThat(exception.getMessage()).contains( - "Failed to parse layers trace. Found orphan layers " - + "with parent layer id:1006 : 49"); - } - } - - // b/75276931 - @Test - public void canDetectUncoveredRegion() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2308008331271L); - - Assertions.Result result = entry.coversRegion(getDisplayBounds()); - - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("Region to test: Rect(0, 0 - 1440, 2880)"); - assertThat(result.reason).contains("first empty point: 0, 99"); - assertThat(result.reason).contains("visible regions:"); - assertWithMessage("Reason contains list of visible regions") - .that(result.reason).contains("StatusBar#0Rect(0, 0 - 1440, 98"); - } - - // Visible region tests - @Test - public void canTestLayerVisibleRegion_layerDoesNotExist() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2308008331271L); - - final Rect expectedVisibleRegion = new Rect(0, 0, 1, 1); - Assertions.Result result = entry.hasVisibleRegion("ImaginaryLayer", - expectedVisibleRegion); - - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("Could not find ImaginaryLayer"); - } - - @Test - public void canTestLayerVisibleRegion_layerDoesNotHaveExpectedVisibleRegion() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2307993020072L); - - final Rect expectedVisibleRegion = new Rect(0, 0, 1, 1); - Assertions.Result result = entry.hasVisibleRegion("NexusLauncherActivity#2", - expectedVisibleRegion); - - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains( - "Layer com.google.android.apps.nexuslauncher/com.google.android.apps" - + ".nexuslauncher.NexusLauncherActivity#2 is invisible: activeBuffer=null" - + " type != ColorLayer flags=1 (FLAG_HIDDEN set) visible region is empty"); - } - - @Test - public void canTestLayerVisibleRegion_layerIsHiddenByParent() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2308455948035L); - - final Rect expectedVisibleRegion = new Rect(0, 0, 1, 1); - Assertions.Result result = entry.hasVisibleRegion( - "SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main", - expectedVisibleRegion); - - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains( - "Layer SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0 is " - + "hidden by parent: com.android.chrome/com.google.android.apps.chrome" - + ".Main#0"); - } - - @Test - public void canTestLayerVisibleRegion_incorrectRegionSize() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2308008331271L); - - final Rect expectedVisibleRegion = new Rect(0, 0, 1440, 99); - Assertions.Result result = entry.hasVisibleRegion( - "StatusBar", - expectedVisibleRegion); - - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("StatusBar#0 has visible " - + "region:Rect(0, 0 - 1440, 98) expected:Rect(0, 0 - 1440, 99)"); - } - - @Test - public void canTestLayerVisibleRegion() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_emptyregion.pb"); - LayersTrace.Entry entry = trace.getEntry(2308008331271L); - - final Rect expectedVisibleRegion = new Rect(0, 0, 1440, 98); - Assertions.Result result = entry.hasVisibleRegion("StatusBar", expectedVisibleRegion); - - assertThat(result.passed()).isTrue(); - } - - @Test - public void canTestLayerVisibleRegion_layerIsNotVisible() { - LayersTrace trace = readLayerTraceFromFile( - "layers_trace_invalid_layer_visibility.pb"); - LayersTrace.Entry entry = trace.getEntry(252794268378458L); - - Assertions.Result result = entry.isVisible("com.android.server.wm.flicker.testapp"); - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains( - "Layer com.android.server.wm.flicker.testapp/com.android.server.wm.flicker" - + ".testapp.SimpleActivity#0 is invisible: type != ColorLayer visible " - + "region is empty"); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TestFileUtils.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TestFileUtils.java deleted file mode 100644 index c46175c1a977..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TestFileUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import android.content.Context; - -import androidx.test.InstrumentationRegistry; - -import com.google.common.io.ByteStreams; - -import java.io.InputStream; - -/** - * Helper functions for test file resources. - */ -class TestFileUtils { - static byte[] readTestFile(String relativePath) throws Exception { - Context context = InstrumentationRegistry.getContext(); - InputStream in = context.getResources().getAssets().open("testdata/" + relativePath); - return ByteStreams.toByteArray(in); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TransitionRunnerTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TransitionRunnerTest.java deleted file mode 100644 index 9c5e2059a0e6..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/TransitionRunnerTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.inOrder; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; - -import android.os.Environment; - -import com.android.server.wm.flicker.TransitionRunner.TransitionBuilder; -import com.android.server.wm.flicker.TransitionRunner.TransitionResult; -import com.android.server.wm.flicker.monitor.LayersTraceMonitor; -import com.android.server.wm.flicker.monitor.ScreenRecorder; -import com.android.server.wm.flicker.monitor.WindowAnimationFrameStatsMonitor; -import com.android.server.wm.flicker.monitor.WindowManagerTraceMonitor; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InOrder; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import java.io.IOException; -import java.nio.file.Paths; -import java.util.List; - -/** - * Contains {@link TransitionRunner} tests. - * {@code atest FlickerLibTest:TransitionRunnerTest} - */ -public class TransitionRunnerTest { - @Mock - private SimpleUiTransitions mTransitionsMock; - @Mock - private ScreenRecorder mScreenRecorderMock; - @Mock - private WindowManagerTraceMonitor mWindowManagerTraceMonitorMock; - @Mock - private LayersTraceMonitor mLayersTraceMonitorMock; - @Mock - private WindowAnimationFrameStatsMonitor mWindowAnimationFrameStatsMonitor; - @InjectMocks - private TransitionBuilder mTransitionBuilder; - - @Before - public void init() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void transitionsRunInOrder() { - TransitionRunner.newBuilder() - .runBeforeAll(mTransitionsMock::turnOnDevice) - .runBefore(mTransitionsMock::openApp) - .run(mTransitionsMock::performMagic) - .runAfter(mTransitionsMock::closeApp) - .runAfterAll(mTransitionsMock::cleanUpTracks) - .skipLayersTrace() - .skipWindowManagerTrace() - .build() - .run(); - - InOrder orderVerifier = inOrder(mTransitionsMock); - orderVerifier.verify(mTransitionsMock).turnOnDevice(); - orderVerifier.verify(mTransitionsMock).openApp(); - orderVerifier.verify(mTransitionsMock).performMagic(); - orderVerifier.verify(mTransitionsMock).closeApp(); - orderVerifier.verify(mTransitionsMock).cleanUpTracks(); - } - - @Test - public void canCombineTransitions() { - TransitionRunner.newBuilder() - .runBeforeAll(mTransitionsMock::turnOnDevice) - .runBeforeAll(mTransitionsMock::turnOnDevice) - .runBefore(mTransitionsMock::openApp) - .runBefore(mTransitionsMock::openApp) - .run(mTransitionsMock::performMagic) - .run(mTransitionsMock::performMagic) - .runAfter(mTransitionsMock::closeApp) - .runAfter(mTransitionsMock::closeApp) - .runAfterAll(mTransitionsMock::cleanUpTracks) - .runAfterAll(mTransitionsMock::cleanUpTracks) - .skipLayersTrace() - .skipWindowManagerTrace() - .build() - .run(); - - final int wantedNumberOfInvocations = 2; - verify(mTransitionsMock, times(wantedNumberOfInvocations)).turnOnDevice(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).openApp(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).performMagic(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).closeApp(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).cleanUpTracks(); - } - - @Test - public void emptyTransitionPasses() { - List results = TransitionRunner.newBuilder() - .skipLayersTrace() - .skipWindowManagerTrace() - .build() - .run() - .getResults(); - assertThat(results).hasSize(1); - assertThat(results.get(0).layersTraceExists()).isFalse(); - assertThat(results.get(0).windowManagerTraceExists()).isFalse(); - assertThat(results.get(0).screenCaptureVideoExists()).isFalse(); - } - - @Test - public void canRepeatTransitions() { - final int wantedNumberOfInvocations = 10; - TransitionRunner.newBuilder() - .runBeforeAll(mTransitionsMock::turnOnDevice) - .runBefore(mTransitionsMock::openApp) - .run(mTransitionsMock::performMagic) - .runAfter(mTransitionsMock::closeApp) - .runAfterAll(mTransitionsMock::cleanUpTracks) - .repeat(wantedNumberOfInvocations) - .skipLayersTrace() - .skipWindowManagerTrace() - .build() - .run(); - verify(mTransitionsMock).turnOnDevice(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).openApp(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).performMagic(); - verify(mTransitionsMock, times(wantedNumberOfInvocations)).closeApp(); - verify(mTransitionsMock).cleanUpTracks(); - } - - private void emptyTask() { - - } - - @Test - public void canCaptureWindowManagerTrace() { - mTransitionBuilder - .run(this::emptyTask) - .includeJankyRuns() - .skipLayersTrace() - .withTag("mCaptureWmTraceTransitionRunner") - .build().run(); - InOrder orderVerifier = inOrder(mWindowManagerTraceMonitorMock); - orderVerifier.verify(mWindowManagerTraceMonitorMock).start(); - orderVerifier.verify(mWindowManagerTraceMonitorMock).stop(); - orderVerifier.verify(mWindowManagerTraceMonitorMock) - .save("mCaptureWmTraceTransitionRunner", 0); - verifyNoMoreInteractions(mWindowManagerTraceMonitorMock); - } - - @Test - public void canCaptureLayersTrace() { - mTransitionBuilder - .run(this::emptyTask) - .includeJankyRuns() - .skipWindowManagerTrace() - .withTag("mCaptureLayersTraceTransitionRunner") - .build().run(); - InOrder orderVerifier = inOrder(mLayersTraceMonitorMock); - orderVerifier.verify(mLayersTraceMonitorMock).start(); - orderVerifier.verify(mLayersTraceMonitorMock).stop(); - orderVerifier.verify(mLayersTraceMonitorMock) - .save("mCaptureLayersTraceTransitionRunner", 0); - verifyNoMoreInteractions(mLayersTraceMonitorMock); - } - - @Test - public void canRecordEachRun() throws IOException { - mTransitionBuilder - .run(this::emptyTask) - .withTag("mRecordEachRun") - .recordEachRun() - .includeJankyRuns() - .skipLayersTrace() - .skipWindowManagerTrace() - .repeat(2) - .build().run(); - InOrder orderVerifier = inOrder(mScreenRecorderMock); - orderVerifier.verify(mScreenRecorderMock).start(); - orderVerifier.verify(mScreenRecorderMock).stop(); - orderVerifier.verify(mScreenRecorderMock).save("mRecordEachRun", 0); - orderVerifier.verify(mScreenRecorderMock).start(); - orderVerifier.verify(mScreenRecorderMock).stop(); - orderVerifier.verify(mScreenRecorderMock).save("mRecordEachRun", 1); - verifyNoMoreInteractions(mScreenRecorderMock); - } - - @Test - public void canRecordAllRuns() throws IOException { - doReturn(Paths.get(Environment.getExternalStorageDirectory().getAbsolutePath(), - "mRecordAllRuns.mp4")).when(mScreenRecorderMock).save("mRecordAllRuns"); - mTransitionBuilder - .run(this::emptyTask) - .recordAllRuns() - .includeJankyRuns() - .skipLayersTrace() - .skipWindowManagerTrace() - .withTag("mRecordAllRuns") - .repeat(2) - .build().run(); - InOrder orderVerifier = inOrder(mScreenRecorderMock); - orderVerifier.verify(mScreenRecorderMock).start(); - orderVerifier.verify(mScreenRecorderMock).stop(); - orderVerifier.verify(mScreenRecorderMock).save("mRecordAllRuns"); - verifyNoMoreInteractions(mScreenRecorderMock); - } - - @Test - public void canSkipJankyRuns() { - doReturn(false).doReturn(true).doReturn(false) - .when(mWindowAnimationFrameStatsMonitor).jankyFramesDetected(); - List results = mTransitionBuilder - .run(this::emptyTask) - .skipLayersTrace() - .skipWindowManagerTrace() - .repeat(3) - .build().run().getResults(); - assertThat(results).hasSize(2); - } - - public static class SimpleUiTransitions { - public void turnOnDevice() { - } - - public void openApp() { - } - - public void performMagic() { - } - - public void closeApp() { - } - - public void cleanUpTracks() { - } - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WindowManagerTraceTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WindowManagerTraceTest.java deleted file mode 100644 index 49278718932c..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WindowManagerTraceTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.android.server.wm.flicker.TestFileUtils.readTestFile; - -import static com.google.common.truth.Truth.assertThat; - -import com.android.server.wm.flicker.Assertions.Result; - -import org.junit.Before; -import org.junit.Test; - -/** - * Contains {@link WindowManagerTrace} tests. - * To run this test: {@code atest FlickerLibTest:WindowManagerTraceTest} - */ -public class WindowManagerTraceTest { - private WindowManagerTrace mTrace; - - private static WindowManagerTrace readWindowManagerTraceFromFile(String relativePath) { - try { - return WindowManagerTrace.parseFrom(readTestFile(relativePath)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Before - public void setup() { - mTrace = readWindowManagerTraceFromFile("wm_trace_openchrome.pb"); - } - - @Test - public void canParseAllEntries() { - assertThat(mTrace.getEntries().get(0).getTimestamp()).isEqualTo(241777211939236L); - assertThat(mTrace.getEntries().get(mTrace.getEntries().size() - 1).getTimestamp()).isEqualTo - (241779809471942L); - } - - @Test - public void canDetectAboveAppWindowVisibility() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241777211939236L); - Result result = entry.isAboveAppWindowVisible("NavigationBar"); - assertThat(result.passed()).isTrue(); - } - - @Test - public void canDetectBelowAppWindowVisibility() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241777211939236L); - Result result = entry.isBelowAppWindowVisible("wallpaper"); - assertThat(result.passed()).isTrue(); - } - - @Test - public void canDetectAppWindowVisibility() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241777211939236L); - Result result = entry.isAppWindowVisible("com.google.android.apps.nexuslauncher"); - assertThat(result.passed()).isTrue(); - } - - @Test - public void canFailWithReasonForVisibilityChecks_windowNotFound() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241777211939236L); - Result result = entry.isAboveAppWindowVisible("ImaginaryWindow"); - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("ImaginaryWindow cannot be found"); - } - - @Test - public void canFailWithReasonForVisibilityChecks_windowNotVisible() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241777211939236L); - Result result = entry.isAboveAppWindowVisible("AssistPreviewPanel"); - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("AssistPreviewPanel is invisible"); - } - - @Test - public void canDetectAppZOrder() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241778130296410L); - Result result = entry.isVisibleAppWindowOnTop("com.google.android.apps.chrome"); - assertThat(result.passed()).isTrue(); - } - - @Test - public void canFailWithReasonForZOrderChecks_windowNotOnTop() { - WindowManagerTrace.Entry entry = mTrace.getEntry(241778130296410L); - Result result = entry.isVisibleAppWindowOnTop("com.google.android.apps.nexuslauncher"); - assertThat(result.failed()).isTrue(); - assertThat(result.reason).contains("wanted=com.google.android.apps.nexuslauncher"); - assertThat(result.reason).contains("found=com.android.chrome/" - + "com.google.android.apps.chrome.Main"); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WmTraceSubjectTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WmTraceSubjectTest.java deleted file mode 100644 index d547a188a663..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/WmTraceSubjectTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import static com.android.server.wm.flicker.TestFileUtils.readTestFile; -import static com.android.server.wm.flicker.WmTraceSubject.assertThat; - -import org.junit.Test; - -/** - * Contains {@link WmTraceSubject} tests. - * To run this test: {@code atest FlickerLibTest:WmTraceSubjectTest} - */ -public class WmTraceSubjectTest { - private static WindowManagerTrace readWmTraceFromFile(String relativePath) { - try { - return WindowManagerTrace.parseFrom(readTestFile(relativePath)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void testCanTransitionInAppWindow() { - WindowManagerTrace trace = readWmTraceFromFile("wm_trace_openchrome2.pb"); - - assertThat(trace).showsAppWindowOnTop("com.google.android.apps.nexuslauncher/" - + ".NexusLauncherActivity").forRange(174684850717208L, 174685957511016L); - assertThat(trace).showsAppWindowOnTop( - "com.google.android.apps.nexuslauncher/.NexusLauncherActivity") - .then() - .showsAppWindowOnTop("com.android.chrome") - .forAllEntries(); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/LayersTraceMonitorTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/LayersTraceMonitorTest.java deleted file mode 100644 index dbd6761a05b0..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/LayersTraceMonitorTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static android.surfaceflinger.nano.Layerstrace.LayersTraceFileProto.MAGIC_NUMBER_H; -import static android.surfaceflinger.nano.Layerstrace.LayersTraceFileProto.MAGIC_NUMBER_L; - -import static com.google.common.truth.Truth.assertThat; - -import android.surfaceflinger.nano.Layerstrace.LayersTraceFileProto; - -import com.google.common.io.Files; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; - -/** - * Contains {@link LayersTraceMonitor} tests. - * To run this test: {@code atest FlickerLibTest:LayersTraceMonitorTest} - */ -public class LayersTraceMonitorTest { - private LayersTraceMonitor mLayersTraceMonitor; - - @Before - public void setup() { - mLayersTraceMonitor = new LayersTraceMonitor(); - } - - @After - public void teardown() { - mLayersTraceMonitor.stop(); - mLayersTraceMonitor.getOutputTraceFilePath("captureLayersTrace").toFile().delete(); - } - - @Test - public void canStartLayersTrace() throws Exception { - mLayersTraceMonitor.start(); - assertThat(mLayersTraceMonitor.isEnabled()).isTrue(); - } - - @Test - public void canStopLayersTrace() throws Exception { - mLayersTraceMonitor.start(); - assertThat(mLayersTraceMonitor.isEnabled()).isTrue(); - mLayersTraceMonitor.stop(); - assertThat(mLayersTraceMonitor.isEnabled()).isFalse(); - } - - @Test - public void captureLayersTrace() throws Exception { - mLayersTraceMonitor.start(); - mLayersTraceMonitor.stop(); - File testFile = mLayersTraceMonitor.save("captureLayersTrace").toFile(); - assertThat(testFile.exists()).isTrue(); - byte[] trace = Files.toByteArray(testFile); - assertThat(trace.length).isGreaterThan(0); - LayersTraceFileProto mLayerTraceFileProto = LayersTraceFileProto.parseFrom(trace); - assertThat(mLayerTraceFileProto.magicNumber).isEqualTo( - (long) MAGIC_NUMBER_H << 32 | MAGIC_NUMBER_L); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/ScreenRecorderTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/ScreenRecorderTest.java deleted file mode 100644 index e73eecc348f0..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/ScreenRecorderTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static android.os.SystemClock.sleep; - -import static com.android.server.wm.flicker.monitor.ScreenRecorder.DEFAULT_OUTPUT_PATH; -import static com.android.server.wm.flicker.monitor.ScreenRecorder.getPath; - -import static com.google.common.truth.Truth.assertThat; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; - -/** - * Contains {@link ScreenRecorder} tests. - * To run this test: {@code atest FlickerLibTest:ScreenRecorderTest} - */ -public class ScreenRecorderTest { - private static final String TEST_VIDEO_FILENAME = "test.mp4"; - private ScreenRecorder mScreenRecorder; - - @Before - public void setup() { - mScreenRecorder = new ScreenRecorder(); - } - - @After - public void teardown() { - DEFAULT_OUTPUT_PATH.toFile().delete(); - getPath(TEST_VIDEO_FILENAME).toFile().delete(); - } - - @Test - public void videoIsRecorded() { - mScreenRecorder.start(); - sleep(100); - mScreenRecorder.stop(); - File file = DEFAULT_OUTPUT_PATH.toFile(); - assertThat(file.exists()).isTrue(); - } - - @Test - public void videoCanBeSaved() { - mScreenRecorder.start(); - sleep(100); - mScreenRecorder.stop(); - mScreenRecorder.save(TEST_VIDEO_FILENAME); - File file = getPath(TEST_VIDEO_FILENAME).toFile(); - assertThat(file.exists()).isTrue(); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitorTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitorTest.java deleted file mode 100644 index f31238477e95..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowAnimationFrameStatsMonitorTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static com.android.server.wm.flicker.helpers.AutomationUtils.wakeUpAndGoToHomeScreen; - -import androidx.test.InstrumentationRegistry; - -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -/** - * Contains {@link WindowAnimationFrameStatsMonitor} tests. - * To run this test: {@code atest FlickerLibTest:WindowAnimationFrameStatsMonitorTest} - */ -public class WindowAnimationFrameStatsMonitorTest { - private WindowAnimationFrameStatsMonitor mWindowAnimationFrameStatsMonitor; - - @Before - public void setup() { - mWindowAnimationFrameStatsMonitor = new WindowAnimationFrameStatsMonitor( - InstrumentationRegistry.getInstrumentation()); - wakeUpAndGoToHomeScreen(); - } - - // TODO(vishnun) - @Ignore("Disabled until app-helper libraries are available.") - @Test - public void captureWindowAnimationFrameStats() throws Exception { - mWindowAnimationFrameStatsMonitor.start(); - //AppHelperWrapper.getInstance().getHelper(CHROME).open(); - //AppHelperWrapper.getInstance().getHelper(CHROME).exit(); - mWindowAnimationFrameStatsMonitor.stop(); - } -} diff --git a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitorTest.java b/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitorTest.java deleted file mode 100644 index 56284d7d516a..000000000000 --- a/tests/FlickerTests/lib/test/src/com/android/server/wm/flicker/monitor/WindowManagerTraceMonitorTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker.monitor; - -import static com.android.server.wm.nano.WindowManagerTraceFileProto.MAGIC_NUMBER_H; -import static com.android.server.wm.nano.WindowManagerTraceFileProto.MAGIC_NUMBER_L; - -import static com.google.common.truth.Truth.assertThat; - -import com.android.server.wm.nano.WindowManagerTraceFileProto; - -import com.google.common.io.Files; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; - -/** - * Contains {@link WindowManagerTraceMonitor} tests. - * To run this test: {@code atest FlickerLibTest:WindowManagerTraceMonitorTest} - */ -public class WindowManagerTraceMonitorTest { - private WindowManagerTraceMonitor mWindowManagerTraceMonitor; - - @Before - public void setup() { - mWindowManagerTraceMonitor = new WindowManagerTraceMonitor(); - } - - @After - public void teardown() { - mWindowManagerTraceMonitor.stop(); - mWindowManagerTraceMonitor.getOutputTraceFilePath("captureWindowTrace").toFile().delete(); - } - - @Test - public void canStartWindowTrace() throws Exception { - mWindowManagerTraceMonitor.start(); - assertThat(mWindowManagerTraceMonitor.isEnabled()).isTrue(); - } - - @Test - public void canStopWindowTrace() throws Exception { - mWindowManagerTraceMonitor.start(); - assertThat(mWindowManagerTraceMonitor.isEnabled()).isTrue(); - mWindowManagerTraceMonitor.stop(); - assertThat(mWindowManagerTraceMonitor.isEnabled()).isFalse(); - } - - @Test - public void captureWindowTrace() throws Exception { - mWindowManagerTraceMonitor.start(); - mWindowManagerTraceMonitor.stop(); - File testFile = mWindowManagerTraceMonitor.save("captureWindowTrace").toFile(); - assertThat(testFile.exists()).isTrue(); - byte[] trace = Files.toByteArray(testFile); - assertThat(trace.length).isGreaterThan(0); - WindowManagerTraceFileProto mWindowTraceFileProto = WindowManagerTraceFileProto.parseFrom( - trace); - assertThat(mWindowTraceFileProto.magicNumber).isEqualTo( - (long) MAGIC_NUMBER_H << 32 | MAGIC_NUMBER_L); - } -} diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ChangeAppRotationTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/ChangeAppRotationTest.java index b6860cbd8d96..ea85f365854b 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ChangeAppRotationTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ChangeAppRotationTest.java @@ -32,8 +32,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.LargeTest; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @@ -44,18 +46,19 @@ import java.util.Collection; * Cycle through supported app rotations. * To run this test: {@code atest FlickerTest:ChangeAppRotationTest} */ -@RunWith(Parameterized.class) @LargeTest +@RunWith(Parameterized.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ChangeAppRotationTest extends FlickerTestBase { - private int beginRotation; - private int endRotation; + private int mBeginRotation; + private int mEndRotation; public ChangeAppRotationTest(String beginRotationName, String endRotationName, int beginRotation, int endRotation) { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); - this.beginRotation = beginRotation; - this.endRotation = endRotation; + this.mBeginRotation = beginRotation; + this.mEndRotation = endRotation; } @Parameters(name = "{0}-{1}") @@ -77,7 +80,7 @@ public class ChangeAppRotationTest extends FlickerTestBase { @Before public void runTransition() { super.runTransition( - changeAppRotation(testApp, uiDevice, beginRotation, endRotation).build()); + changeAppRotation(mTestApp, mUiDevice, mBeginRotation, mEndRotation).build()); } @Test @@ -94,8 +97,8 @@ public class ChangeAppRotationTest extends FlickerTestBase { @Test public void checkPosition_navBarLayerRotatesAndScales() { - Rect startingPos = getNavigationBarPosition(beginRotation); - Rect endingPos = getNavigationBarPosition(endRotation); + Rect startingPos = getNavigationBarPosition(mBeginRotation); + Rect endingPos = getNavigationBarPosition(mEndRotation); checkResults(result -> { LayersTraceSubject.assertThat(result) .hasVisibleRegion(NAVIGATION_BAR_WINDOW_TITLE, startingPos) @@ -108,22 +111,22 @@ public class ChangeAppRotationTest extends FlickerTestBase { @Test public void checkPosition_appLayerRotates() { - Rect startingPos = getAppPosition(beginRotation); - Rect endingPos = getAppPosition(endRotation); + Rect startingPos = getAppPosition(mBeginRotation); + Rect endingPos = getAppPosition(mEndRotation); Log.e(TAG, "startingPos=" + startingPos + " endingPos=" + endingPos); checkResults(result -> { LayersTraceSubject.assertThat(result) - .hasVisibleRegion(testApp.getPackage(), startingPos).inTheBeginning(); + .hasVisibleRegion(mTestApp.getPackage(), startingPos).inTheBeginning(); LayersTraceSubject.assertThat(result) - .hasVisibleRegion(testApp.getPackage(), endingPos).atTheEnd(); + .hasVisibleRegion(mTestApp.getPackage(), endingPos).atTheEnd(); } ); } @Test public void checkPosition_statusBarLayerScales() { - Rect startingPos = getStatusBarPosition(beginRotation); - Rect endingPos = getStatusBarPosition(endRotation); + Rect startingPos = getStatusBarPosition(mBeginRotation); + Rect endingPos = getStatusBarPosition(mEndRotation); checkResults(result -> { LayersTraceSubject.assertThat(result) .hasVisibleRegion(STATUS_BAR_WINDOW_TITLE, startingPos) diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToAppTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToAppTest.java index 6590b86f1499..9deb97726542 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToAppTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToAppTest.java @@ -26,8 +26,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test IME window closing back to app window transitions. @@ -35,6 +37,7 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class CloseImeWindowToAppTest extends FlickerTestBase { private static final String IME_WINDOW_TITLE = "InputMethod"; @@ -44,7 +47,7 @@ public class CloseImeWindowToAppTest extends FlickerTestBase { @Before public void runTransition() { - super.runTransition(editTextLoseFocusToApp(uiDevice) + super.runTransition(editTextLoseFocusToApp(mUiDevice) .includeJankyRuns().build()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToHomeTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToHomeTest.java index 4771b02000c0..cce5a2a7cc0d 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToHomeTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CloseImeWindowToHomeTest.java @@ -26,8 +26,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test IME window closing to home transitions. @@ -35,6 +37,7 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class CloseImeWindowToHomeTest extends FlickerTestBase { private static final String IME_WINDOW_TITLE = "InputMethod"; @@ -44,7 +47,7 @@ public class CloseImeWindowToHomeTest extends FlickerTestBase { @Before public void runTransition() { - super.runTransition(editTextLoseFocusToHome(uiDevice) + super.runTransition(editTextLoseFocusToHome(mUiDevice) .includeJankyRuns().build()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonTransitions.java b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonTransitions.java index 5cf2c1cd6827..0173b24bb528 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonTransitions.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonTransitions.java @@ -216,10 +216,10 @@ class CommonTransitions { static TransitionBuilder resizeSplitScreen(IAppHelper testAppTop, IAppHelper testAppBottom, UiDevice device, Rational startRatio, Rational stopRatio) { - String testTag = "resizeSplitScreen_" + testAppTop.getLauncherName() + "_" + - testAppBottom.getLauncherName() + "_" + - startRatio.toString().replace("/", ":") + "_to_" + - stopRatio.toString().replace("/", ":"); + String testTag = "resizeSplitScreen_" + testAppTop.getLauncherName() + "_" + + testAppBottom.getLauncherName() + "_" + + startRatio.toString().replace("/", ":") + "_to_" + + stopRatio.toString().replace("/", ":"); return TransitionRunner.newBuilder() .withTag(testTag) .runBeforeAll(AutomationUtils::wakeUpAndGoToHomeScreen) @@ -231,7 +231,7 @@ class CommonTransitions { .runBefore(() -> launchSplitScreen(device)) .runBefore(() -> { UiObject2 snapshot = device.findObject( - By.res("com.google.android.apps.nexuslauncher", "snapshot")); + By.res(device.getLauncherPackageName(), "snapshot")); snapshot.click(); }) .runBefore(() -> AutomationUtils.resizeSplitScreen(device, startRatio)) @@ -316,4 +316,4 @@ class CommonTransitions { .runAfterAll(testApp::exit) .repeat(ITERATIONS); } -} \ No newline at end of file +} diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/DebugTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/DebugTest.java index 61cca0d6b53f..9836655bc013 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/DebugTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/DebugTest.java @@ -22,17 +22,22 @@ import android.util.Rational; import android.view.Surface; import androidx.test.InstrumentationRegistry; +import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; +import org.junit.FixMethodOrder; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Tests to help debug individual transitions, capture video recordings and create test cases. */ +@LargeTest @Ignore("Used for debugging transitions used in FlickerTests.") @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class DebugTest { private IAppHelper testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/FlickerTestBase.java b/tests/FlickerTests/src/com/android/server/wm/flicker/FlickerTestBase.java index 8c9d6b4dc7a0..6e8e0c3c76c5 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/FlickerTestBase.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/FlickerTestBase.java @@ -16,20 +16,23 @@ package com.android.server.wm.flicker; +import static androidx.test.InstrumentationRegistry.getInstrumentation; + import static com.android.server.wm.flicker.helpers.AutomationUtils.setDefaultWait; import static com.google.common.truth.Truth.assertWithMessage; +import android.os.Bundle; import android.platform.helpers.IAppHelper; +import android.support.test.InstrumentationRegistry; import android.support.test.uiautomator.UiDevice; import android.util.Log; -import androidx.test.InstrumentationRegistry; - import com.android.server.wm.flicker.TransitionRunner.TransitionResult; import org.junit.After; import org.junit.AfterClass; +import org.junit.Before; import java.util.HashMap; import java.util.List; @@ -51,10 +54,16 @@ public class FlickerTestBase { static final String DOCKED_STACK_DIVIDER = "DockedStackDivider"; private static HashMap> transitionResults = new HashMap<>(); - IAppHelper testApp; - UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - private List results; - private TransitionResult lastResult = null; + IAppHelper mTestApp; + UiDevice mUiDevice; + private List mResults; + private TransitionResult mLastResult = null; + + @Before + public void setUp() { + InstrumentationRegistry.registerInstance(getInstrumentation(), new Bundle()); + mUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); + } /** * Teardown any system settings and clean up test artifacts from the file system. @@ -91,14 +100,14 @@ public class FlickerTestBase { */ void runTransition(TransitionRunner transition) { if (transitionResults.containsKey(transition.getTestTag())) { - results = transitionResults.get(transition.getTestTag()); + mResults = transitionResults.get(transition.getTestTag()); return; } - results = transition.run().getResults(); + mResults = transition.run().getResults(); /* Fail if we don't have any results due to jank */ assertWithMessage("No results to test because all transition runs were invalid because " - + "of Jank").that(results).isNotEmpty(); - transitionResults.put(transition.getTestTag(), results); + + "of Jank").that(mResults).isNotEmpty(); + transitionResults.put(transition.getTestTag(), mResults); } /** @@ -106,11 +115,11 @@ public class FlickerTestBase { */ void checkResults(Consumer assertion) { - for (TransitionResult result : results) { - lastResult = result; + for (TransitionResult result : mResults) { + mLastResult = result; assertion.accept(result); } - lastResult = null; + mLastResult = null; } /** @@ -119,8 +128,8 @@ public class FlickerTestBase { */ @After public void markArtifactsForSaving() { - if (lastResult != null) { - lastResult.flagForSaving(); + if (mLastResult != null) { + mLastResult.flagForSaving(); } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppColdTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppColdTest.java index 7818c4e4ba50..f3180b90e628 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppColdTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppColdTest.java @@ -25,8 +25,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test cold launch app from launcher. @@ -34,16 +36,17 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OpenAppColdTest extends FlickerTestBase { public OpenAppColdTest() { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); } @Before public void runTransition() { - super.runTransition(getOpenAppCold(testApp, uiDevice).build()); + super.runTransition(getOpenAppCold(mTestApp, mUiDevice).build()); } @Test @@ -73,7 +76,7 @@ public class OpenAppColdTest extends FlickerTestBase { .showsAppWindowOnTop( "com.google.android.apps.nexuslauncher/.NexusLauncherActivity") .then() - .showsAppWindowOnTop(testApp.getPackage()) + .showsAppWindowOnTop(mTestApp.getPackage()) .forAllEntries()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppToSplitScreenTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppToSplitScreenTest.java index 63018ec1d9e7..f8b7938901a8 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppToSplitScreenTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppToSplitScreenTest.java @@ -24,8 +24,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test open app to split screen. @@ -33,16 +35,17 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OpenAppToSplitScreenTest extends FlickerTestBase { public OpenAppToSplitScreenTest() { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); } @Before public void runTransition() { - super.runTransition(appToSplitScreen(testApp, uiDevice).includeJankyRuns().build()); + super.runTransition(appToSplitScreen(mTestApp, mUiDevice).includeJankyRuns().build()); } @Test diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppWarmTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppWarmTest.java index 1aba93056c89..a57c514a2fc6 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppWarmTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenAppWarmTest.java @@ -25,8 +25,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test warm launch app. @@ -34,16 +36,17 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OpenAppWarmTest extends FlickerTestBase { public OpenAppWarmTest() { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); } @Before public void runTransition() { - super.runTransition(openAppWarm(testApp, uiDevice).build()); + super.runTransition(openAppWarm(mTestApp, mUiDevice).build()); } @Test @@ -73,7 +76,7 @@ public class OpenAppWarmTest extends FlickerTestBase { .showsAppWindowOnTop( "com.google.android.apps.nexuslauncher/.NexusLauncherActivity") .then() - .showsAppWindowOnTop(testApp.getPackage()) + .showsAppWindowOnTop(mTestApp.getPackage()) .forAllEntries()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenImeWindowTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenImeWindowTest.java index a81fa8e6d123..9f5cfcedd38f 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/OpenImeWindowTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/OpenImeWindowTest.java @@ -23,8 +23,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test IME window opening transitions. @@ -32,13 +34,14 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OpenImeWindowTest extends FlickerTestBase { private static final String IME_WINDOW_TITLE = "InputMethod"; @Before public void runTransition() { - super.runTransition(editTextSetFocus(uiDevice) + super.runTransition(editTextSetFocus(mUiDevice) .includeJankyRuns().build()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ResizeSplitScreenTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/ResizeSplitScreenTest.java index 50dba81e53b7..abb1373fb859 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ResizeSplitScreenTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ResizeSplitScreenTest.java @@ -32,8 +32,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test split screen resizing window transitions. @@ -41,10 +43,11 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ResizeSplitScreenTest extends FlickerTestBase { public ResizeSplitScreenTest() { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); } @@ -53,7 +56,7 @@ public class ResizeSplitScreenTest extends FlickerTestBase { IAppHelper bottomApp = new StandardAppHelper(InstrumentationRegistry .getInstrumentation(), "com.android.server.wm.flicker.testapp", "ImeApp"); - super.runTransition(resizeSplitScreen(testApp, bottomApp, uiDevice, new Rational(1, 3), + super.runTransition(resizeSplitScreen(mTestApp, bottomApp, mUiDevice, new Rational(1, 3), new Rational(2, 3)).includeJankyRuns().build()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/SeamlessAppRotationTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/SeamlessAppRotationTest.java index 117ac5a8fadf..ae55a75d7e67 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/SeamlessAppRotationTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/SeamlessAppRotationTest.java @@ -33,8 +33,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.LargeTest; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @@ -47,6 +49,7 @@ import java.util.Collection; */ @LargeTest @RunWith(Parameterized.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class SeamlessAppRotationTest extends FlickerTestBase { private int mBeginRotation; private int mEndRotation; @@ -105,7 +108,7 @@ public class SeamlessAppRotationTest extends FlickerTestBase { super.runTransition( changeAppRotation(mIntent, intentId, InstrumentationRegistry.getContext(), - uiDevice, mBeginRotation, mEndRotation).repeat(5).build()); + mUiDevice, mBeginRotation, mEndRotation).repeat(5).build()); } @Test diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/SplitScreenToLauncherTest.java b/tests/FlickerTests/src/com/android/server/wm/flicker/SplitScreenToLauncherTest.java index 1d30df9750b2..c639843a5e8c 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/SplitScreenToLauncherTest.java +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/SplitScreenToLauncherTest.java @@ -25,8 +25,10 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; /** * Test open app to split screen. @@ -34,16 +36,17 @@ import org.junit.runner.RunWith; */ @LargeTest @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class SplitScreenToLauncherTest extends FlickerTestBase { public SplitScreenToLauncherTest() { - this.testApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), + this.mTestApp = new StandardAppHelper(InstrumentationRegistry.getInstrumentation(), "com.android.server.wm.flicker.testapp", "SimpleApp"); } @Before public void runTransition() { - super.runTransition(splitScreenToLauncher(testApp, uiDevice).includeJankyRuns().build()); + super.runTransition(splitScreenToLauncher(mTestApp, mUiDevice).includeJankyRuns().build()); } @Test @@ -66,9 +69,9 @@ public class SplitScreenToLauncherTest extends FlickerTestBase { @Test public void checkVisibility_appLayerBecomesInVisible() { checkResults(result -> LayersTraceSubject.assertThat(result) - .showsLayer(testApp.getPackage()) + .showsLayer(mTestApp.getPackage()) .then() - .hidesLayer(testApp.getPackage()) + .hidesLayer(mTestApp.getPackage()) .forAllEntries()); } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/StandardAppHelper.java b/tests/FlickerTests/src/com/android/server/wm/flicker/StandardAppHelper.java deleted file mode 100644 index 79a0220e0e87..000000000000 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/StandardAppHelper.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm.flicker; - -import android.app.Instrumentation; -import android.platform.helpers.AbstractStandardAppHelper; - -/** - * Class to take advantage of {@code IAppHelper} interface so the same test can be run against - * first party and third party apps. - */ -public class StandardAppHelper extends AbstractStandardAppHelper { - private final String mPackageName; - private final String mLauncherName; - - public StandardAppHelper(Instrumentation instr, String packageName, String launcherName) { - super(instr); - mPackageName = packageName; - mLauncherName = launcherName; - } - - /** - * {@inheritDoc} - */ - @Override - public String getPackage() { - return mPackageName; - } - - /** - * {@inheritDoc} - */ - @Override - public String getLauncherName() { - return mLauncherName; - } - - /** - * {@inheritDoc} - */ - @Override - public void dismissInitialDialogs() { - - } -} diff --git a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/SeamlessRotationActivity.java b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/SeamlessRotationActivity.java index 3a0c1c9382fe..5cf81cb90fbc 100644 --- a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/SeamlessRotationActivity.java +++ b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/SeamlessRotationActivity.java @@ -17,7 +17,6 @@ package com.android.server.wm.flicker.testapp; import static android.os.SystemClock.sleep; -import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; import static com.android.server.wm.flicker.testapp.ActivityOptions.EXTRA_STARVE_UI_THREAD; @@ -39,8 +38,8 @@ public class SeamlessRotationActivity extends Activity { super.onCreate(savedInstanceState); enableSeamlessRotation(); setContentView(R.layout.activity_simple); - boolean starveUiThread = getIntent().getExtras() != null && - getIntent().getExtras().getBoolean(EXTRA_STARVE_UI_THREAD); + boolean starveUiThread = getIntent().getExtras() != null + && getIntent().getExtras().getBoolean(EXTRA_STARVE_UI_THREAD); if (starveUiThread) { starveUiThread(); } -- 2.11.0