OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/test/fake_web_task_runner.h" | 5 #include "platform/scheduler/test/fake_web_task_runner.h" |
6 | 6 |
7 #include <deque> | 7 #include <deque> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/callback.h" | 10 #include "base/callback.h" |
10 #include "base/logging.h" | 11 #include "base/logging.h" |
11 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
12 #include "wtf/RefCounted.h" | 13 #include "wtf/RefCounted.h" |
13 | 14 |
14 namespace blink { | 15 namespace blink { |
15 namespace scheduler { | 16 namespace scheduler { |
16 | 17 |
17 class FakeWebTaskRunner::Data : public WTF::ThreadSafeRefCounted<Data> { | 18 class FakeWebTaskRunner::Data : public WTF::ThreadSafeRefCounted<Data> { |
(...skipping 21 matching lines...) Expand all Loading... |
39 | 40 |
40 friend ThreadSafeRefCounted<Data>; | 41 friend ThreadSafeRefCounted<Data>; |
41 DISALLOW_COPY_AND_ASSIGN(Data); | 42 DISALLOW_COPY_AND_ASSIGN(Data); |
42 }; | 43 }; |
43 | 44 |
44 class FakeWebTaskRunner::BaseTaskRunner : public base::SingleThreadTaskRunner { | 45 class FakeWebTaskRunner::BaseTaskRunner : public base::SingleThreadTaskRunner { |
45 public: | 46 public: |
46 explicit BaseTaskRunner(PassRefPtr<Data> data) : data_(std::move(data)) {} | 47 explicit BaseTaskRunner(PassRefPtr<Data> data) : data_(std::move(data)) {} |
47 | 48 |
48 bool PostDelayedTask(const tracked_objects::Location& from_here, | 49 bool PostDelayedTask(const tracked_objects::Location& from_here, |
49 const base::Closure& task, | 50 base::Closure task, |
50 base::TimeDelta delay) override { | 51 base::TimeDelta delay) override { |
51 data_->PostTask(task, delay); | 52 data_->PostTask(std::move(task), delay); |
52 return true; | 53 return true; |
53 } | 54 } |
54 | 55 |
55 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, | 56 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
56 const base::Closure& task, | 57 base::Closure task, |
57 base::TimeDelta delay) override { | 58 base::TimeDelta delay) override { |
58 data_->PostTask(task, delay); | 59 data_->PostTask(std::move(task), delay); |
59 return true; | 60 return true; |
60 } | 61 } |
61 | 62 |
62 bool RunsTasksOnCurrentThread() const { return true; } | 63 bool RunsTasksOnCurrentThread() const { return true; } |
63 | 64 |
64 private: | 65 private: |
65 RefPtr<Data> data_; | 66 RefPtr<Data> data_; |
66 }; | 67 }; |
67 | 68 |
68 FakeWebTaskRunner::FakeWebTaskRunner() | 69 FakeWebTaskRunner::FakeWebTaskRunner() |
69 : data_(adoptRef(new Data)), base_task_runner_(new BaseTaskRunner(data_)) {} | 70 : data_(adoptRef(new Data)), base_task_runner_(new BaseTaskRunner(data_)) {} |
70 | 71 |
71 FakeWebTaskRunner::FakeWebTaskRunner( | 72 FakeWebTaskRunner::FakeWebTaskRunner( |
72 PassRefPtr<Data> data, | 73 PassRefPtr<Data> data, |
73 scoped_refptr<BaseTaskRunner> base_task_runner) | 74 scoped_refptr<BaseTaskRunner> base_task_runner) |
74 : data_(std::move(data)), base_task_runner_(std::move(base_task_runner)) {} | 75 : data_(std::move(data)), base_task_runner_(std::move(base_task_runner)) {} |
75 | 76 |
76 FakeWebTaskRunner::~FakeWebTaskRunner() { | 77 FakeWebTaskRunner::~FakeWebTaskRunner() { |
77 } | 78 } |
78 | 79 |
79 void FakeWebTaskRunner::setTime(double new_time) { | 80 void FakeWebTaskRunner::setTime(double new_time) { |
80 data_->time_ = new_time; | 81 data_->time_ = new_time; |
81 } | 82 } |
82 | 83 |
83 void FakeWebTaskRunner::postDelayedTask(const WebTraceLocation&, | 84 void FakeWebTaskRunner::postDelayedTask(const WebTraceLocation&, |
84 const base::Closure& closure, | 85 base::Closure closure, |
85 double delay_ms) { | 86 double delay_ms) { |
86 data_->PostTask(closure, base::TimeDelta::FromMillisecondsD(delay_ms)); | 87 data_->PostTask(std::move(closure), |
| 88 base::TimeDelta::FromMillisecondsD(delay_ms)); |
87 } | 89 } |
88 | 90 |
89 bool FakeWebTaskRunner::runsTasksOnCurrentThread() { | 91 bool FakeWebTaskRunner::runsTasksOnCurrentThread() { |
90 return true; | 92 return true; |
91 } | 93 } |
92 | 94 |
93 double FakeWebTaskRunner::virtualTimeSeconds() const { | 95 double FakeWebTaskRunner::virtualTimeSeconds() const { |
94 return data_->time_; | 96 return data_->time_; |
95 } | 97 } |
96 | 98 |
97 double FakeWebTaskRunner::monotonicallyIncreasingVirtualTimeSeconds() const { | 99 double FakeWebTaskRunner::monotonicallyIncreasingVirtualTimeSeconds() const { |
98 return data_->time_; | 100 return data_->time_; |
99 } | 101 } |
100 | 102 |
101 SingleThreadTaskRunner* FakeWebTaskRunner::toSingleThreadTaskRunner() { | 103 SingleThreadTaskRunner* FakeWebTaskRunner::toSingleThreadTaskRunner() { |
102 return base_task_runner_.get(); | 104 return base_task_runner_.get(); |
103 } | 105 } |
104 | 106 |
105 void FakeWebTaskRunner::runUntilIdle() { | 107 void FakeWebTaskRunner::runUntilIdle() { |
106 while (!data_->task_queue_.empty()) { | 108 while (!data_->task_queue_.empty()) { |
107 // Move the task to run into a local variable in case it touches the | 109 // Move the task to run into a local variable in case it touches the |
108 // task queue by posting a new task. | 110 // task queue by posting a new task. |
109 base::Closure task = std::move(data_->task_queue_.front()).first; | 111 base::Closure task = std::move(data_->task_queue_.front()).first; |
110 data_->task_queue_.pop_front(); | 112 data_->task_queue_.pop_front(); |
111 task.Run(); | 113 std::move(task).Run(); |
112 } | 114 } |
113 } | 115 } |
114 | 116 |
115 void FakeWebTaskRunner::advanceTimeAndRun(double delta_seconds) { | 117 void FakeWebTaskRunner::advanceTimeAndRun(double delta_seconds) { |
116 data_->time_ += delta_seconds; | 118 data_->time_ += delta_seconds; |
117 for (auto it = data_->FindRunnableTask(); it != data_->task_queue_.end(); | 119 for (auto it = data_->FindRunnableTask(); it != data_->task_queue_.end(); |
118 it = data_->FindRunnableTask()) { | 120 it = data_->FindRunnableTask()) { |
119 base::Closure task = std::move(*it).first; | 121 base::Closure task = std::move(*it).first; |
120 data_->task_queue_.erase(it); | 122 data_->task_queue_.erase(it); |
121 task.Run(); | 123 task.Run(); |
122 } | 124 } |
123 } | 125 } |
124 | 126 |
125 std::deque<std::pair<base::Closure, double>> | 127 std::deque<std::pair<base::Closure, double>> |
126 FakeWebTaskRunner::takePendingTasksForTesting() { | 128 FakeWebTaskRunner::takePendingTasksForTesting() { |
127 return std::move(data_->task_queue_); | 129 return std::move(data_->task_queue_); |
128 } | 130 } |
129 | 131 |
130 } // namespace scheduler | 132 } // namespace scheduler |
131 } // namespace blink | 133 } // namespace blink |
OLD | NEW |