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

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

Issue 2726523002: Pass Callback to TaskRunner by value and consume it on invocation (1) (Closed)
Patch Set: erase Closure* 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 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698