| Index: third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc
|
| index 54772ba4678584c0dc05142bc0ff39adb12c5d77..802b765540ecbc1b13d4fd3eb282e2e37f74753d 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc
|
| @@ -43,14 +43,14 @@ TEST_F(QueueingTimeEstimatorTest, AllTasksWithinWindow) {
|
| QueueingTimeEstimatorForTest estimator(&client,
|
| base::TimeDelta::FromSeconds(5));
|
| for (int i = 0; i < 3; ++i) {
|
| - estimator.OnToplevelTaskCompleted(
|
| + estimator.OnTopLevelTaskCompleted(
|
| time, time + base::TimeDelta::FromMilliseconds(1000));
|
| time += base::TimeDelta::FromMilliseconds(1500);
|
| }
|
|
|
| // Flush the data by adding a task in the next window.
|
| time += base::TimeDelta::FromMilliseconds(5000);
|
| - estimator.OnToplevelTaskCompleted(
|
| + estimator.OnTopLevelTaskCompleted(
|
| time, time + base::TimeDelta::FromMilliseconds(500));
|
|
|
| EXPECT_THAT(client.expected_queueing_times(),
|
| @@ -70,17 +70,17 @@ TEST_F(QueueingTimeEstimatorTest, MultiWindowTask) {
|
| base::TimeDelta::FromSeconds(5));
|
| base::TimeTicks time;
|
| time += base::TimeDelta::FromMilliseconds(5000);
|
| - estimator.OnToplevelTaskCompleted(time, time);
|
| + estimator.OnTopLevelTaskCompleted(time, time);
|
|
|
| time += base::TimeDelta::FromMilliseconds(3000);
|
|
|
| - estimator.OnToplevelTaskCompleted(
|
| + estimator.OnTopLevelTaskCompleted(
|
| time, time + base::TimeDelta::FromMilliseconds(20000));
|
|
|
| // Flush the data by adding a task in the next window.
|
| time += base::TimeDelta::FromMilliseconds(25000);
|
|
|
| - estimator.OnToplevelTaskCompleted(
|
| + estimator.OnTopLevelTaskCompleted(
|
| time, time + base::TimeDelta::FromMilliseconds(500));
|
|
|
| EXPECT_THAT(client.expected_queueing_times(),
|
| @@ -91,5 +91,54 @@ TEST_F(QueueingTimeEstimatorTest, MultiWindowTask) {
|
| base::TimeDelta::FromMilliseconds(900)));
|
| }
|
|
|
| +// The main thread is considered unresponsive during a single long task. In this
|
| +// case, the single long task is 3 seconds long.
|
| +// Probability of being with the task = 3/5. Expected delay within task:
|
| +// avg(0, 3). Total expected queueing time = 3/5 * 3/2 = 0.9s.
|
| +// In this example, the queueing time comes from the current, incomplete window.
|
| +TEST_F(QueueingTimeEstimatorTest,
|
| + EstimateQueueingTimeDuringSingleLongTaskIncompleteWindow) {
|
| + TestQueueingTimeEstimatorClient client;
|
| + QueueingTimeEstimatorForTest estimator(&client,
|
| + base::TimeDelta::FromSeconds(5));
|
| + base::TimeTicks time;
|
| + time += base::TimeDelta::FromMilliseconds(5000);
|
| + estimator.OnTopLevelTaskCompleted(time, time);
|
| +
|
| + base::TimeTicks start_time = time;
|
| + estimator.OnTopLevelTaskStarted(start_time);
|
| +
|
| + time += base::TimeDelta::FromMilliseconds(3000);
|
| +
|
| + base::TimeDelta estimatedQueueingTime =
|
| + estimator.EstimateQueueingTimeIncludingCurrentTask(time);
|
| +
|
| + EXPECT_EQ(base::TimeDelta::FromMilliseconds(900), estimatedQueueingTime);
|
| +}
|
| +
|
| +// The main thread is considered unresponsive during a single long task, which
|
| +// exceeds the size of one window. In this example, the window with the worst
|
| +// queueing time is aligned with the start of the long task.
|
| +// Probability of being within the task = 100%, as the task fills the whole
|
| +// window. Expected delay within this task = avg(13, 8) = 10.5.
|
| +TEST_F(QueueingTimeEstimatorTest, EstimateQueueingTimeDuringSingleLongTaskExceedingWindow) {
|
| + TestQueueingTimeEstimatorClient client;
|
| + QueueingTimeEstimatorForTest estimator(&client,
|
| + base::TimeDelta::FromSeconds(5));
|
| + base::TimeTicks time;
|
| + time += base::TimeDelta::FromMilliseconds(5000);
|
| + estimator.OnTopLevelTaskCompleted(time, time);
|
| +
|
| + base::TimeTicks start_time = time;
|
| + estimator.OnTopLevelTaskStarted(start_time);
|
| +
|
| + time += base::TimeDelta::FromMilliseconds(13000);
|
| +
|
| + base::TimeDelta estimatedQueueingTime =
|
| + estimator.EstimateQueueingTimeIncludingCurrentTask(time);
|
| +
|
| + EXPECT_EQ(base::TimeDelta::FromMilliseconds(10500), estimatedQueueingTime);
|
| +}
|
| +
|
| } // namespace scheduler
|
| } // namespace blink
|
|
|