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

Unified Diff: components/scheduler/base/task_queue_manager_unittest.cc

Issue 1424053002: Adds a flag to support "Virtual Time" to the blink scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 1 month 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 | « components/scheduler/base/task_queue_manager_perftest.cc ('k') | components/scheduler/child/idle_helper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/scheduler/base/task_queue_manager_unittest.cc
diff --git a/components/scheduler/base/task_queue_manager_unittest.cc b/components/scheduler/base/task_queue_manager_unittest.cc
index fcdb8356d20f0719a537f194557394f526a942de..1c46c695d1c03522c589df2842443584079ec69c 100644
--- a/components/scheduler/base/task_queue_manager_unittest.cc
+++ b/components/scheduler/base/task_queue_manager_unittest.cc
@@ -10,8 +10,8 @@
#include "base/test/simple_test_tick_clock.h"
#include "base/threading/thread.h"
#include "cc/test/ordered_simple_task_runner.h"
-#include "components/scheduler/base/nestable_task_runner_for_test.h"
#include "components/scheduler/base/task_queue_impl.h"
+#include "components/scheduler/base/task_queue_manager_delegate_for_test.h"
#include "components/scheduler/base/task_queue_selector.h"
#include "components/scheduler/base/task_queue_sets.h"
#include "components/scheduler/base/test_always_fail_time_source.h"
@@ -23,10 +23,11 @@ using testing::_;
namespace scheduler {
-class MessageLoopTaskRunner : public NestableTaskRunnerForTest {
+class MessageLoopTaskRunner : public TaskQueueManagerDelegateForTest {
public:
- static scoped_refptr<MessageLoopTaskRunner> Create() {
- return make_scoped_refptr(new MessageLoopTaskRunner());
+ static scoped_refptr<MessageLoopTaskRunner> Create(
+ scoped_ptr<base::TickClock> tick_clock) {
+ return make_scoped_refptr(new MessageLoopTaskRunner(tick_clock.Pass()));
}
// NestableTaskRunner implementation.
@@ -35,9 +36,10 @@ class MessageLoopTaskRunner : public NestableTaskRunnerForTest {
}
private:
- MessageLoopTaskRunner()
- : NestableTaskRunnerForTest(base::MessageLoop::current()->task_runner()) {
- }
+ explicit MessageLoopTaskRunner(scoped_ptr<base::TickClock> tick_clock)
+ : TaskQueueManagerDelegateForTest(base::MessageLoop::current()
+ ->task_runner(),
+ tick_clock.Pass()) {}
~MessageLoopTaskRunner() override {}
};
@@ -46,28 +48,34 @@ class TaskQueueManagerTest : public testing::Test {
void DeleteTaskQueueManager() { manager_.reset(); }
protected:
- void Initialize(size_t num_queues) {
- now_src_.reset(new base::SimpleTestTickClock());
- now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
+ void InitializeWithClock(size_t num_queues,
+ scoped_ptr<base::TickClock> test_time_source) {
test_task_runner_ = make_scoped_refptr(
new cc::OrderedSimpleTaskRunner(now_src_.get(), false));
- main_task_runner_ =
- NestableTaskRunnerForTest::Create(test_task_runner_.get());
+ main_task_runner_ = TaskQueueManagerDelegateForTest::Create(
+ test_task_runner_.get(),
+ make_scoped_ptr(new TestTimeSource(now_src_.get())));
manager_ = make_scoped_ptr(new TaskQueueManager(
main_task_runner_, "test.scheduler", "test.scheduler",
"test.scheduler.debug"));
- manager_->SetTimeSourceForTesting(
- make_scoped_ptr(new TestTimeSource(now_src_.get())));
for (size_t i = 0; i < num_queues; i++)
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
}
+ void Initialize(size_t num_queues) {
+ now_src_.reset(new base::SimpleTestTickClock());
+ now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
+ InitializeWithClock(num_queues,
+ make_scoped_ptr(new TestTimeSource(now_src_.get())));
+ }
+
void InitializeWithRealMessageLoop(size_t num_queues) {
message_loop_.reset(new base::MessageLoop());
- manager_ = make_scoped_ptr(
- new TaskQueueManager(MessageLoopTaskRunner::Create(), "test.scheduler",
- "test.scheduler", "test.scheduler.debug"));
+ manager_ = make_scoped_ptr(new TaskQueueManager(
+ MessageLoopTaskRunner::Create(
+ make_scoped_ptr(new TestTimeSource(now_src_.get()))),
+ "test.scheduler", "test.scheduler", "test.scheduler.debug"));
for (size_t i = 0; i < num_queues; i++)
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
@@ -75,7 +83,7 @@ class TaskQueueManagerTest : public testing::Test {
scoped_ptr<base::MessageLoop> message_loop_;
scoped_ptr<base::SimpleTestTickClock> now_src_;
- scoped_refptr<NestableTaskRunnerForTest> main_task_runner_;
+ scoped_refptr<TaskQueueManagerDelegateForTest> main_task_runner_;
scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_;
scoped_ptr<TaskQueueManager> manager_;
std::vector<scoped_refptr<internal::TaskQueueImpl>> runners_;
@@ -95,6 +103,28 @@ void PostFromNestedRunloop(base::MessageLoop* message_loop,
message_loop->RunUntilIdle();
}
+void NopTask() {}
+
+TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) {
+ message_loop_.reset(new base::MessageLoop());
+ manager_ = make_scoped_ptr(new TaskQueueManager(
+ MessageLoopTaskRunner::Create(
+ make_scoped_ptr(new TestAlwaysFailTimeSource())),
+ "test.scheduler", "test.scheduler", "test.scheduler.debug"));
+
+ for (size_t i = 0; i < 3; i++)
+ runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
+
+ runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+ runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+ runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask));
+ runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask));
+ runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask));
+ runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask));
+
+ message_loop_->RunUntilIdle();
+}
+
void NullTask() {}
void TestTask(int value, std::vector<int>* out_result) {
@@ -128,24 +158,6 @@ TEST_F(TaskQueueManagerTest, MultiQueuePosting) {
EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4, 5, 6));
}
-void NopTask() {}
-
-TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) {
- Initialize(3u);
-
- manager_->SetTimeSourceForTesting(
- make_scoped_ptr(new TestAlwaysFailTimeSource()));
-
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
- runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask));
- runners_[1]->PostTask(FROM_HERE, base::Bind(&NopTask));
- runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask));
- runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask));
-
- test_task_runner_->RunUntilIdle();
-}
-
TEST_F(TaskQueueManagerTest, NonNestableTaskPosting) {
InitializeWithRealMessageLoop(1u);
@@ -886,11 +898,8 @@ TEST_F(TaskQueueManagerTest, ThreadCheckAfterTermination) {
}
TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) {
- scoped_ptr<base::SimpleTestTickClock> clock(new base::SimpleTestTickClock());
- clock->Advance(base::TimeDelta::FromMicroseconds(10000));
Initialize(2u);
- manager_->SetTimeSourceForTesting(
- make_scoped_ptr(new TestTimeSource(clock.get())));
+ now_src_->Advance(base::TimeDelta::FromMicroseconds(10000));
// With no delayed tasks.
EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null());
@@ -902,30 +911,30 @@ TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) {
// With a delayed task.
base::TimeDelta expected_delay = base::TimeDelta::FromMilliseconds(50);
runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), expected_delay);
- EXPECT_EQ(clock->NowTicks() + expected_delay,
+ EXPECT_EQ(now_src_->NowTicks() + expected_delay,
manager_->NextPendingDelayedTaskRunTime());
// With another delayed task in the same queue with a longer delay.
runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
base::TimeDelta::FromMilliseconds(100));
- EXPECT_EQ(clock->NowTicks() + expected_delay,
+ EXPECT_EQ(now_src_->NowTicks() + expected_delay,
manager_->NextPendingDelayedTaskRunTime());
// With another delayed task in the same queue with a shorter delay.
expected_delay = base::TimeDelta::FromMilliseconds(20);
runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), expected_delay);
- EXPECT_EQ(clock->NowTicks() + expected_delay,
+ EXPECT_EQ(now_src_->NowTicks() + expected_delay,
manager_->NextPendingDelayedTaskRunTime());
// With another delayed task in a different queue with a shorter delay.
expected_delay = base::TimeDelta::FromMilliseconds(10);
runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), expected_delay);
- EXPECT_EQ(clock->NowTicks() + expected_delay,
+ EXPECT_EQ(now_src_->NowTicks() + expected_delay,
manager_->NextPendingDelayedTaskRunTime());
// Test it updates as time progresses
- clock->Advance(expected_delay);
- EXPECT_EQ(clock->NowTicks(), manager_->NextPendingDelayedTaskRunTime());
+ now_src_->Advance(expected_delay);
+ EXPECT_EQ(now_src_->NowTicks(), manager_->NextPendingDelayedTaskRunTime());
}
TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime_MultipleQueues) {
« no previous file with comments | « components/scheduler/base/task_queue_manager_perftest.cc ('k') | components/scheduler/child/idle_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698