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

Unified 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: Apply review comments Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc b/third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc
index c9f225cc904c38d4bf2192c5154843a6d512783a..2358c40f098143fa80ad12185dd7f5539849ca51 100644
--- a/third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc
+++ b/third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.cc
@@ -18,8 +18,20 @@ class FakeWebTaskRunner::Data : public WTF::ThreadSafeRefCounted<Data> {
public:
Data() : time_(0.0) {}
+ void PostTask(const base::Closure& task, base::TimeDelta delay) {
+ task_queue_.push_back(std::make_pair(task, time_ + delay.InSecondsF()));
+ }
+
+ using QueueItem = std::pair<base::Closure, double>;
+ std::deque<QueueItem>::iterator FindRunnableTask() {
+ // TODO(tkent): This should return an item which has the minimum |second|.
+ return std::find_if(
+ task_queue_.begin(), task_queue_.end(),
+ [&](const QueueItem& item) { return item.second <= time_; });
+ }
+
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
- std::deque<base::Closure> task_queue_;
+ std::deque<QueueItem> task_queue_;
double time_;
private:
@@ -36,14 +48,14 @@ class FakeWebTaskRunner::BaseTaskRunner : public base::SingleThreadTaskRunner {
bool PostDelayedTask(const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override {
- data_->task_queue_.push_back(task);
+ data_->PostTask(task, delay);
return true;
}
bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override {
- data_->task_queue_.push_back(task);
+ data_->PostTask(task, delay);
return true;
}
@@ -70,8 +82,8 @@ void FakeWebTaskRunner::setTime(double new_time) {
void FakeWebTaskRunner::postDelayedTask(const WebTraceLocation&,
const base::Closure& closure,
- double) {
- data_->task_queue_.push_back(closure);
+ double delay_ms) {
+ data_->PostTask(closure, base::TimeDelta::FromMillisecondsD(delay_ms));
}
bool FakeWebTaskRunner::runsTasksOnCurrentThread() {
@@ -94,13 +106,24 @@ void FakeWebTaskRunner::runUntilIdle() {
while (!data_->task_queue_.empty()) {
// Move the task to run into a local variable in case it touches the
// task queue by posting a new task.
- base::Closure task = std::move(data_->task_queue_.front());
+ base::Closure task = std::move(data_->task_queue_.front()).first;
data_->task_queue_.pop_front();
task.Run();
}
}
-std::deque<base::Closure> FakeWebTaskRunner::takePendingTasksForTesting() {
+void FakeWebTaskRunner::advanceTimeAndRun(double delta_seconds) {
+ data_->time_ += delta_seconds;
+ for (auto it = data_->FindRunnableTask(); it != data_->task_queue_.end();
+ it = data_->FindRunnableTask()) {
+ base::Closure task = std::move(*it).first;
+ data_->task_queue_.erase(it);
+ task.Run();
+ }
+}
+
+std::deque<std::pair<base::Closure, double>>
+FakeWebTaskRunner::takePendingTasksForTesting() {
return std::move(data_->task_queue_);
}
« no previous file with comments | « third_party/WebKit/Source/platform/scheduler/test/fake_web_task_runner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698