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

Side by Side Diff: components/scheduler/base/task_queue_manager_perftest.cc

Issue 1898233002: Report expected task queueing time via UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: RenderSchedulerImpl owns all the things. Created 4 years, 5 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/base/task_queue_manager.h" 5 #include "components/scheduler/base/task_queue_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/threading/thread.h" 11 #include "base/threading/thread.h"
12 #include "base/time/default_tick_clock.h" 12 #include "base/time/default_tick_clock.h"
13 #include "components/scheduler/base/task_queue_impl.h" 13 #include "components/scheduler/base/task_queue_impl.h"
14 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h" 14 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h"
15 #include "components/scheduler/base/task_queue_selector.h" 15 #include "components/scheduler/base/task_queue_selector.h"
16 #include "components/scheduler/base/task_time_tracker.h"
16 #include "components/scheduler/base/work_queue_sets.h" 17 #include "components/scheduler/base/work_queue_sets.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/perf/perf_test.h" 19 #include "testing/perf/perf_test.h"
19 20
20 namespace scheduler { 21 namespace scheduler {
21 22
22 class TaskQueueManagerPerfTest : public testing::Test { 23 class TaskQueueManagerPerfTest : public testing::Test {
23 public: 24 public:
24 TaskQueueManagerPerfTest() 25 TaskQueueManagerPerfTest()
25 : num_queues_(0), 26 : num_queues_(0),
26 max_tasks_in_flight_(0), 27 max_tasks_in_flight_(0),
27 num_tasks_in_flight_(0), 28 num_tasks_in_flight_(0),
28 num_tasks_to_post_(0), 29 num_tasks_to_post_(0),
29 num_tasks_to_run_(0) {} 30 num_tasks_to_run_(0),
31 task_time_tracker_(nullptr) {}
30 32
31 void SetUp() override { 33 void SetUp() override {
32 if (base::ThreadTicks::IsSupported()) 34 if (base::ThreadTicks::IsSupported())
33 base::ThreadTicks::WaitUntilInitialized(); 35 base::ThreadTicks::WaitUntilInitialized();
34 } 36 }
35 37
36 void Initialize(size_t num_queues) { 38 void Initialize(size_t num_queues) {
37 num_queues_ = num_queues; 39 num_queues_ = num_queues;
38 message_loop_.reset(new base::MessageLoop()); 40 message_loop_.reset(new base::MessageLoop());
39 manager_ = base::WrapUnique(new TaskQueueManager( 41 manager_ = base::WrapUnique(new TaskQueueManager(
40 TaskQueueManagerDelegateForTest::Create( 42 TaskQueueManagerDelegateForTest::Create(
41 message_loop_->task_runner(), 43 message_loop_->task_runner(),
42 base::WrapUnique(new base::DefaultTickClock())), 44 base::WrapUnique(new base::DefaultTickClock())),
43 "fake.category", "fake.category", "fake.category.debug")); 45 "fake.category", "fake.category", "fake.category.debug"));
46 manager_->SetTaskTimeTracker(&task_time_tracker_);
44 for (size_t i = 0; i < num_queues; i++) 47 for (size_t i = 0; i < num_queues; i++)
45 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test"))); 48 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test")));
46 } 49 }
47 50
48 void TestDelayedTask() { 51 void TestDelayedTask() {
49 if (--num_tasks_to_run_ == 0) { 52 if (--num_tasks_to_run_ == 0) {
50 message_loop_->QuitWhenIdle(); 53 message_loop_->QuitWhenIdle();
51 } 54 }
52 55
53 num_tasks_in_flight_--; 56 num_tasks_in_flight_--;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 } 107 }
105 108
106 size_t num_queues_; 109 size_t num_queues_;
107 unsigned int max_tasks_in_flight_; 110 unsigned int max_tasks_in_flight_;
108 unsigned int num_tasks_in_flight_; 111 unsigned int num_tasks_in_flight_;
109 unsigned int num_tasks_to_post_; 112 unsigned int num_tasks_to_post_;
110 unsigned int num_tasks_to_run_; 113 unsigned int num_tasks_to_run_;
111 std::unique_ptr<TaskQueueManager> manager_; 114 std::unique_ptr<TaskQueueManager> manager_;
112 std::unique_ptr<base::MessageLoop> message_loop_; 115 std::unique_ptr<base::MessageLoop> message_loop_;
113 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_; 116 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_;
117 TaskTimeTracker task_time_tracker_;
alex clarke (OOO till 29th) 2016/07/06 09:51:39 Can you add a TODO(alexclarke): parameterize so we
tdresser 2016/07/06 13:25:34 Done.
114 }; 118 };
115 119
116 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) { 120 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) {
117 if (!base::ThreadTicks::IsSupported()) 121 if (!base::ThreadTicks::IsSupported())
118 return; 122 return;
119 Initialize(1u); 123 Initialize(1u);
120 124
121 max_tasks_in_flight_ = 200; 125 max_tasks_in_flight_ = 200;
122 Benchmark("run 10000 delayed tasks with one queue", 126 Benchmark("run 10000 delayed tasks with one queue",
123 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, 127 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask,
(...skipping 30 matching lines...) Expand all
154 max_tasks_in_flight_ = 200; 158 max_tasks_in_flight_ = 200;
155 Benchmark("run 10000 delayed tasks with eight queues", 159 Benchmark("run 10000 delayed tasks with eight queues",
156 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, 160 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask,
157 base::Unretained(this), 10000)); 161 base::Unretained(this), 10000));
158 } 162 }
159 163
160 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs 164 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs
161 // delayed tasks. 165 // delayed tasks.
162 166
163 } // namespace scheduler 167 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698