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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/child/idle_helper_unittest.cc

Issue 2637463002: Add an idle task to periodically sweep canceled delayed tasks (Closed)
Patch Set: Fix issue with tracked_objects::Location spotted by asan Created 3 years, 11 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 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 "platform/scheduler/child/idle_helper.h" 5 #include "platform/scheduler/child/idle_helper.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 base::TimeDelta required_quiescence_duration_before_long_idle_period) 159 base::TimeDelta required_quiescence_duration_before_long_idle_period)
160 : IdleHelper(scheduler_helper, 160 : IdleHelper(scheduler_helper,
161 this, 161 this,
162 "test.idle", 162 "test.idle",
163 TRACE_DISABLED_BY_DEFAULT("test.idle"), 163 TRACE_DISABLED_BY_DEFAULT("test.idle"),
164 "TestSchedulerIdlePeriod", 164 "TestSchedulerIdlePeriod",
165 required_quiescence_duration_before_long_idle_period) {} 165 required_quiescence_duration_before_long_idle_period) {}
166 166
167 ~IdleHelperForTest() override {} 167 ~IdleHelperForTest() override {}
168 168
169 // SchedulerHelperDelegate implementation: 169 // IdleHelper::Delegate implementation:
170 MOCK_METHOD2(CanEnterLongIdlePeriod, 170 MOCK_METHOD2(CanEnterLongIdlePeriod,
171 bool(base::TimeTicks now, 171 bool(base::TimeTicks now,
172 base::TimeDelta* next_long_idle_period_delay_out)); 172 base::TimeDelta* next_long_idle_period_delay_out));
173 173
174 MOCK_METHOD0(IsNotQuiescent, void()); 174 MOCK_METHOD0(IsNotQuiescent, void());
175 MOCK_METHOD0(OnIdlePeriodStarted, void()); 175 MOCK_METHOD0(OnIdlePeriodStarted, void());
176 MOCK_METHOD0(OnIdlePeriodEnded, void()); 176 MOCK_METHOD0(OnIdlePeriodEnded, void());
177 }; 177 };
178 178
179 class BaseIdleHelperTest : public testing::Test { 179 class BaseIdleHelperTest : public testing::Test {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 277
278 base::TimeTicks CurrentIdleTaskDeadline() { 278 base::TimeTicks CurrentIdleTaskDeadline() {
279 return idle_helper_->CurrentIdleTaskDeadline(); 279 return idle_helper_->CurrentIdleTaskDeadline();
280 } 280 }
281 281
282 void CheckIdlePeriodStateIs(const char* expected) { 282 void CheckIdlePeriodStateIs(const char* expected) {
283 EXPECT_STREQ(expected, IdleHelper::IdlePeriodStateToString( 283 EXPECT_STREQ(expected, IdleHelper::IdlePeriodStateToString(
284 idle_helper_->SchedulerIdlePeriodState())); 284 idle_helper_->SchedulerIdlePeriodState()));
285 } 285 }
286 286
287 const scoped_refptr<TaskQueue>& idle_queue() const {
288 return idle_helper_->idle_queue_;
289 }
290
287 std::unique_ptr<base::SimpleTestTickClock> clock_; 291 std::unique_ptr<base::SimpleTestTickClock> clock_;
288 // Only one of mock_task_runner_ or message_loop_ will be set. 292 // Only one of mock_task_runner_ or message_loop_ will be set.
289 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 293 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
290 std::unique_ptr<base::MessageLoop> message_loop_; 294 std::unique_ptr<base::MessageLoop> message_loop_;
291 295
292 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; 296 scoped_refptr<SchedulerTqmDelegate> main_task_runner_;
293 std::unique_ptr<SchedulerHelper> scheduler_helper_; 297 std::unique_ptr<SchedulerHelper> scheduler_helper_;
294 std::unique_ptr<IdleHelperForTest> idle_helper_; 298 std::unique_ptr<IdleHelperForTest> idle_helper_;
295 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; 299 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
296 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; 300 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 EXPECT_TRUE(shutdown_task_run); 1077 EXPECT_TRUE(shutdown_task_run);
1074 EXPECT_EQ(0, run_count); 1078 EXPECT_EQ(0, run_count);
1075 1079
1076 // Shutdown immediately after idle period started should prevent the idle 1080 // Shutdown immediately after idle period started should prevent the idle
1077 // task from running. 1081 // task from running.
1078 idle_helper_->Shutdown(); 1082 idle_helper_->Shutdown();
1079 mock_task_runner_->RunUntilIdle(); 1083 mock_task_runner_->RunUntilIdle();
1080 EXPECT_EQ(0, run_count); 1084 EXPECT_EQ(0, run_count);
1081 } 1085 }
1082 1086
1087 TEST_F(IdleHelperTest, TestPostDelayedIdleTask) {
1088 int run_count = 0;
1089 base::TimeTicks expected_deadline =
1090 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300);
1091 base::TimeTicks deadline_in_task;
1092
1093 // Posting a delayed idle task should not post anything on the underlying
1094 // task queue until the delay is up.
1095 idle_task_runner_->PostDelayedIdleTask(
1096 FROM_HERE, base::TimeDelta::FromMilliseconds(200),
1097 base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1098 EXPECT_EQ(0u, idle_queue()->GetNumberOfPendingTasks());
1099
1100 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
1101
1102 // It shouldn't run until the delay is over even though we went idle.
1103 idle_helper_->StartIdlePeriod(
1104 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
1105 expected_deadline);
1106 EXPECT_EQ(0u, idle_queue()->GetNumberOfPendingTasks());
1107 RunUntilIdle();
1108 EXPECT_EQ(0, run_count);
1109
1110 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
1111 idle_helper_->StartIdlePeriod(
1112 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, clock_->NowTicks(),
1113 expected_deadline);
1114 EXPECT_EQ(1u, idle_queue()->GetNumberOfPendingTasks());
1115 RunUntilIdle();
1116
1117 EXPECT_EQ(1, run_count);
1118 EXPECT_EQ(expected_deadline, deadline_in_task);
1119 }
1120
1083 } // namespace scheduler 1121 } // namespace scheduler
1084 } // namespace blink 1122 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698