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

Unified Diff: base/task_scheduler/sequence_unittest.cc

Issue 1685423002: Task Scheduler. (Closed) Base URL: https://luckyluke-private.googlesource.com/src@a_master
Patch Set: Created 4 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
Index: base/task_scheduler/sequence_unittest.cc
diff --git a/base/task_scheduler/sequence_unittest.cc b/base/task_scheduler/sequence_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0c8d099ca5ef425f8eb936a6382ee88ce9fedb8d
--- /dev/null
+++ b/base/task_scheduler/sequence_unittest.cc
@@ -0,0 +1,141 @@
+// Copyright 2016 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 "base/task_scheduler/sequence.h"
+
+#include "base/task_scheduler/test_util.h"
+#include "base/time/time.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace task_scheduler {
+
+class TaskSchedulerSequenceTest : public testing::Test {
+ public:
+ TaskSchedulerSequenceTest()
+ : task_a_(FROM_HERE,
+ Closure(),
+ TaskTraits().WithPriority(TaskPriority::BACKGROUND),
+ TimeTicks::FromInternalValue(1)),
+ task_b_(FROM_HERE,
+ Closure(),
+ TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
+ TimeTicks::FromInternalValue(2)),
+ task_c_(FROM_HERE,
+ Closure(),
+ TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
+ TimeTicks::FromInternalValue(3)),
+ task_d_(FROM_HERE,
+ Closure(),
+ TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
+ TimeTicks::FromInternalValue(4)) {}
+
+ protected:
+ Task task_a_;
+ Task task_b_;
+ Task task_c_;
+ Task task_d_;
+};
+
+TEST_F(TaskSchedulerSequenceTest, PushPopPeek) {
+ scoped_refptr<Sequence> sequence(new Sequence);
+ size_t prev_num_tasks;
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks);
+ EXPECT_EQ(0u, prev_num_tasks);
+ EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_b_)), &prev_num_tasks);
+ EXPECT_EQ(1u, prev_num_tasks);
+ EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_c_)), &prev_num_tasks);
+ EXPECT_EQ(2u, prev_num_tasks);
+ EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_d_)), &prev_num_tasks);
+ EXPECT_EQ(3u, prev_num_tasks);
+ EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time);
+
+ size_t new_num_tasks;
+ sequence->PopTask(&new_num_tasks);
+ EXPECT_EQ(3u, new_num_tasks);
+ EXPECT_EQ(task_b_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PopTask(&new_num_tasks);
+ EXPECT_EQ(2u, new_num_tasks);
+ EXPECT_EQ(task_c_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PopTask(&new_num_tasks);
+ EXPECT_EQ(1u, new_num_tasks);
+ EXPECT_EQ(task_d_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks);
+ EXPECT_EQ(1u, prev_num_tasks);
+ EXPECT_EQ(task_d_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PopTask(&new_num_tasks);
+ EXPECT_EQ(1u, new_num_tasks);
+ EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time);
+
+ sequence->PopTask(&new_num_tasks);
+ EXPECT_EQ(0u, new_num_tasks);
+ EXPECT_EQ(nullptr, sequence->PeekTask());
+}
+
+TEST_F(TaskSchedulerSequenceTest, GetSequenceSortKey) {
+ scoped_refptr<Sequence> sequence(new Sequence);
+ size_t prev_num_tasks;
+ size_t new_num_tasks;
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks);
+ SequenceSortKey sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::BACKGROUND, sort_key.priority_);
+ EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_b_)), &prev_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_VISIBLE, sort_key.priority_);
+ EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_c_)), &prev_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_d_)), &prev_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PopTask(&new_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_b_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PopTask(&new_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_c_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PopTask(&new_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_d_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_);
+ EXPECT_EQ(task_d_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PopTask(&new_num_tasks);
+ sort_key = sequence->GetSortKey();
+ EXPECT_EQ(TaskPriority::BACKGROUND, sort_key.priority_);
+ EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_);
+
+ sequence->PopTask(&new_num_tasks);
+}
+
+} // namespace task_scheduler
+} // namespace base

Powered by Google App Engine
This is Rietveld 408576698