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

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: Remove export. Fix windows. 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/test_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) {}
30 31
31 void SetUp() override { 32 void SetUp() override {
32 if (base::ThreadTicks::IsSupported()) 33 if (base::ThreadTicks::IsSupported())
33 base::ThreadTicks::WaitUntilInitialized(); 34 base::ThreadTicks::WaitUntilInitialized();
34 } 35 }
35 36
36 void Initialize(size_t num_queues) { 37 void Initialize(size_t num_queues) {
37 num_queues_ = num_queues; 38 num_queues_ = num_queues;
38 message_loop_.reset(new base::MessageLoop()); 39 message_loop_.reset(new base::MessageLoop());
39 manager_ = base::WrapUnique(new TaskQueueManager( 40 manager_ = base::WrapUnique(new TaskQueueManager(
40 TaskQueueManagerDelegateForTest::Create( 41 TaskQueueManagerDelegateForTest::Create(
41 message_loop_->task_runner(), 42 message_loop_->task_runner(),
42 base::WrapUnique(new base::DefaultTickClock())), 43 base::WrapUnique(new base::DefaultTickClock())),
43 "fake.category", "fake.category", "fake.category.debug")); 44 "fake.category", "fake.category", "fake.category.debug"));
45 manager_->SetTaskTimeTracker(&test_task_time_tracker_);
44 for (size_t i = 0; i < num_queues; i++) 46 for (size_t i = 0; i < num_queues; i++)
45 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test"))); 47 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test")));
46 } 48 }
47 49
48 void TestDelayedTask() { 50 void TestDelayedTask() {
49 if (--num_tasks_to_run_ == 0) { 51 if (--num_tasks_to_run_ == 0) {
50 message_loop_->QuitWhenIdle(); 52 message_loop_->QuitWhenIdle();
51 } 53 }
52 54
53 num_tasks_in_flight_--; 55 num_tasks_in_flight_--;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 } 106 }
105 107
106 size_t num_queues_; 108 size_t num_queues_;
107 unsigned int max_tasks_in_flight_; 109 unsigned int max_tasks_in_flight_;
108 unsigned int num_tasks_in_flight_; 110 unsigned int num_tasks_in_flight_;
109 unsigned int num_tasks_to_post_; 111 unsigned int num_tasks_to_post_;
110 unsigned int num_tasks_to_run_; 112 unsigned int num_tasks_to_run_;
111 std::unique_ptr<TaskQueueManager> manager_; 113 std::unique_ptr<TaskQueueManager> manager_;
112 std::unique_ptr<base::MessageLoop> message_loop_; 114 std::unique_ptr<base::MessageLoop> message_loop_;
113 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_; 115 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_;
116 // TODO(alexclarke): parameterize so we can measure with and without a
117 // TaskTimeTracker.
118 TestTaskTimeTracker test_task_time_tracker_;
114 }; 119 };
115 120
116 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) { 121 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) {
117 if (!base::ThreadTicks::IsSupported()) 122 if (!base::ThreadTicks::IsSupported())
118 return; 123 return;
119 Initialize(1u); 124 Initialize(1u);
120 125
121 max_tasks_in_flight_ = 200; 126 max_tasks_in_flight_ = 200;
122 Benchmark("run 10000 delayed tasks with one queue", 127 Benchmark("run 10000 delayed tasks with one queue",
123 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, 128 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask,
(...skipping 30 matching lines...) Expand all
154 max_tasks_in_flight_ = 200; 159 max_tasks_in_flight_ = 200;
155 Benchmark("run 10000 delayed tasks with eight queues", 160 Benchmark("run 10000 delayed tasks with eight queues",
156 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, 161 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask,
157 base::Unretained(this), 10000)); 162 base::Unretained(this), 10000));
158 } 163 }
159 164
160 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs 165 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs
161 // delayed tasks. 166 // delayed tasks.
162 167
163 } // namespace scheduler 168 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/task_queue_manager.cc ('k') | components/scheduler/base/task_queue_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698