Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "media/cast/test/fake_task_runner.h"
      6 
      7 #include "base/time/tick_clock.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 namespace media {
     11 namespace cast {
     12 namespace test {
     13 
     14 FakeTaskRunner::FakeTaskRunner(base::SimpleTestTickClock* clock)
     15     : clock_(clock) {
     16 }
     17 
     18 FakeTaskRunner::~FakeTaskRunner() {}
     19 
     20 bool FakeTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
     21                                      const base::Closure& task,
     22                                      base::TimeDelta delay) {
     23   EXPECT_GE(delay, base::TimeDelta());
     24   PostedTask posed_task(from_here, task, clock_->NowTicks(), delay,
     25                         base::TestPendingTask::NESTABLE);
     26 
     27   tasks_.insert(std::make_pair(posed_task.GetTimeToRun(), posed_task));
     28   return false;
     29 }
     30 
     31 bool FakeTaskRunner::RunsTasksOnCurrentThread() const {
     32   return true;
     33 }
     34 
     35 void FakeTaskRunner::RunTasks() {
     36   for (;;) {
     37     // Run all tasks equal or older than current time.
     38     std::multimap<base::TimeTicks, PostedTask>::iterator it = tasks_.begin();
     39     if (it == tasks_.end()) return;  // No more tasks.
     40 
     41     PostedTask task = it->second;
     42     if (clock_->NowTicks() < task.GetTimeToRun()) return;
     43 
     44     tasks_.erase(it);
     45     task.task.Run();
     46   }
     47 }
     48 
     49 }  // namespace test
     50 }  // namespace cast
     51 }  // namespace media
     52