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

Side by Side Diff: base/task_scheduler/priority_queue_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 unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/task_scheduler/priority_queue.h"
6
7 #include "base/bind.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/task_scheduler/sequence.h"
10 #include "base/task_scheduler/task.h"
11 #include "base/task_scheduler/task_traits.h"
12 #include "base/time/time.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace base {
17 namespace task_scheduler {
18
19 namespace {
20 class PriorityQueueCallbackMock {
21 public:
22 MOCK_METHOD0(SequenceInsertedInPriorityQueue, void());
23 };
24 } // namespace
25
26 class TaskSchedulerPriorityQueueTest : public testing::Test {
27 public:
28 TaskSchedulerPriorityQueueTest() {
29 size_t prev_num_tasks;
30
31 sequence_a_ = new Sequence;
32 sequence_a_->PushTask(
33 make_scoped_ptr(
34 new Task(FROM_HERE, Closure(),
35 TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
36 TimeTicks::FromInternalValue(1))),
37 &prev_num_tasks);
38
39 sequence_b_ = new Sequence;
40 sequence_b_->PushTask(
41 make_scoped_ptr(
42 new Task(FROM_HERE, Closure(),
43 TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
44 TimeTicks::FromInternalValue(2))),
45 &prev_num_tasks);
46
47 sequence_c_ = new Sequence;
48 sequence_c_->PushTask(
49 make_scoped_ptr(
50 new Task(FROM_HERE, Closure(),
51 TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
52 TimeTicks::FromInternalValue(3))),
53 &prev_num_tasks);
54 }
55
56 protected:
57 scoped_refptr<Sequence> sequence_a_;
58 scoped_refptr<Sequence> sequence_b_;
59 scoped_refptr<Sequence> sequence_c_;
60 };
61
62 TEST_F(TaskSchedulerPriorityQueueTest, PushPopPeek) {
63 const SequenceSortKey sort_key_a = sequence_a_->GetSortKey();
64 const SequenceSortKey sort_key_b = sequence_b_->GetSortKey();
65 const SequenceSortKey sort_key_c = sequence_c_->GetSortKey();
66
67 PriorityQueueCallbackMock mock;
68 PriorityQueue pq(
69 Bind(&PriorityQueueCallbackMock::SequenceInsertedInPriorityQueue,
70 Unretained(&mock)));
71 scoped_refptr<Sequence> sequence;
72 SequenceSortKey sort_key;
73 scoped_ptr<PriorityQueue::Transaction> transaction(pq.BeginTransaction());
74
75 EXPECT_TRUE(pq.UnsynchronizedEmpty());
76 EXPECT_EQ(nullptr, transaction->PeekSequence(&sort_key).get());
77
78 EXPECT_CALL(mock, SequenceInsertedInPriorityQueue());
79 transaction->PushSequence(sequence_a_, sort_key_a);
80 transaction.reset();
81 testing::Mock::VerifyAndClear(&mock);
82 transaction = pq.BeginTransaction();
83 EXPECT_EQ(sequence_a_, transaction->PeekSequence(&sort_key));
84 EXPECT_EQ(sort_key_a, sort_key);
85 EXPECT_FALSE(pq.UnsynchronizedEmpty());
86
87 EXPECT_CALL(mock, SequenceInsertedInPriorityQueue());
88 transaction->PushSequence(sequence_b_, sort_key_b);
89 transaction.reset();
90 testing::Mock::VerifyAndClear(&mock);
91 transaction = pq.BeginTransaction();
92 EXPECT_EQ(sequence_b_, transaction->PeekSequence(&sort_key));
93 EXPECT_EQ(sort_key_b, sort_key);
94 EXPECT_FALSE(pq.UnsynchronizedEmpty());
95
96 EXPECT_CALL(mock, SequenceInsertedInPriorityQueue());
97 transaction->PushSequence(sequence_c_, sort_key_c);
98 transaction.reset();
99 testing::Mock::VerifyAndClear(&mock);
100 transaction = pq.BeginTransaction();
101 EXPECT_EQ(sequence_b_, transaction->PeekSequence(&sort_key));
102 EXPECT_EQ(sort_key_b, sort_key);
103 EXPECT_FALSE(pq.UnsynchronizedEmpty());
104
105 transaction->PopSequence();
106 EXPECT_EQ(sequence_c_, transaction->PeekSequence(&sort_key));
107 EXPECT_EQ(sort_key_c, sort_key);
108 EXPECT_FALSE(pq.UnsynchronizedEmpty());
109
110 transaction->PopSequence();
111 EXPECT_EQ(sequence_a_, transaction->PeekSequence(&sort_key));
112 EXPECT_EQ(sort_key_a, sort_key);
113 EXPECT_FALSE(pq.UnsynchronizedEmpty());
114
115 transaction->PopSequence();
116 EXPECT_EQ(nullptr, transaction->PeekSequence(&sort_key).get());
117 EXPECT_TRUE(pq.UnsynchronizedEmpty());
118 }
119
120 } // namespace task_scheduler
121 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698