Commit 02991b92 authored by Yuta Kitamura's avatar Yuta Kitamura Committed by Commit Bot

Remove WebTaskRunner::MonotonicallyIncreasingVirtualTimeSeconds().

This patch removes a method from WebTaskRunner. At this point, WebTask-
Runner is functionally identical to base::SingleThreadTaskRunner, and
we can start working on the actual removal of WebTaskRunner.

WebViewSchedulerImplTest is also modified so it doesn't depend on the
removed function.

Bug: 794845
Change-Id: I2945c890e7e957f7187103f46f71a314c77c90fb
Reviewed-on: https://chromium-review.googlesource.com/888378Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Commit-Queue: Yuta Kitamura <yutak@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532229}
parent 79379251
...@@ -70,12 +70,6 @@ class BLINK_PLATFORM_EXPORT WebTaskRunner ...@@ -70,12 +70,6 @@ class BLINK_PLATFORM_EXPORT WebTaskRunner
base::OnceClosure, base::OnceClosure,
base::TimeDelta) = 0; base::TimeDelta) = 0;
// Returns a microsecond resolution platform dependant time source.
// This may represent either the real time, or a virtual time depending on
// whether or not the WebTaskRunner is associated with a virtual time domain
// or a real time domain.
virtual double MonotonicallyIncreasingVirtualTimeSeconds() const = 0;
// Helpers for posting bound functions as tasks. // Helpers for posting bound functions as tasks.
// For same-thread posting. Must be called from the associated WebThread. // For same-thread posting. Must be called from the associated WebThread.
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/location.h" #include "base/location.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "platform/scheduler/base/task_queue.h" #include "platform/scheduler/base/task_queue.h"
#include "platform/scheduler/base/time_domain.h"
namespace blink { namespace blink {
namespace scheduler { namespace scheduler {
...@@ -26,26 +25,12 @@ bool WebTaskRunnerImpl::RunsTasksInCurrentSequence() const { ...@@ -26,26 +25,12 @@ bool WebTaskRunnerImpl::RunsTasksInCurrentSequence() const {
return task_queue_->RunsTasksInCurrentSequence(); return task_queue_->RunsTasksInCurrentSequence();
} }
double WebTaskRunnerImpl::MonotonicallyIncreasingVirtualTimeSeconds() const {
return Now().ToInternalValue() /
static_cast<double>(base::Time::kMicrosecondsPerSecond);
}
WebTaskRunnerImpl::WebTaskRunnerImpl(scoped_refptr<TaskQueue> task_queue, WebTaskRunnerImpl::WebTaskRunnerImpl(scoped_refptr<TaskQueue> task_queue,
base::Optional<TaskType> task_type) base::Optional<TaskType> task_type)
: task_queue_(std::move(task_queue)), task_type_(task_type) {} : task_queue_(std::move(task_queue)), task_type_(task_type) {}
WebTaskRunnerImpl::~WebTaskRunnerImpl() = default; WebTaskRunnerImpl::~WebTaskRunnerImpl() = default;
base::TimeTicks WebTaskRunnerImpl::Now() const {
TimeDomain* time_domain = task_queue_->GetTimeDomain();
// It's possible task_queue_ has been Unregistered which can lead to a null
// TimeDomain. If that happens just return the current real time.
if (!time_domain)
return base::TimeTicks::Now();
return time_domain->Now();
}
bool WebTaskRunnerImpl::PostDelayedTask(const base::Location& location, bool WebTaskRunnerImpl::PostDelayedTask(const base::Location& location,
base::OnceClosure task, base::OnceClosure task,
base::TimeDelta delay) { base::TimeDelta delay) {
......
...@@ -29,9 +29,6 @@ class PLATFORM_EXPORT WebTaskRunnerImpl : public WebTaskRunner { ...@@ -29,9 +29,6 @@ class PLATFORM_EXPORT WebTaskRunnerImpl : public WebTaskRunner {
// base::SingleThreadTaskRunner implementation: // base::SingleThreadTaskRunner implementation:
bool RunsTasksInCurrentSequence() const override; bool RunsTasksInCurrentSequence() const override;
// WebTaskRunner implementation:
double MonotonicallyIncreasingVirtualTimeSeconds() const override;
TaskQueue* GetTaskQueue() const { return task_queue_.get(); } TaskQueue* GetTaskQueue() const { return task_queue_.get(); }
protected: protected:
...@@ -47,8 +44,6 @@ class PLATFORM_EXPORT WebTaskRunnerImpl : public WebTaskRunner { ...@@ -47,8 +44,6 @@ class PLATFORM_EXPORT WebTaskRunnerImpl : public WebTaskRunner {
base::Optional<TaskType> task_type); base::Optional<TaskType> task_type);
~WebTaskRunnerImpl() override; ~WebTaskRunnerImpl() override;
base::TimeTicks Now() const;
scoped_refptr<TaskQueue> task_queue_; scoped_refptr<TaskQueue> task_queue_;
base::Optional<TaskType> task_type_; base::Optional<TaskType> task_type_;
......
...@@ -203,99 +203,102 @@ TEST_F(WebViewSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) { ...@@ -203,99 +203,102 @@ TEST_F(WebViewSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) {
namespace { namespace {
void RunVirtualTimeRecorderTask(base::SimpleTestTickClock* clock, void RunVirtualTimeRecorderTask(
scoped_refptr<WebTaskRunner> task_runner, base::SimpleTestTickClock* clock,
std::vector<base::TimeTicks>* out_real_times, RendererSchedulerImpl* scheduler,
std::vector<size_t>* out_virtual_times_ms) { std::vector<base::TimeTicks>* out_real_times,
std::vector<base::TimeTicks>* out_virtual_times) {
out_real_times->push_back(clock->NowTicks()); out_real_times->push_back(clock->NowTicks());
out_virtual_times_ms->push_back( out_virtual_times->push_back(scheduler->GetVirtualTimeDomain()->Now());
task_runner->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0);
} }
base::OnceClosure MakeVirtualTimeRecorderTask( base::OnceClosure MakeVirtualTimeRecorderTask(
base::SimpleTestTickClock* clock, base::SimpleTestTickClock* clock,
scoped_refptr<WebTaskRunner> task_runner, RendererSchedulerImpl* scheduler,
std::vector<base::TimeTicks>* out_real_times, std::vector<base::TimeTicks>* out_real_times,
std::vector<size_t>* out_virtual_times_ms) { std::vector<base::TimeTicks>* out_virtual_times) {
return WTF::Bind(&RunVirtualTimeRecorderTask, WTF::Unretained(clock), return WTF::Bind(&RunVirtualTimeRecorderTask, WTF::Unretained(clock),
WTF::Passed(std::move(task_runner)), WTF::Unretained(scheduler), WTF::Unretained(out_real_times),
WTF::Unretained(out_real_times), WTF::Unretained(out_virtual_times));
WTF::Unretained(out_virtual_times_ms));
} }
} }
TEST_F(WebViewSchedulerImplTest, VirtualTime_TimerFastForwarding) { TEST_F(WebViewSchedulerImplTest, VirtualTime_TimerFastForwarding) {
std::vector<base::TimeTicks> real_times; std::vector<base::TimeTicks> real_times;
std::vector<size_t> virtual_times_ms; std::vector<base::TimeTicks> virtual_times;
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
size_t initial_virtual_time_ms =
ThrottleableTaskRunner()->MonotonicallyIncreasingVirtualTimeSeconds() *
1000.0;
web_view_scheduler_->EnableVirtualTime(); web_view_scheduler_->EnableVirtualTime();
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
base::TimeTicks initial_virtual_time =
scheduler_->GetVirtualTimeDomain()->Now();
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(2)); TimeDelta::FromMilliseconds(2));
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(20)); TimeDelta::FromMilliseconds(20));
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(200)); TimeDelta::FromMilliseconds(200));
mock_task_runner_->RunUntilIdle(); mock_task_runner_->RunUntilIdle();
EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time, EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time,
initial_real_time)); initial_real_time));
EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2, EXPECT_THAT(
initial_virtual_time_ms + 20, virtual_times,
initial_virtual_time_ms + 200)); ElementsAre(initial_virtual_time + TimeDelta::FromMilliseconds(2),
initial_virtual_time + TimeDelta::FromMilliseconds(20),
initial_virtual_time + TimeDelta::FromMilliseconds(200)));
} }
TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) { TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) {
std::vector<base::TimeTicks> real_times; std::vector<base::TimeTicks> real_times;
std::vector<size_t> virtual_times_ms; std::vector<base::TimeTicks> virtual_times;
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
size_t initial_virtual_time_ms =
ThrottleableTaskRunner()->MonotonicallyIncreasingVirtualTimeSeconds() *
1000.0;
web_view_scheduler_->EnableVirtualTime(); web_view_scheduler_->EnableVirtualTime();
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
base::TimeTicks initial_virtual_time =
scheduler_->GetVirtualTimeDomain()->Now();
LoadingTaskRunner()->PostDelayedTask( LoadingTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, LoadingTaskRunner(), &real_times, MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(2)); TimeDelta::FromMilliseconds(2));
LoadingTaskRunner()->PostDelayedTask( LoadingTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, LoadingTaskRunner(), &real_times, MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(20)); TimeDelta::FromMilliseconds(20));
LoadingTaskRunner()->PostDelayedTask( LoadingTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, LoadingTaskRunner(), &real_times, MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(200)); TimeDelta::FromMilliseconds(200));
mock_task_runner_->RunUntilIdle(); mock_task_runner_->RunUntilIdle();
EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time, EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time,
initial_real_time)); initial_real_time));
EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2, EXPECT_THAT(
initial_virtual_time_ms + 20, virtual_times,
initial_virtual_time_ms + 200)); ElementsAre(initial_virtual_time + TimeDelta::FromMilliseconds(2),
initial_virtual_time + TimeDelta::FromMilliseconds(20),
initial_virtual_time + TimeDelta::FromMilliseconds(200)));
} }
TEST_F(WebViewSchedulerImplTest, TEST_F(WebViewSchedulerImplTest,
...@@ -602,36 +605,36 @@ TEST_F(WebViewSchedulerImplTest, PauseTimersWhileVirtualTimeIsPaused) { ...@@ -602,36 +605,36 @@ TEST_F(WebViewSchedulerImplTest, PauseTimersWhileVirtualTimeIsPaused) {
TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) { TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) {
std::vector<base::TimeTicks> real_times; std::vector<base::TimeTicks> real_times;
std::vector<size_t> virtual_times_ms; std::vector<base::TimeTicks> virtual_times;
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
size_t initial_virtual_time_ms =
ThrottleableTaskRunner()->MonotonicallyIncreasingVirtualTimeSeconds() *
1000.0;
web_view_scheduler_->EnableVirtualTime(); web_view_scheduler_->EnableVirtualTime();
base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
base::TimeTicks initial_virtual_time =
scheduler_->GetVirtualTimeDomain()->Now();
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(1)); TimeDelta::FromMilliseconds(1));
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(2)); TimeDelta::FromMilliseconds(2));
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(5)); TimeDelta::FromMilliseconds(5));
ThrottleableTaskRunner()->PostDelayedTask( ThrottleableTaskRunner()->PostDelayedTask(
FROM_HERE, FROM_HERE,
MakeVirtualTimeRecorderTask(&clock_, ThrottleableTaskRunner(), MakeVirtualTimeRecorderTask(&clock_, scheduler_.get(), &real_times,
&real_times, &virtual_times_ms), &virtual_times),
TimeDelta::FromMilliseconds(7)); TimeDelta::FromMilliseconds(7));
web_view_scheduler_->GrantVirtualTimeBudget( web_view_scheduler_->GrantVirtualTimeBudget(
...@@ -648,9 +651,11 @@ TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) { ...@@ -648,9 +651,11 @@ TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) {
// expires will not run. // expires will not run.
EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time, EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time,
initial_real_time)); initial_real_time));
EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 1, EXPECT_THAT(
initial_virtual_time_ms + 2, virtual_times,
initial_virtual_time_ms + 5)); ElementsAre(initial_virtual_time + base::TimeDelta::FromMilliseconds(1),
initial_virtual_time + base::TimeDelta::FromMilliseconds(2),
initial_virtual_time + base::TimeDelta::FromMilliseconds(5)));
} }
namespace { namespace {
......
...@@ -58,10 +58,6 @@ bool FakeWebTaskRunner::RunsTasksInCurrentSequence() const { ...@@ -58,10 +58,6 @@ bool FakeWebTaskRunner::RunsTasksInCurrentSequence() const {
return true; return true;
} }
double FakeWebTaskRunner::MonotonicallyIncreasingVirtualTimeSeconds() const {
return (data_->time_ - base::TimeTicks()).InSecondsF();
}
void FakeWebTaskRunner::RunUntilIdle() { void FakeWebTaskRunner::RunUntilIdle() {
while (!data_->task_queue_.empty()) { while (!data_->task_queue_.empty()) {
// Move the task to run into a local variable in case it touches the // Move the task to run into a local variable in case it touches the
......
...@@ -29,9 +29,6 @@ class FakeWebTaskRunner : public WebTaskRunner { ...@@ -29,9 +29,6 @@ class FakeWebTaskRunner : public WebTaskRunner {
// base::SingleThreadTaskRunner implementation: // base::SingleThreadTaskRunner implementation:
bool RunsTasksInCurrentSequence() const override; bool RunsTasksInCurrentSequence() const override;
// WebTaskRunner implementation:
double MonotonicallyIncreasingVirtualTimeSeconds() const override;
void RunUntilIdle(); void RunUntilIdle();
void AdvanceTimeAndRun(base::TimeDelta delta); void AdvanceTimeAndRun(base::TimeDelta delta);
void AdvanceTimeAndRun(double delta_seconds) { void AdvanceTimeAndRun(double delta_seconds) {
......
...@@ -43,10 +43,6 @@ class WebTaskRunnerProxy : public WebTaskRunner { ...@@ -43,10 +43,6 @@ class WebTaskRunnerProxy : public WebTaskRunner {
location, std::move(closure), time_delta); location, std::move(closure), time_delta);
} }
double MonotonicallyIncreasingVirtualTimeSeconds() const override {
return 0.0;
}
bool RunsTasksInCurrentSequence() const override { bool RunsTasksInCurrentSequence() const override {
return task_runner_->RunsTasksInCurrentSequence(); return task_runner_->RunsTasksInCurrentSequence();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment