| 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 |