| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.net; | |
| 6 | |
| 7 import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; | |
| 8 | |
| 9 import android.os.SystemClock; | |
| 10 | |
| 11 /** | |
| 12 * Helper methods for creating and managing criteria. | |
| 13 * <p> | |
| 14 * If possible, use callbacks or testing delegates instead of criteria as they | |
| 15 * do not introduce any polling delays. Should only use Criteria if no suitable | |
| 16 * other approach exists. | |
| 17 */ | |
| 18 public class CriteriaHelper { | |
| 19 | |
| 20 /** The default maximum time to wait for a criteria to become valid. */ | |
| 21 public static final long DEFAULT_MAX_TIME_TO_POLL = scaleTimeout(3000); | |
| 22 | |
| 23 /** | |
| 24 * The default polling interval to wait between checking for a satisfied | |
| 25 * criteria. | |
| 26 */ | |
| 27 public static final long DEFAULT_POLLING_INTERVAL = 50; | |
| 28 | |
| 29 /** | |
| 30 * Checks whether the given Criteria is satisfied at a given interval, until | |
| 31 * either the criteria is satisfied, or the specified maxTimeoutMs number of | |
| 32 * ms has elapsed. | |
| 33 * | |
| 34 * @param criteria The Criteria that will be checked. | |
| 35 * @param maxTimeoutMs The maximum number of ms that this check will be | |
| 36 * performed for before timeout. | |
| 37 * @param checkIntervalMs The number of ms between checks. | |
| 38 * @return {@code true} if checking has ended with the criteria being | |
| 39 * satisfied. | |
| 40 * @throws InterruptedException | |
| 41 */ | |
| 42 public static boolean pollForCriteria(Criteria criteria, long maxTimeoutMs, | |
| 43 long checkIntervalMs) throws InterruptedException { | |
| 44 boolean isSatisfied = criteria.isSatisfied(); | |
| 45 long startTime = SystemClock.uptimeMillis(); | |
| 46 while (!isSatisfied | |
| 47 && SystemClock.uptimeMillis() - startTime < maxTimeoutMs) { | |
| 48 Thread.sleep(checkIntervalMs); | |
| 49 isSatisfied = criteria.isSatisfied(); | |
| 50 } | |
| 51 return isSatisfied; | |
| 52 } | |
| 53 | |
| 54 /** | |
| 55 * Checks whether the given Criteria is satisfied polling at a default | |
| 56 * interval. | |
| 57 * | |
| 58 * @param criteria The Criteria that will be checked. | |
| 59 * @return {@code true} if checking has ended with the criteria being | |
| 60 * satisfied. | |
| 61 * @throws InterruptedException | |
| 62 * @see #pollForCriteria(Criteria, long, long) | |
| 63 */ | |
| 64 public static boolean pollForCriteria(Criteria criteria) | |
| 65 throws InterruptedException { | |
| 66 return pollForCriteria(criteria, DEFAULT_MAX_TIME_TO_POLL, | |
| 67 DEFAULT_POLLING_INTERVAL); | |
| 68 } | |
| 69 | |
| 70 /** | |
| 71 * Performs the runnable action, then checks whether the given criteria are | |
| 72 * satisfied until the specified timeout, using the pollForCriteria method. | |
| 73 * If not, then the runnable action is performed again, to a maximum of | |
| 74 * maxAttempts tries. | |
| 75 */ | |
| 76 public static boolean runUntilCriteria(Runnable runnable, Criteria criteria, | |
| 77 int maxAttempts, long maxTimeoutMs, long checkIntervalMs) | |
| 78 throws InterruptedException { | |
| 79 int count = 0; | |
| 80 boolean success = false; | |
| 81 while (count < maxAttempts && !success) { | |
| 82 count++; | |
| 83 runnable.run(); | |
| 84 success = pollForCriteria(criteria, maxTimeoutMs, checkIntervalMs); | |
| 85 } | |
| 86 return success; | |
| 87 } | |
| 88 } | |
| OLD | NEW |