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

Side by Side Diff: components/scheduler/renderer/web_view_scheduler_impl_unittest.cc

Issue 1441073006: Move throttling of background timers into the renderer scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Try again for MSVC Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/renderer/web_view_scheduler_impl.h" 5 #include "components/scheduler/renderer/web_view_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "cc/test/ordered_simple_task_runner.h" 10 #include "cc/test/ordered_simple_task_runner.h"
11 #include "components/scheduler/base/test_time_source.h" 11 #include "components/scheduler/base/test_time_source.h"
12 #include "components/scheduler/child/scheduler_tqm_delegate_for_test.h" 12 #include "components/scheduler/child/scheduler_tqm_delegate_for_test.h"
13 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 13 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
14 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" 14 #include "components/scheduler/renderer/web_frame_scheduler_impl.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/WebKit/public/platform/WebTaskRunner.h"
17 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
16 18
17 namespace scheduler { 19 namespace scheduler {
18 20
19 class WebViewSchedulerImplTest : public testing::Test { 21 class WebViewSchedulerImplTest : public testing::Test {
20 public: 22 public:
21 WebViewSchedulerImplTest() {} 23 WebViewSchedulerImplTest() {}
22 ~WebViewSchedulerImplTest() override {} 24 ~WebViewSchedulerImplTest() override {}
23 25
24 void SetUp() override { 26 void SetUp() override {
25 clock_.reset(new base::SimpleTestTickClock()); 27 clock_.reset(new base::SimpleTestTickClock());
26 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); 28 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
27 mock_task_runner_ = make_scoped_refptr( 29 mock_task_runner_ = make_scoped_refptr(
28 new cc::OrderedSimpleTaskRunner(clock_.get(), false)); 30 new cc::OrderedSimpleTaskRunner(clock_.get(), false));
29 main_task_runner_ = SchedulerTqmDelegateForTest::Create( 31 main_task_runner_ = SchedulerTqmDelegateForTest::Create(
30 mock_task_runner_, make_scoped_ptr(new TestTimeSource(clock_.get()))); 32 mock_task_runner_, make_scoped_ptr(new TestTimeSource(clock_.get())));
31 scheduler_.reset(new RendererSchedulerImpl(main_task_runner_)); 33 scheduler_.reset(new RendererSchedulerImpl(main_task_runner_));
32 web_view_scheduler_.reset( 34 web_view_scheduler_.reset(
33 new WebViewSchedulerImpl(nullptr, scheduler_.get())); 35 new WebViewSchedulerImpl(nullptr, scheduler_.get(), "test.category"));
34 } 36 }
35 37
36 void TearDown() override { scheduler_->Shutdown(); } 38 void TearDown() override { scheduler_->Shutdown(); }
37 39
38 scoped_ptr<base::SimpleTestTickClock> clock_; 40 scoped_ptr<base::SimpleTestTickClock> clock_;
39 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 41 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
40 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; 42 scoped_refptr<SchedulerTqmDelegate> main_task_runner_;
41 scoped_ptr<RendererSchedulerImpl> scheduler_; 43 scoped_ptr<RendererSchedulerImpl> scheduler_;
42 scoped_ptr<WebViewSchedulerImpl> web_view_scheduler_; 44 scoped_ptr<WebViewSchedulerImpl> web_view_scheduler_;
43 }; 45 };
44 46
45 TEST_F(WebViewSchedulerImplTest, TestDestructionOfFrameSchedulersBefore) { 47 TEST_F(WebViewSchedulerImplTest, TestDestructionOfFrameSchedulersBefore) {
46 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame1( 48 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame1(
47 web_view_scheduler_->createFrameScheduler()); 49 web_view_scheduler_->createFrameScheduler());
48 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame2( 50 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame2(
49 web_view_scheduler_->createFrameScheduler()); 51 web_view_scheduler_->createFrameScheduler());
50 } 52 }
51 53
52 TEST_F(WebViewSchedulerImplTest, TestDestructionOfFrameSchedulersAfter) { 54 TEST_F(WebViewSchedulerImplTest, TestDestructionOfFrameSchedulersAfter) {
53 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame1( 55 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame1(
54 web_view_scheduler_->createFrameScheduler()); 56 web_view_scheduler_->createFrameScheduler());
55 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame2( 57 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame2(
56 web_view_scheduler_->createFrameScheduler()); 58 web_view_scheduler_->createFrameScheduler());
57 web_view_scheduler_.reset(); 59 web_view_scheduler_.reset();
58 } 60 }
59 61
62 TEST_F(WebViewSchedulerImplTest, DelayToNextRunTimeInSeconds) {
63 EXPECT_FLOAT_EQ(
64 1.0, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.0));
65 EXPECT_FLOAT_EQ(
66 0.9, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.1));
67 EXPECT_FLOAT_EQ(
68 0.8, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.2));
69 EXPECT_FLOAT_EQ(
70 0.7, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.3));
71 EXPECT_FLOAT_EQ(
72 0.6, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.4));
73 EXPECT_FLOAT_EQ(
74 0.5, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.5));
75 EXPECT_FLOAT_EQ(
76 0.4, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.6));
77 EXPECT_FLOAT_EQ(
78 0.3, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.7));
79 EXPECT_FLOAT_EQ(
80 0.2, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.8));
81 EXPECT_FLOAT_EQ(
82 1.1, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(0.9));
83 EXPECT_FLOAT_EQ(
84 1.0, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(1.0));
85 EXPECT_FLOAT_EQ(
86 1.0, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(8.0));
87 EXPECT_FLOAT_EQ(
88 0.8, (float)WebViewSchedulerImpl::DelayToNextRunTimeInSeconds(8.2));
89 }
90
91 namespace {
92 class RepeatingTask : public blink::WebTaskRunner::Task {
93 public:
94 RepeatingTask(blink::WebTaskRunner* web_task_runner, int* run_count)
95 : web_task_runner_(web_task_runner), run_count_(run_count) {}
96
97 ~RepeatingTask() override {}
98
99 void run() override {
100 (*run_count_)++;
101 web_task_runner_->postDelayedTask(
102 BLINK_FROM_HERE, new RepeatingTask(web_task_runner_, run_count_), 1.0);
103 }
104
105 private:
106 blink::WebTaskRunner* web_task_runner_; // NOT OWNED
107 int* run_count_; // NOT OWNED
108 };
109 } // namespace
110
111 TEST_F(WebViewSchedulerImplTest, RepeatingTimer_PageInForeground) {
112 web_view_scheduler_->setPageInBackground(false);
113
114 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame(
Sami 2015/11/17 10:12:21 Looks like this could just be a regular OwnPtr, wh
alex clarke (OOO till 29th) 2015/11/23 17:13:46 As discussed I ended up adding a new method to exp
115 web_view_scheduler_->createFrameScheduler());
116
117 int run_count = 0;
118 frame.get()->timerTaskRunner()->postDelayedTask(
119 BLINK_FROM_HERE,
120 new RepeatingTask(frame.get()->timerTaskRunner(), &run_count), 1.0);
121
122 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
123 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
124 EXPECT_EQ(1000, run_count);
125 }
126
127 TEST_F(WebViewSchedulerImplTest, RepeatingTimer_PageInBackground) {
128 web_view_scheduler_->setPageInBackground(true);
129
130 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame(
131 web_view_scheduler_->createFrameScheduler());
132
133 int run_count = 0;
134 frame.get()->timerTaskRunner()->postDelayedTask(
135 BLINK_FROM_HERE,
136 new RepeatingTask(frame.get()->timerTaskRunner(), &run_count), 1.0);
137
138 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
139 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
140 EXPECT_EQ(1, run_count);
141 }
142
143 TEST_F(WebViewSchedulerImplTest, RepeatingLoadingTask_PageInBackground) {
144 web_view_scheduler_->setPageInBackground(true);
145
146 blink::WebPassOwnPtr<blink::WebFrameScheduler> frame(
147 web_view_scheduler_->createFrameScheduler());
148
149 int run_count = 0;
150 frame.get()->loadingTaskRunner()->postDelayedTask(
151 BLINK_FROM_HERE,
152 new RepeatingTask(frame.get()->loadingTaskRunner(), &run_count), 1.0);
153
154 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
155 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
156 EXPECT_EQ(1000, run_count); // Loading tasks should not be throttled
157 }
158
60 } // namespace scheduler 159 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698