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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc

Issue 2637843002: Migrate base::TaskRunner from Closure to OnceClosure (Closed)
Patch Set: rebase Created 3 years, 8 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 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 #include <utility>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "wtf/RefCounted.h" 13 #include "wtf/RefCounted.h"
14 14
15 namespace blink { 15 namespace blink {
16 namespace scheduler { 16 namespace scheduler {
17 17
18 class FakeWebTaskRunner::Data : public WTF::ThreadSafeRefCounted<Data> { 18 class FakeWebTaskRunner::Data : public WTF::ThreadSafeRefCounted<Data> {
19 public: 19 public:
20 Data() : time_(0.0) {} 20 Data() : time_(0.0) {}
21 21
22 void PostTask(const base::Closure& task, base::TimeDelta delay) { 22 void PostTask(base::OnceClosure task, base::TimeDelta delay) {
23 task_queue_.push_back(std::make_pair(task, time_ + delay.InSecondsF())); 23 task_queue_.push_back(
24 std::make_pair(std::move(task), time_ + delay.InSecondsF()));
24 } 25 }
25 26
26 using QueueItem = std::pair<base::Closure, double>; 27 using QueueItem = std::pair<base::OnceClosure, double>;
27 std::deque<QueueItem>::iterator FindRunnableTask() { 28 std::deque<QueueItem>::iterator FindRunnableTask() {
28 // TODO(tkent): This should return an item which has the minimum |second|. 29 // TODO(tkent): This should return an item which has the minimum |second|.
29 return std::find_if( 30 return std::find_if(
30 task_queue_.begin(), task_queue_.end(), 31 task_queue_.begin(), task_queue_.end(),
31 [&](const QueueItem& item) { return item.second <= time_; }); 32 [&](const QueueItem& item) { return item.second <= time_; });
32 } 33 }
33 34
34 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 35 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
35 std::deque<QueueItem> task_queue_; 36 std::deque<QueueItem> task_queue_;
36 double time_; 37 double time_;
37 38
38 private: 39 private:
39 ~Data() {} 40 ~Data() {}
40 41
41 friend ThreadSafeRefCounted<Data>; 42 friend ThreadSafeRefCounted<Data>;
42 DISALLOW_COPY_AND_ASSIGN(Data); 43 DISALLOW_COPY_AND_ASSIGN(Data);
43 }; 44 };
44 45
45 class FakeWebTaskRunner::BaseTaskRunner : public base::SingleThreadTaskRunner { 46 class FakeWebTaskRunner::BaseTaskRunner : public base::SingleThreadTaskRunner {
46 public: 47 public:
47 explicit BaseTaskRunner(PassRefPtr<Data> data) : data_(std::move(data)) {} 48 explicit BaseTaskRunner(PassRefPtr<Data> data) : data_(std::move(data)) {}
48 49
49 bool PostDelayedTask(const tracked_objects::Location& from_here, 50 bool PostDelayedTask(const tracked_objects::Location& from_here,
50 base::Closure task, 51 base::OnceClosure task,
51 base::TimeDelta delay) override { 52 base::TimeDelta delay) override {
52 data_->PostTask(std::move(task), delay); 53 data_->PostTask(std::move(task), delay);
53 return true; 54 return true;
54 } 55 }
55 56
56 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, 57 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
57 base::Closure task, 58 base::OnceClosure task,
58 base::TimeDelta delay) override { 59 base::TimeDelta delay) override {
59 data_->PostTask(std::move(task), delay); 60 data_->PostTask(std::move(task), delay);
60 return true; 61 return true;
61 } 62 }
62 63
63 bool RunsTasksOnCurrentThread() const { return true; } 64 bool RunsTasksOnCurrentThread() const { return true; }
64 65
65 private: 66 private:
66 RefPtr<Data> data_; 67 RefPtr<Data> data_;
67 }; 68 };
68 69
69 FakeWebTaskRunner::FakeWebTaskRunner() 70 FakeWebTaskRunner::FakeWebTaskRunner()
70 : data_(adoptRef(new Data)), base_task_runner_(new BaseTaskRunner(data_)) {} 71 : data_(adoptRef(new Data)), base_task_runner_(new BaseTaskRunner(data_)) {}
71 72
72 FakeWebTaskRunner::FakeWebTaskRunner( 73 FakeWebTaskRunner::FakeWebTaskRunner(
73 PassRefPtr<Data> data, 74 PassRefPtr<Data> data,
74 scoped_refptr<BaseTaskRunner> base_task_runner) 75 scoped_refptr<BaseTaskRunner> base_task_runner)
75 : data_(std::move(data)), base_task_runner_(std::move(base_task_runner)) {} 76 : data_(std::move(data)), base_task_runner_(std::move(base_task_runner)) {}
76 77
77 FakeWebTaskRunner::~FakeWebTaskRunner() { 78 FakeWebTaskRunner::~FakeWebTaskRunner() {
78 } 79 }
79 80
80 void FakeWebTaskRunner::setTime(double new_time) { 81 void FakeWebTaskRunner::setTime(double new_time) {
81 data_->time_ = new_time; 82 data_->time_ = new_time;
82 } 83 }
83 84
84 void FakeWebTaskRunner::postDelayedTask(const WebTraceLocation&, 85 void FakeWebTaskRunner::postDelayedTask(const WebTraceLocation&,
85 base::Closure closure, 86 base::OnceClosure closure,
86 double delay_ms) { 87 double delay_ms) {
87 data_->PostTask(std::move(closure), 88 data_->PostTask(std::move(closure),
88 base::TimeDelta::FromMillisecondsD(delay_ms)); 89 base::TimeDelta::FromMillisecondsD(delay_ms));
89 } 90 }
90 91
91 bool FakeWebTaskRunner::runsTasksOnCurrentThread() { 92 bool FakeWebTaskRunner::runsTasksOnCurrentThread() {
92 return true; 93 return true;
93 } 94 }
94 95
95 double FakeWebTaskRunner::virtualTimeSeconds() const { 96 double FakeWebTaskRunner::virtualTimeSeconds() const {
96 return data_->time_; 97 return data_->time_;
97 } 98 }
98 99
99 double FakeWebTaskRunner::monotonicallyIncreasingVirtualTimeSeconds() const { 100 double FakeWebTaskRunner::monotonicallyIncreasingVirtualTimeSeconds() const {
100 return data_->time_; 101 return data_->time_;
101 } 102 }
102 103
103 SingleThreadTaskRunner* FakeWebTaskRunner::toSingleThreadTaskRunner() { 104 SingleThreadTaskRunner* FakeWebTaskRunner::toSingleThreadTaskRunner() {
104 return base_task_runner_.get(); 105 return base_task_runner_.get();
105 } 106 }
106 107
107 void FakeWebTaskRunner::runUntilIdle() { 108 void FakeWebTaskRunner::runUntilIdle() {
108 while (!data_->task_queue_.empty()) { 109 while (!data_->task_queue_.empty()) {
109 // Move the task to run into a local variable in case it touches the 110 // Move the task to run into a local variable in case it touches the
110 // task queue by posting a new task. 111 // task queue by posting a new task.
111 base::Closure task = std::move(data_->task_queue_.front()).first; 112 base::OnceClosure task = std::move(data_->task_queue_.front()).first;
112 data_->task_queue_.pop_front(); 113 data_->task_queue_.pop_front();
113 std::move(task).Run(); 114 std::move(task).Run();
114 } 115 }
115 } 116 }
116 117
117 void FakeWebTaskRunner::advanceTimeAndRun(double delta_seconds) { 118 void FakeWebTaskRunner::advanceTimeAndRun(double delta_seconds) {
118 data_->time_ += delta_seconds; 119 data_->time_ += delta_seconds;
119 for (auto it = data_->FindRunnableTask(); it != data_->task_queue_.end(); 120 for (auto it = data_->FindRunnableTask(); it != data_->task_queue_.end();
120 it = data_->FindRunnableTask()) { 121 it = data_->FindRunnableTask()) {
121 base::Closure task = std::move(*it).first; 122 base::OnceClosure task = std::move(*it).first;
122 data_->task_queue_.erase(it); 123 data_->task_queue_.erase(it);
123 task.Run(); 124 std::move(task).Run();
124 } 125 }
125 } 126 }
126 127
127 std::deque<std::pair<base::Closure, double>> 128 std::deque<std::pair<base::OnceClosure, double>>
128 FakeWebTaskRunner::takePendingTasksForTesting() { 129 FakeWebTaskRunner::takePendingTasksForTesting() {
129 return std::move(data_->task_queue_); 130 return std::move(data_->task_queue_);
130 } 131 }
131 132
132 } // namespace scheduler 133 } // namespace scheduler
133 } // namespace blink 134 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698