Add XR instrumentation web content workaround
Adds a workaround for https://crbug.com/908917 into the XR
instrumentation test setup since attempts to work around the issue in
the test runner haven't been completely successful. This workaround
performs a swipe which should be a no-op when running a RenderTest,
which seems to prevent the flakiness when doing pixel diffs.
Bug: 908917
Change-Id: I38bf8fb5abe1c0a2bf19e044dd9237919ec2b019
Reviewed-on: https://chromium-review.googlesource.com/c/1362293
Reviewed-by: Bill Orr <billorr@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#614250}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/ChromeTabbedActivityXrTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/ChromeTabbedActivityXrTestRule.java
index 742be80..2831f93 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/ChromeTabbedActivityXrTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/ChromeTabbedActivityXrTestRule.java
@@ -8,6 +8,7 @@
import org.junit.runners.model.Statement;
import org.chromium.chrome.browser.vr.rules.XrActivityRestriction.SupportedActivity;
+import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
/**
@@ -21,6 +22,7 @@
return super.apply(new Statement() {
@Override
public void evaluate() throws Throwable {
+ XrTestRuleUtils.maybeWorkaroundWebContentFlakiness(desc);
startMainActivityOnBlankPage();
base.evaluate();
}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/CustomTabActivityXrTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/CustomTabActivityXrTestRule.java
index 493d448..a753e8f2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/CustomTabActivityXrTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/CustomTabActivityXrTestRule.java
@@ -12,6 +12,7 @@
import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils;
import org.chromium.chrome.browser.vr.rules.XrActivityRestriction.SupportedActivity;
+import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
/**
* XR extension of CustomTabActivityTestRule. Applies CustomTabActivityTestRule then
@@ -23,6 +24,7 @@
return super.apply(new Statement() {
@Override
public void evaluate() throws Throwable {
+ XrTestRuleUtils.maybeWorkaroundWebContentFlakiness(desc);
startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent(
InstrumentationRegistry.getTargetContext(), "about:blank"));
base.evaluate();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/WebappActivityXrTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/WebappActivityXrTestRule.java
index 76078ff..fc58334a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/WebappActivityXrTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/rules/WebappActivityXrTestRule.java
@@ -8,6 +8,7 @@
import org.junit.runners.model.Statement;
import org.chromium.chrome.browser.vr.rules.XrActivityRestriction.SupportedActivity;
+import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
import org.chromium.chrome.browser.webapps.WebappActivityTestRule;
/**
@@ -22,6 +23,7 @@
return super.apply(new Statement() {
@Override
public void evaluate() throws Throwable {
+ XrTestRuleUtils.maybeWorkaroundWebContentFlakiness(desc);
startWebappActivity();
base.evaluate();
}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/VrTestRuleUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/VrTestRuleUtils.java
index dbab8c8..453a8ae 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/VrTestRuleUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/VrTestRuleUtils.java
@@ -58,6 +58,7 @@
public static void evaluateVrTestRuleImpl(final Statement base, final Description desc,
final VrTestRule rule, final ChromeLaunchMethod launcher) throws Throwable {
VrTestRuleUtils.ensureNoVrActivitiesDisplayed();
+ VrTestRuleUtils.maybeWorkaroundWebContentFlakiness(desc);
HeadTrackingUtils.checkForAndApplyHeadTrackingModeAnnotation(rule, desc);
launcher.launch();
// Must be called after Chrome is started, as otherwise startService fails with an
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/XrTestRuleUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/XrTestRuleUtils.java
index 73c47f7..61334f6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/XrTestRuleUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/XrTestRuleUtils.java
@@ -4,11 +4,16 @@
package org.chromium.chrome.browser.vr.util;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.uiautomator.UiDevice;
+
import org.junit.Assert;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
+import org.junit.runner.Description;
import org.chromium.base.test.params.ParameterSet;
+import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.vr.rules.ChromeTabbedActivityXrTestRule;
import org.chromium.chrome.browser.vr.rules.CustomTabActivityXrTestRule;
import org.chromium.chrome.browser.vr.rules.WebappActivityXrTestRule;
@@ -17,6 +22,7 @@
import org.chromium.chrome.browser.vr.rules.XrTestRule;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.concurrent.Callable;
/**
@@ -78,6 +84,28 @@
}
/**
+ * Works around https://crbug.com/908917, where web contents can be darker due to Android doing
+ * really weird things when some keyevents are input over adb. This normally isn't an issue, but
+ * can cause flakiness in RenderTests, so only apply the workaround to those. The issue gets
+ * resolved when there is touchscreen input, so perform a swipe that should be a no-op.
+ *
+ * This would ideally be worked around in the test runner, but attempts to do so have not been
+ * completely successful.
+ *
+ * @param desc The Description of the Rule currently being applied.
+ */
+ public static void maybeWorkaroundWebContentFlakiness(Description desc) {
+ Feature annotation = desc.getAnnotation(Feature.class);
+ if (annotation == null) return;
+ if (!Arrays.asList(annotation.value()).contains("RenderTest")) return;
+
+ UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+ uiDevice.drag(uiDevice.getDisplayWidth() / 2, uiDevice.getDisplayHeight() / 2,
+ uiDevice.getDisplayWidth() / 2, 3 * uiDevice.getDisplayHeight() / 4,
+ 10 /* steps */);
+ }
+
+ /**
* Converts XrActivityRestriction.SupportedActivity enum to strings.
*
* @param activity The SupportedActivity value to convert to a String.