| Index: cc/test/ordered_simple_task_runner.cc
|
| diff --git a/cc/test/ordered_simple_task_runner.cc b/cc/test/ordered_simple_task_runner.cc
|
| deleted file mode 100644
|
| index 9fc22aded6d73a1d0bee912fe0fcf275bb3910b4..0000000000000000000000000000000000000000
|
| --- a/cc/test/ordered_simple_task_runner.cc
|
| +++ /dev/null
|
| @@ -1,338 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "cc/test/ordered_simple_task_runner.h"
|
| -
|
| -#include <limits>
|
| -#include <set>
|
| -#include <sstream>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/auto_reset.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/trace_event/trace_event.h"
|
| -#include "base/trace_event/trace_event_argument.h"
|
| -
|
| -#define TRACE_TASK(function, task) \
|
| - TRACE_EVENT_INSTANT1( \
|
| - "cc", function, TRACE_EVENT_SCOPE_THREAD, "task", task.AsValue());
|
| -
|
| -#define TRACE_TASK_RUN(function, tag, task)
|
| -
|
| -namespace cc {
|
| -
|
| -// TestOrderablePendingTask implementation
|
| -TestOrderablePendingTask::TestOrderablePendingTask()
|
| - : base::TestPendingTask(),
|
| - task_id_(TestOrderablePendingTask::task_id_counter++) {
|
| -}
|
| -
|
| -TestOrderablePendingTask::TestOrderablePendingTask(
|
| - const tracked_objects::Location& location,
|
| - const base::Closure& task,
|
| - base::TimeTicks post_time,
|
| - base::TimeDelta delay,
|
| - TestNestability nestability)
|
| - : base::TestPendingTask(location, task, post_time, delay, nestability),
|
| - task_id_(TestOrderablePendingTask::task_id_counter++) {
|
| -}
|
| -
|
| -size_t TestOrderablePendingTask::task_id_counter = 0;
|
| -
|
| -TestOrderablePendingTask::~TestOrderablePendingTask() {
|
| -}
|
| -
|
| -bool TestOrderablePendingTask::operator==(
|
| - const TestOrderablePendingTask& other) const {
|
| - return task_id_ == other.task_id_;
|
| -}
|
| -
|
| -bool TestOrderablePendingTask::operator<(
|
| - const TestOrderablePendingTask& other) const {
|
| - if (*this == other)
|
| - return false;
|
| -
|
| - if (GetTimeToRun() == other.GetTimeToRun()) {
|
| - return task_id_ < other.task_id_;
|
| - }
|
| - return ShouldRunBefore(other);
|
| -}
|
| -
|
| -scoped_refptr<base::trace_event::ConvertableToTraceFormat>
|
| -TestOrderablePendingTask::AsValue() const {
|
| - scoped_refptr<base::trace_event::TracedValue> state =
|
| - new base::trace_event::TracedValue();
|
| - AsValueInto(state.get());
|
| - return state;
|
| -}
|
| -
|
| -void TestOrderablePendingTask::AsValueInto(
|
| - base::trace_event::TracedValue* state) const {
|
| - state->SetInteger("id", task_id_);
|
| - state->SetInteger("run_at", GetTimeToRun().ToInternalValue());
|
| - state->SetString("posted_from", location.ToString());
|
| -}
|
| -
|
| -OrderedSimpleTaskRunner::OrderedSimpleTaskRunner()
|
| - : advance_now_(true),
|
| - now_src_(TestNowSource::Create(0)),
|
| - inside_run_tasks_until_(false) {
|
| -}
|
| -
|
| -OrderedSimpleTaskRunner::OrderedSimpleTaskRunner(
|
| - scoped_refptr<TestNowSource> now_src,
|
| - bool advance_now)
|
| - : advance_now_(advance_now),
|
| - now_src_(now_src),
|
| - max_tasks_(kAbsoluteMaxTasks),
|
| - inside_run_tasks_until_(false) {
|
| -}
|
| -
|
| -OrderedSimpleTaskRunner::~OrderedSimpleTaskRunner() {}
|
| -
|
| -// base::TestSimpleTaskRunner implementation
|
| -bool OrderedSimpleTaskRunner::PostDelayedTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - TestOrderablePendingTask pt(
|
| - from_here, task, now_src_->Now(), delay, base::TestPendingTask::NESTABLE);
|
| -
|
| - TRACE_TASK("OrderedSimpleTaskRunner::PostDelayedTask", pt);
|
| - pending_tasks_.insert(pt);
|
| - return true;
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::PostNonNestableDelayedTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - TestOrderablePendingTask pt(from_here,
|
| - task,
|
| - now_src_->Now(),
|
| - delay,
|
| - base::TestPendingTask::NON_NESTABLE);
|
| -
|
| - TRACE_TASK("OrderedSimpleTaskRunner::PostNonNestableDelayedTask", pt);
|
| - pending_tasks_.insert(pt);
|
| - return true;
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunsTasksOnCurrentThread() const {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - return true;
|
| -}
|
| -
|
| -size_t OrderedSimpleTaskRunner::NumPendingTasks() const {
|
| - return pending_tasks_.size();
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::HasPendingTasks() const {
|
| - return pending_tasks_.size() > 0;
|
| -}
|
| -
|
| -base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() {
|
| - if (pending_tasks_.size() <= 0) {
|
| - return TestNowSource::kAbsoluteMaxNow;
|
| - }
|
| -
|
| - return pending_tasks_.begin()->GetTimeToRun();
|
| -}
|
| -
|
| -base::TimeDelta OrderedSimpleTaskRunner::DelayToNextTaskTime() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - if (pending_tasks_.size() <= 0) {
|
| - return TestNowSource::kAbsoluteMaxNow - base::TimeTicks();
|
| - }
|
| -
|
| - base::TimeDelta delay = NextTaskTime() - now_src_->Now();
|
| - if (delay > base::TimeDelta())
|
| - return delay;
|
| - return base::TimeDelta();
|
| -}
|
| -
|
| -const size_t OrderedSimpleTaskRunner::kAbsoluteMaxTasks =
|
| - std::numeric_limits<size_t>::max();
|
| -
|
| -bool OrderedSimpleTaskRunner::RunTasksWhile(
|
| - base::Callback<bool(void)> condition) {
|
| - std::vector<base::Callback<bool(void)>> conditions(1);
|
| - conditions[0] = condition;
|
| - return RunTasksWhile(conditions);
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunTasksWhile(
|
| - const std::vector<base::Callback<bool(void)>>& conditions) {
|
| - TRACE_EVENT2("cc",
|
| - "OrderedSimpleTaskRunner::RunPendingTasks",
|
| - "this",
|
| - AsValue(),
|
| - "nested",
|
| - inside_run_tasks_until_);
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - if (inside_run_tasks_until_)
|
| - return true;
|
| -
|
| - base::AutoReset<bool> reset_inside_run_tasks_until_(&inside_run_tasks_until_,
|
| - true);
|
| -
|
| - // Make a copy so we can append some extra run checks.
|
| - std::vector<base::Callback<bool(void)>> modifiable_conditions(conditions);
|
| -
|
| - // Provide a timeout base on number of tasks run so this doesn't loop
|
| - // forever.
|
| - modifiable_conditions.push_back(TaskRunCountBelow(max_tasks_));
|
| -
|
| - // If to advance now or not
|
| - if (!advance_now_) {
|
| - modifiable_conditions.push_back(NowBefore(now_src_->Now()));
|
| - } else {
|
| - modifiable_conditions.push_back(AdvanceNow());
|
| - }
|
| -
|
| - while (pending_tasks_.size() > 0) {
|
| - // Check if we should continue to run pending tasks.
|
| - bool condition_success = true;
|
| - for (std::vector<base::Callback<bool(void)>>::iterator it =
|
| - modifiable_conditions.begin();
|
| - it != modifiable_conditions.end();
|
| - it++) {
|
| - condition_success = it->Run();
|
| - if (!condition_success)
|
| - break;
|
| - }
|
| -
|
| - // Conditions could modify the pending task length, so we need to recheck
|
| - // that there are tasks to run.
|
| - if (!condition_success || !HasPendingTasks()) {
|
| - break;
|
| - }
|
| -
|
| - std::set<TestOrderablePendingTask>::iterator task_to_run =
|
| - pending_tasks_.begin();
|
| - {
|
| - TRACE_EVENT1("cc",
|
| - "OrderedSimpleTaskRunner::RunPendingTasks running",
|
| - "task",
|
| - task_to_run->AsValue());
|
| - task_to_run->task.Run();
|
| - }
|
| -
|
| - pending_tasks_.erase(task_to_run);
|
| - }
|
| -
|
| - return HasPendingTasks();
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunPendingTasks() {
|
| - return RunTasksWhile(TaskExistedInitially());
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunUntilIdle() {
|
| - return RunTasksWhile(std::vector<base::Callback<bool(void)>>());
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunUntilTime(base::TimeTicks time) {
|
| - // If we are not auto advancing, force now forward to the time.
|
| - if (!advance_now_ && now_src_->Now() < time)
|
| - now_src_->SetNow(time);
|
| -
|
| - // Run tasks
|
| - bool result = RunTasksWhile(NowBefore(time));
|
| -
|
| - // If the next task is after the stopping time and auto-advancing now, then
|
| - // force time to be the stopping time.
|
| - if (!result && advance_now_ && now_src_->Now() < time) {
|
| - now_src_->SetNow(time);
|
| - }
|
| -
|
| - return result;
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::RunForPeriod(base::TimeDelta period) {
|
| - return RunUntilTime(now_src_->Now() + period);
|
| -}
|
| -
|
| -// base::trace_event tracing functionality
|
| -scoped_refptr<base::trace_event::ConvertableToTraceFormat>
|
| -OrderedSimpleTaskRunner::AsValue() const {
|
| - scoped_refptr<base::trace_event::TracedValue> state =
|
| - new base::trace_event::TracedValue();
|
| - AsValueInto(state.get());
|
| - return state;
|
| -}
|
| -
|
| -void OrderedSimpleTaskRunner::AsValueInto(
|
| - base::trace_event::TracedValue* state) const {
|
| - state->SetInteger("pending_tasks", pending_tasks_.size());
|
| -
|
| - state->BeginArray("tasks");
|
| - for (std::set<TestOrderablePendingTask>::const_iterator it =
|
| - pending_tasks_.begin();
|
| - it != pending_tasks_.end();
|
| - ++it) {
|
| - state->BeginDictionary();
|
| - it->AsValueInto(state);
|
| - state->EndDictionary();
|
| - }
|
| - state->EndArray();
|
| -
|
| - state->BeginDictionary("now_src");
|
| - now_src_->AsValueInto(state);
|
| - state->EndDictionary();
|
| -}
|
| -
|
| -base::Callback<bool(void)> OrderedSimpleTaskRunner::TaskRunCountBelow(
|
| - size_t max_tasks) {
|
| - return base::Bind(&OrderedSimpleTaskRunner::TaskRunCountBelowCallback,
|
| - max_tasks,
|
| - base::Owned(new size_t(0)));
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::TaskRunCountBelowCallback(size_t max_tasks,
|
| - size_t* tasks_run) {
|
| - return (*tasks_run)++ < max_tasks;
|
| -}
|
| -
|
| -base::Callback<bool(void)> OrderedSimpleTaskRunner::TaskExistedInitially() {
|
| - // base::Bind takes a copy of pending_tasks_
|
| - return base::Bind(&OrderedSimpleTaskRunner::TaskExistedInitiallyCallback,
|
| - base::Unretained(this),
|
| - pending_tasks_);
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::TaskExistedInitiallyCallback(
|
| - const std::set<TestOrderablePendingTask>& existing_tasks) {
|
| - return existing_tasks.find(*pending_tasks_.begin()) != existing_tasks.end();
|
| -}
|
| -
|
| -base::Callback<bool(void)> OrderedSimpleTaskRunner::NowBefore(
|
| - base::TimeTicks stop_at) {
|
| - return base::Bind(&OrderedSimpleTaskRunner::NowBeforeCallback,
|
| - base::Unretained(this),
|
| - stop_at);
|
| -}
|
| -bool OrderedSimpleTaskRunner::NowBeforeCallback(base::TimeTicks stop_at) {
|
| - return NextTaskTime() <= stop_at;
|
| -}
|
| -
|
| -base::Callback<bool(void)> OrderedSimpleTaskRunner::AdvanceNow() {
|
| - return base::Bind(&OrderedSimpleTaskRunner::AdvanceNowCallback,
|
| - base::Unretained(this));
|
| -}
|
| -
|
| -bool OrderedSimpleTaskRunner::AdvanceNowCallback() {
|
| - base::TimeTicks next_task_time = NextTaskTime();
|
| - if (now_src_->Now() < next_task_time) {
|
| - now_src_->SetNow(next_task_time);
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace cc
|
|
|