OLD | NEW |
---|---|
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 |
OLD | NEW |