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

Unified Diff: components/scheduler/base/task_queue_manager_unittest.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 side-by-side diff with in-line comments
Download patch
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 39baad3518dfd0837c2e8ff4a95c3ea184986f9f..89493b12c65e8313f767728585b892f74d019065 100644
--- a/components/scheduler/base/task_queue_manager_unittest.cc
+++ b/components/scheduler/base/task_queue_manager_unittest.cc
@@ -23,7 +23,8 @@
#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/test_always_fail_time_source.h"
+#include "components/scheduler/base/test_count_uses_time_source.h"
+#include "components/scheduler/base/test_task_time_tracker.h"
#include "components/scheduler/base/test_time_source.h"
#include "components/scheduler/base/virtual_time_domain.h"
#include "components/scheduler/base/work_queue.h"
@@ -59,6 +60,7 @@ class MessageLoopTaskRunner : public TaskQueueManagerDelegateForTest {
class TaskQueueManagerTest : public testing::Test {
public:
+ TaskQueueManagerTest() {}
void DeleteTaskQueueManager() { manager_.reset(); }
protected:
@@ -69,9 +71,11 @@ class TaskQueueManagerTest : public testing::Test {
main_task_runner_ = TaskQueueManagerDelegateForTest::Create(
test_task_runner_.get(),
base::WrapUnique(new TestTimeSource(now_src_.get())));
- manager_ = base::WrapUnique(
- new TaskQueueManager(main_task_runner_, "test.scheduler",
- "test.scheduler", "test.scheduler.debug"));
+
+ manager_ = base::WrapUnique(new TaskQueueManager(
+ main_task_runner_, "test.scheduler", "test.scheduler",
+ "test.scheduler.debug"));
+ manager_->SetTaskTimeTracker(&test_task_time_tracker_);
for (size_t i = 0; i < num_queues; i++)
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
@@ -87,10 +91,13 @@ class TaskQueueManagerTest : public testing::Test {
void InitializeWithRealMessageLoop(size_t num_queues) {
now_src_.reset(new base::SimpleTestTickClock());
message_loop_.reset(new base::MessageLoop());
+ // A null clock triggers some assertions.
+ now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
manager_ = base::WrapUnique(new TaskQueueManager(
MessageLoopTaskRunner::Create(
base::WrapUnique(new TestTimeSource(now_src_.get()))),
"test.scheduler", "test.scheduler", "test.scheduler.debug"));
+ manager_->SetTaskTimeTracker(&test_task_time_tracker_);
for (size_t i = 0; i < num_queues; i++)
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
@@ -102,6 +109,7 @@ class TaskQueueManagerTest : public testing::Test {
scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_;
std::unique_ptr<TaskQueueManager> manager_;
std::vector<scoped_refptr<internal::TaskQueueImpl>> runners_;
+ TestTaskTimeTracker test_task_time_tracker_;
};
void PostFromNestedRunloop(base::MessageLoop* message_loop,
@@ -120,12 +128,20 @@ void PostFromNestedRunloop(base::MessageLoop* message_loop,
void NopTask() {}
-TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) {
+TEST_F(TaskQueueManagerTest,
+ NowCalledMinimumNumberOfTimesToComputeTaskDurations) {
message_loop_.reset(new base::MessageLoop());
+ // This memory is managed by the TaskQueueManager, but we need to hold a
+ // pointer to this object to read out how many times Now was called.
+ TestCountUsesTimeSource* test_count_uses_time_source =
+ new TestCountUsesTimeSource();
+
manager_ = base::WrapUnique(new TaskQueueManager(
MessageLoopTaskRunner::Create(
- base::WrapUnique(new TestAlwaysFailTimeSource())),
+ base::WrapUnique(test_count_uses_time_source)),
"test.scheduler", "test.scheduler", "test.scheduler.debug"));
+ manager_->SetWorkBatchSize(6);
+ manager_->SetTaskTimeTracker(&test_task_time_tracker_);
for (size_t i = 0; i < 3; i++)
runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
@@ -138,6 +154,44 @@ TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) {
runners_[2]->PostTask(FROM_HERE, base::Bind(&NopTask));
message_loop_->RunUntilIdle();
+ // We need to call Now for the beginning of the first task, and then the end
+ // of every task after. We reuse the end time of one task for the start time
+ // of the next task. In this case, there were 6 tasks, so we expect 7 calls to
+ // Now.
+ EXPECT_EQ(7, test_count_uses_time_source->now_calls_count());
+}
+
+TEST_F(TaskQueueManagerTest,
+ NowNotCalledForNestedTasks) {
+ message_loop_.reset(new base::MessageLoop());
+ // This memory is managed by the TaskQueueManager, but we need to hold a
+ // pointer to this object to read out how many times Now was called.
+ TestCountUsesTimeSource* test_count_uses_time_source =
+ new TestCountUsesTimeSource();
+
+ manager_ = base::WrapUnique(new TaskQueueManager(
+ MessageLoopTaskRunner::Create(
+ base::WrapUnique(test_count_uses_time_source)),
+ "test.scheduler", "test.scheduler", "test.scheduler.debug"));
+ manager_->SetTaskTimeTracker(&test_task_time_tracker_);
+
+ runners_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test_queue")));
+
+ std::vector<std::pair<base::Closure, bool>> tasks_to_post_from_nested_loop;
+ for (int i = 0; i <= 6; ++i) {
+ tasks_to_post_from_nested_loop.push_back(
+ std::make_pair(base::Bind(&NopTask), true));
+ }
+
+ runners_[0]->PostTask(
+ FROM_HERE, base::Bind(&PostFromNestedRunloop, message_loop_.get(),
+ base::RetainedRef(runners_[0]),
+ base::Unretained(&tasks_to_post_from_nested_loop)));
+
+ message_loop_->RunUntilIdle();
+ // We need to call Now twice, to measure the start and end of the outermost
+ // task. We shouldn't call it for any of the nested tasks.
+ EXPECT_EQ(2, test_count_uses_time_source->now_calls_count());
}
void NullTask() {}
« no previous file with comments | « components/scheduler/base/task_queue_manager_perftest.cc ('k') | components/scheduler/base/task_time_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698