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

Unified Diff: third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc

Issue 2652973002: [scheduler] Plumb websocket information to scheduler (Closed)
Patch Set: git Created 3 years, 10 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/renderer/web_view_scheduler_impl_unittest.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc
index 5f3ccdb104980425a414f30d826ec0892f2a896f..61961b6a1242088976675f368cd0b26760b9b622 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc
@@ -685,5 +685,105 @@ TEST_F(WebViewSchedulerImplTest, BackgroundThrottlingGracePeriod) {
base::TimeTicks() + base::TimeDelta::FromSeconds(26)));
}
+TEST_F(WebViewSchedulerImplTest, OpenWebSocketExemptsFromBudgetThrottling) {
+ ScopedExpensiveBackgroundTimerThrottlingForTest
+ budget_background_throttling_enabler(true);
+
+ std::vector<base::TimeTicks> run_times;
+ FakeWebViewSchedulerSettings web_view_scheduler_settings;
+ std::unique_ptr<WebViewSchedulerImpl> web_view_scheduler(
+ new WebViewSchedulerImpl(nullptr, &web_view_scheduler_settings,
+ scheduler_.get(), false));
+
+ std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler1 =
+ web_view_scheduler->createWebFrameSchedulerImpl(nullptr);
+ std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler2 =
+ web_view_scheduler->createWebFrameSchedulerImpl(nullptr);
+
+ web_view_scheduler->setPageVisible(false);
+
+ // Wait for 20s to avoid initial throttling delay.
+ mock_task_runner_->RunUntilTime(base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(20500));
+
+ for (size_t i = 0; i < 3; ++i) {
+ web_frame_scheduler1->timerTaskRunner()->postDelayedTask(
+ BLINK_FROM_HERE,
+ base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1);
+ }
+
+ mock_task_runner_->RunUntilTime(base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(55500));
+
+ // Check that tasks are throttled.
+ EXPECT_THAT(
+ run_times,
+ ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(21),
+ base::TimeTicks() + base::TimeDelta::FromSeconds(26),
+ base::TimeTicks() + base::TimeDelta::FromSeconds(51)));
+ run_times.clear();
+
+ std::unique_ptr<WebFrameScheduler::ActiveConnectionHandle>
+ websocket_connection = web_frame_scheduler1->onActiveConnectionCreated();
+
+ for (size_t i = 0; i < 3; ++i) {
+ web_frame_scheduler1->timerTaskRunner()->postDelayedTask(
+ BLINK_FROM_HERE,
+ base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1);
+ }
+
+ mock_task_runner_->RunUntilTime(base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(58500));
+
+ // Check that the timer task queue from the first frame is aligned,
+ // but not throttled.
+ EXPECT_THAT(
+ run_times,
+ ElementsAre(
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(56000),
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(56250),
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(56500)));
+ run_times.clear();
+
+ for (size_t i = 0; i < 3; ++i) {
+ web_frame_scheduler2->timerTaskRunner()->postDelayedTask(
+ BLINK_FROM_HERE,
+ base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1);
+ }
+
+ mock_task_runner_->RunUntilTime(base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(59500));
+
+ // Check that the second frame scheduler becomes unthrottled.
+ EXPECT_THAT(
+ run_times,
+ ElementsAre(
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(59000),
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(59250),
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(59500)));
+ run_times.clear();
+
+ websocket_connection.reset();
+
+ // Wait for 10s to enable throttling back.
+ mock_task_runner_->RunUntilTime(base::TimeTicks() +
+ base::TimeDelta::FromMilliseconds(70500));
+
+ for (size_t i = 0; i < 3; ++i) {
+ web_frame_scheduler1->timerTaskRunner()->postDelayedTask(
+ BLINK_FROM_HERE,
+ base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1);
+ }
+
+ mock_task_runner_->RunUntilIdle();
+
+ // WebSocket is closed, budget-based throttling now applies.
+ EXPECT_THAT(
+ run_times,
+ ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(84),
+ base::TimeTicks() + base::TimeDelta::FromSeconds(109),
+ base::TimeTicks() + base::TimeDelta::FromSeconds(134)));
+}
+
} // namespace scheduler
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698