• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 "net/quic/test_tools/test_task_runner.h"
6 
7 #include <algorithm>
8 
9 #include "net/quic/test_tools/mock_clock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace net {
13 namespace test {
14 
TestTaskRunner(MockClock * clock)15 TestTaskRunner::TestTaskRunner(MockClock* clock)
16     : clock_(clock) {
17 }
18 
~TestTaskRunner()19 TestTaskRunner::~TestTaskRunner() {
20 }
21 
PostDelayedTask(const tracked_objects::Location & from_here,const base::Closure & task,base::TimeDelta delay)22 bool TestTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
23                                      const base::Closure& task,
24                                      base::TimeDelta delay) {
25   EXPECT_GE(delay, base::TimeDelta());
26   tasks_.push_back(
27       PostedTask(from_here, task, clock_->NowInTicks(), delay,
28                  base::TestPendingTask::NESTABLE));
29   return false;
30 }
31 
RunsTasksOnCurrentThread() const32 bool TestTaskRunner::RunsTasksOnCurrentThread() const {
33   return true;
34 }
35 
GetPostedTasks() const36 const std::vector<PostedTask>& TestTaskRunner::GetPostedTasks() const {
37   return tasks_;
38 }
39 
RunNextTask()40 void TestTaskRunner::RunNextTask() {
41   // Find the next task to run, advance the time to the correct time
42   // and then run the task.
43   std::vector<PostedTask>::iterator next = FindNextTask();
44   DCHECK(next != tasks_.end());
45   clock_->AdvanceTime(QuicTime::Delta::FromMicroseconds(
46       (next->GetTimeToRun() - clock_->NowInTicks()).InMicroseconds()));
47   PostedTask task = *next;
48   tasks_.erase(next);
49   task.task.Run();
50 }
51 
52 namespace {
53 
54 struct ShouldRunBeforeLessThan {
operator ()net::test::__anon3c30ef240111::ShouldRunBeforeLessThan55   bool operator()(const PostedTask& task1, const PostedTask& task2) const {
56     return task1.ShouldRunBefore(task2);
57   }
58 };
59 
60 }  // namespace
61 
FindNextTask()62 std::vector<PostedTask>::iterator TestTaskRunner::FindNextTask() {
63   return std::min_element(
64       tasks_.begin(), tasks_.end(), ShouldRunBeforeLessThan());
65 }
66 
67 }  // namespace test
68 }  // namespace net
69