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 |