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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc

Issue 2778123003: [scheduler] Add WakeupBudgetPool. (Closed)
Patch Set: Addressed comments Created 3 years, 7 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/renderer/task_queue_throttler.h" 5 #include "platform/scheduler/renderer/task_queue_throttler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 base::TimeDelta::FromMilliseconds(1200.0)); 194 base::TimeDelta::FromMilliseconds(1200.0));
195 195
196 timer_queue_->PostDelayedTask(FROM_HERE, 196 timer_queue_->PostDelayedTask(FROM_HERE,
197 base::Bind(&TestTask, &run_times, clock_.get()), 197 base::Bind(&TestTask, &run_times, clock_.get()),
198 base::TimeDelta::FromMilliseconds(8300.0)); 198 base::TimeDelta::FromMilliseconds(8300.0));
199 199
200 task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get()); 200 task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get());
201 201
202 mock_task_runner_->RunUntilIdle(); 202 mock_task_runner_->RunUntilIdle();
203 203
204 // Times are aligned to a multipple of 1000 milliseconds. 204 // Times are aligned to a multiple of 1000 milliseconds.
205 EXPECT_THAT( 205 EXPECT_THAT(
206 run_times, 206 run_times,
207 ElementsAre( 207 ElementsAre(
208 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000.0), 208 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000.0),
209 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000.0), 209 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000.0),
210 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2000.0), 210 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2000.0),
211 base::TimeTicks() + base::TimeDelta::FromMilliseconds(9000.0))); 211 base::TimeTicks() + base::TimeDelta::FromMilliseconds(9000.0)));
212 } 212 }
213 213
214 TEST_F(TaskQueueThrottlerTest, TimerAlignment_Unthrottled) { 214 TEST_F(TaskQueueThrottlerTest, TimerAlignment_Unthrottled) {
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 1048
1049 EXPECT_THAT( 1049 EXPECT_THAT(
1050 run_times, 1050 run_times,
1051 ElementsAre( 1051 ElementsAre(
1052 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000), 1052 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000),
1053 base::TimeTicks() + base::TimeDelta::FromMilliseconds(3000), 1053 base::TimeTicks() + base::TimeDelta::FromMilliseconds(3000),
1054 base::TimeTicks() + base::TimeDelta::FromMilliseconds(6000), 1054 base::TimeTicks() + base::TimeDelta::FromMilliseconds(6000),
1055 base::TimeTicks() + base::TimeDelta::FromMilliseconds(26000))); 1055 base::TimeTicks() + base::TimeDelta::FromMilliseconds(26000)));
1056 } 1056 }
1057 1057
1058 namespace {
1059 void RunChainedTask(size_t run_times_count,
1060 scoped_refptr<TaskQueue> queue,
1061 base::SimpleTestTickClock* clock,
1062 base::TimeDelta task_duration,
1063 std::vector<base::TimeTicks>* run_times) {
1064 run_times->push_back(clock->NowTicks());
1065 clock->Advance(task_duration);
1066
1067 if (run_times_count <= 1)
1068 return;
1069
1070 queue->PostTask(FROM_HERE,
1071 base::Bind(&RunChainedTask, run_times_count - 1, queue, clock,
1072 task_duration, run_times));
1073 }
1074
1075 void RunChainedDelayedTask(size_t run_times_count,
1076 scoped_refptr<TaskQueue> queue,
1077 base::SimpleTestTickClock* clock,
1078 base::TimeDelta task_duration,
1079 std::vector<base::TimeTicks>* run_times,
1080 base::TimeDelta delay) {
1081 run_times->push_back(clock->NowTicks());
1082 clock->Advance(task_duration);
1083
1084 if (run_times_count <= 1)
1085 return;
1086
1087 queue->PostDelayedTask(
1088 FROM_HERE,
1089 base::Bind(&RunChainedDelayedTask, run_times_count - 1, queue, clock,
1090 task_duration, run_times, delay),
1091 delay);
1092 }
1093 } // namespace
1094
1095 TEST_F(TaskQueueThrottlerTest,
1096 WakeUpBasedThrottling_ChainedTasks_Instantaneous) {
1097 scheduler_->GetWakeUpBudgetPoolForTesting()->SetWakeUpDuration(
1098 base::TimeDelta::FromMilliseconds(10));
1099 std::vector<base::TimeTicks> run_times;
1100
1101 task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get());
1102
1103 timer_queue_->PostDelayedTask(
1104 FROM_HERE,
1105 base::Bind(&RunChainedTask, 10, timer_queue_, clock_.get(),
1106 base::TimeDelta(), &run_times),
1107 base::TimeDelta::FromMilliseconds(100));
1108
1109 mock_task_runner_->RunUntilIdle();
1110
1111 EXPECT_THAT(run_times,
1112 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1113 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1114 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1115 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1116 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1117 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1118 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1119 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1120 base::TimeTicks() + base::TimeDelta::FromSeconds(1),
1121 base::TimeTicks() + base::TimeDelta::FromSeconds(1)));
1122 }
1123
1124 TEST_F(TaskQueueThrottlerTest, WakeUpBasedThrottling_ImmediateTasks_Fast) {
1125 scheduler_->GetWakeUpBudgetPoolForTesting()->SetWakeUpDuration(
1126 base::TimeDelta::FromMilliseconds(10));
1127 std::vector<base::TimeTicks> run_times;
1128
1129 task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get());
1130
1131 timer_queue_->PostDelayedTask(
1132 FROM_HERE,
1133 base::Bind(&RunChainedTask, 10, timer_queue_, clock_.get(),
1134 base::TimeDelta::FromMilliseconds(3), &run_times),
1135 base::TimeDelta::FromMilliseconds(100));
1136
1137 mock_task_runner_->RunUntilIdle();
1138
1139 // TODO(altimin): Add fence mechanism to block immediate tasks.
1140 EXPECT_THAT(
1141 run_times,
1142 ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000),
1143 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1003),
1144 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1006),
1145 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1009),
1146 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1012),
1147 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2000),
1148 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2003),
1149 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2006),
1150 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2009),
1151 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2012)));
1152 }
1153
1154 TEST_F(TaskQueueThrottlerTest, WakeUpBasedThrottling_DelayedTasks) {
1155 scheduler_->GetWakeUpBudgetPoolForTesting()->SetWakeUpDuration(
1156 base::TimeDelta::FromMilliseconds(10));
1157 std::vector<base::TimeTicks> run_times;
1158
1159 task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get());
1160
1161 timer_queue_->PostDelayedTask(
1162 FROM_HERE,
1163 base::Bind(&RunChainedDelayedTask, 10, timer_queue_, clock_.get(),
1164 base::TimeDelta(), &run_times,
1165 base::TimeDelta::FromMilliseconds(3)),
1166 base::TimeDelta::FromMilliseconds(100));
1167
1168 mock_task_runner_->RunUntilIdle();
1169
1170 EXPECT_THAT(
1171 run_times,
1172 ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000),
1173 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1003),
1174 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1006),
1175 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1009),
1176 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2000),
1177 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2003),
1178 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2006),
1179 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2009),
1180 base::TimeTicks() + base::TimeDelta::FromMilliseconds(3000),
1181 base::TimeTicks() + base::TimeDelta::FromMilliseconds(3003)));
1182 }
1183
1058 } // namespace scheduler 1184 } // namespace scheduler
1059 } // namespace blink 1185 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698