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

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

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

Powered by Google App Engine
This is Rietveld 408576698