Commit a37945e5 authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

Android: Don't time out tests when debugger is attached.

Bug: 988500
Change-Id: I3fc313404d84a089fbb2650ec588ad5cb58ed2c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1723799Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#682244}
parent 19f72352
......@@ -3416,6 +3416,7 @@ if (is_android) {
"test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java",
"test/android/javatests/src/org/chromium/base/test/util/TestFileUtil.java",
"test/android/javatests/src/org/chromium/base/test/util/TimeoutScale.java",
"test/android/javatests/src/org/chromium/base/test/util/TimeoutTimer.java",
"test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java",
"test/android/javatests/src/org/chromium/base/test/util/UrlUtils.java",
"test/android/javatests/src/org/chromium/base/test/util/parameter/CommandLineParameter.java",
......
......@@ -175,11 +175,11 @@ public class CallbackHelper {
long timeout, TimeUnit unit) throws InterruptedException, TimeoutException {
assert mCallCount >= currentCallCount;
assert numberOfCallsToWaitFor > 0;
TimeoutTimer timer = new TimeoutTimer(unit.toMillis(timeout));
synchronized (mLock) {
int callCountWhenDoneWaiting = currentCallCount + numberOfCallsToWaitFor;
long deadline = System.currentTimeMillis() + unit.toMillis(timeout);
while (callCountWhenDoneWaiting > mCallCount && System.currentTimeMillis() < deadline) {
mLock.wait(deadline - System.currentTimeMillis());
while (callCountWhenDoneWaiting > mCallCount && !timer.isTimedOut()) {
mLock.wait(timer.getRemainingMs());
if (mFailureString != null) {
String s = mFailureString;
mFailureString = null;
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
package org.chromium.base.test.util;
import android.os.Debug;
import android.os.SystemClock;
/**
* Encapsulates timeout logic, and disables timeouts when debugger is attached.
*/
public class TimeoutTimer {
private final long mEndTimeMs;
private final long mTimeoutMs;
/**
* @param timeoutMs Relative time for the timeout (unscaled).
*/
public TimeoutTimer(long timeoutMs) {
// TODO(agrieve): Apply ScalableTimeout.scaleTimeout() here rather than at callsites.
this.mTimeoutMs = timeoutMs;
this.mEndTimeMs = SystemClock.uptimeMillis() + timeoutMs;
}
/** Whether this timer has expired. */
public boolean isTimedOut() {
return getRemainingMs() == 0;
}
/** Returns how much time is left in milliseconds. */
public long getRemainingMs() {
if (Debug.isDebuggerConnected()) {
// Never decreases, but still short enough that it's safe to wait() on and have a
// timeout happen once the debugger detaches.
return mTimeoutMs;
}
long ret = mEndTimeMs - SystemClock.uptimeMillis();
return ret < 0 ? 0 : ret;
}
}
......@@ -6,11 +6,10 @@ package org.chromium.content_public.browser.test.util;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
import android.os.SystemClock;
import org.junit.Assert;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.TimeoutTimer;
import java.util.concurrent.Callable;
......@@ -79,8 +78,8 @@ public class CriteriaHelper {
public static void pollInstrumentationThread(
Criteria criteria, long maxTimeoutMs, long checkIntervalMs) {
boolean isSatisfied = criteria.isSatisfied();
long startTime = SystemClock.uptimeMillis();
while (!isSatisfied && SystemClock.uptimeMillis() - startTime < maxTimeoutMs) {
TimeoutTimer timer = new TimeoutTimer(maxTimeoutMs);
while (!isSatisfied && !timer.isTimedOut()) {
try {
Thread.sleep(checkIntervalMs);
} catch (InterruptedException e) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment