Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/queueing_time_estimator_unittest.cc

Issue 2273703002: Force events to be non blocking if main thread is unresponsive. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Dave's comments. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698