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

Side by Side Diff: Source/platform/scheduler/SchedulerTest.cpp

Issue 595023002: Implement idle task scheduling. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix whitespace Created 6 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "config.h" 5 #include "config.h"
6 #include "platform/scheduler/Scheduler.h" 6 #include "platform/scheduler/Scheduler.h"
7 7
8 #include "platform/TestingPlatformSupport.h" 8 #include "platform/TestingPlatformSupport.h"
9 #include "platform/TraceLocation.h" 9 #include "platform/TraceLocation.h"
10 #include "public/platform/Platform.h" 10 #include "public/platform/Platform.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 void orderedTestTask(int value, int* result) 232 void orderedTestTask(int value, int* result)
233 { 233 {
234 *result = (*result << 4) | value; 234 *result = (*result << 4) | value;
235 } 235 }
236 236
237 void unorderedTestTask(int value, int* result) 237 void unorderedTestTask(int value, int* result)
238 { 238 {
239 *result += value; 239 *result += value;
240 } 240 }
241 241
242 void idleTestTask(int value, int* result, double allottedTime) 242 void idleTestTask(bool* taskRun, double expectedDeadline, double deadlineSeconds )
243 { 243 {
244 *result += value; 244 EXPECT_EQ(false, *taskRun);
245 EXPECT_EQ(expectedDeadline, deadlineSeconds);
246 *taskRun = true;
245 } 247 }
246 248
247 TEST_F(SchedulerTest, TestPostTask) 249 TEST_F(SchedulerTest, TestPostTask)
248 { 250 {
249 int result = 0; 251 int result = 0;
250 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 1, &result)); 252 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 1, &result));
251 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 2, &result)); 253 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 2, &result));
252 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 3, &result)); 254 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 3, &result));
253 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 4, &result)); 255 m_scheduler->postTask(FROM_HERE, WTF::bind(&orderedTestTask, 4, &result));
254 runPendingTasks(); 256 runPendingTasks();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 288
287 m_scheduler->stopSharedTimer(); 289 m_scheduler->stopSharedTimer();
288 EXPECT_FALSE(m_platformSupport.sharedTimerRunning()); 290 EXPECT_FALSE(m_platformSupport.sharedTimerRunning());
289 291
290 m_scheduler->setSharedTimerFiredFunction(nullptr); 292 m_scheduler->setSharedTimerFiredFunction(nullptr);
291 EXPECT_FALSE(m_platformSupport.sharedTimerRunning()); 293 EXPECT_FALSE(m_platformSupport.sharedTimerRunning());
292 } 294 }
293 295
294 TEST_F(SchedulerTest, TestIdleTask) 296 TEST_F(SchedulerTest, TestIdleTask)
295 { 297 {
296 // TODO: Check task allottedTime when implemented in the scheduler. 298 bool taskRun = false;
297 int result = 0; 299 double firstDeadline = 1.1;
298 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, 1, &re sult)); 300 double secondDeadline = 2.3;
299 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, 1, &re sult)); 301 m_platformSupport.setMonotonicTimeForTest(0.1);
300 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, 1, &re sult)); 302
301 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, 1, &re sult)); 303 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, &taskR un, secondDeadline));
304
302 runPendingTasks(); 305 runPendingTasks();
303 EXPECT_EQ(4, result); 306 EXPECT_FALSE(taskRun); // Shouldn't run yet as no willBeginFrame.
307
308 m_scheduler->willBeginFrame(firstDeadline);
309 runPendingTasks();
310 EXPECT_FALSE(taskRun); // Shouldn't run yet as no didCommitFrameToCompositor .
311
312 m_platformSupport.setMonotonicTimeForTest(firstDeadline + 0.1);
313 m_scheduler->didCommitFrameToCompositor();
314 runPendingTasks();
315 EXPECT_FALSE(taskRun); // We missed the deadline.
316
317 m_scheduler->willBeginFrame(secondDeadline);
318 m_platformSupport.setMonotonicTimeForTest(secondDeadline - 0.1);
319 m_scheduler->didCommitFrameToCompositor();
320 runPendingTasks();
321 EXPECT_TRUE(taskRun);
304 } 322 }
305 323
306 TEST_F(SchedulerTest, TestTaskPrioritization_normalPolicy) 324 TEST_F(SchedulerTest, TestTaskPrioritization_normalPolicy)
307 { 325 {
308 m_scheduler->postTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVector, t his, std::string("L1"))); 326 m_scheduler->postTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVector, t his, std::string("L1")));
309 m_scheduler->postTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVector, t his, std::string("L2"))); 327 m_scheduler->postTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVector, t his, std::string("L2")));
310 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVect or, this, std::string("I1"))); 328 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVect or, this, std::string("I1")));
311 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&SchedulerTest::appendT oVector, this, std::string("C1"))); 329 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&SchedulerTest::appendT oVector, this, std::string("C1")));
312 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVect or, this, std::string("I2"))); 330 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&SchedulerTest::appendToVect or, this, std::string("I2")));
313 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&SchedulerTest::appendT oVector, this, std::string("C2"))); 331 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&SchedulerTest::appendT oVector, this, std::string("C2")));
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 m_platformSupport.setMonotonicTimeForTest(1000.5); 564 m_platformSupport.setMonotonicTimeForTest(1000.5);
547 runPendingTasks(); 565 runPendingTasks();
548 566
549 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); 567 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork());
550 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&dummyTask)); 568 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&dummyTask));
551 569
552 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); 570 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork());
553 } 571 }
554 572
555 } // namespace 573 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698