| Index: base/task_scheduler/task_tracker_unittest.cc
|
| diff --git a/base/task_scheduler/task_tracker_unittest.cc b/base/task_scheduler/task_tracker_unittest.cc
|
| index 161aabb0d7c4c4745f8e9f7674fca7ad1ee60fe4..85378b6234afe6a9f0ff499e00c6e66ec4b402c9 100644
|
| --- a/base/task_scheduler/task_tracker_unittest.cc
|
| +++ b/base/task_scheduler/task_tracker_unittest.cc
|
| @@ -16,6 +16,9 @@
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/metrics/histogram_base.h"
|
| +#include "base/metrics/histogram_samples.h"
|
| +#include "base/metrics/statistics_recorder.h"
|
| #include "base/sequence_token.h"
|
| #include "base/sequenced_task_runner.h"
|
| #include "base/single_thread_task_runner.h"
|
| @@ -25,6 +28,7 @@
|
| #include "base/task_scheduler/task.h"
|
| #include "base/task_scheduler/task_traits.h"
|
| #include "base/test/gtest_util.h"
|
| +#include "base/test/histogram_tester.h"
|
| #include "base/test/test_simple_task_runner.h"
|
| #include "base/test/test_timeouts.h"
|
| #include "base/threading/platform_thread.h"
|
| @@ -885,5 +889,52 @@ TEST(TaskSchedulerTaskTrackerWaitAllowedTest, WaitAllowed) {
|
| wait_allowed_test_thread.Join();
|
| }
|
|
|
| +// Verify that TaskScheduler.TaskLatency.* histograms are correctly recorded
|
| +// when a task runs.
|
| +TEST(TaskSchedulerTaskTrackerHistogramTest, TaskLatency) {
|
| + auto statistics_recorder = StatisticsRecorder::CreateTemporaryForTesting();
|
| +
|
| + TaskTracker tracker;
|
| +
|
| + struct {
|
| + const TaskTraits traits;
|
| + const char* const expected_histogram;
|
| + } tests[] = {
|
| + {TaskTraits().WithPriority(TaskPriority::BACKGROUND),
|
| + "TaskScheduler.TaskLatency.BackgroundTaskPriority"},
|
| + {TaskTraits().WithPriority(TaskPriority::BACKGROUND).MayBlock(),
|
| + "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
|
| + {TaskTraits()
|
| + .WithPriority(TaskPriority::BACKGROUND)
|
| + .WithBaseSyncPrimitives(),
|
| + "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
|
| + {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
|
| + "TaskScheduler.TaskLatency.UserVisibleTaskPriority"},
|
| + {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE).MayBlock(),
|
| + "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
|
| + {TaskTraits()
|
| + .WithPriority(TaskPriority::USER_VISIBLE)
|
| + .WithBaseSyncPrimitives(),
|
| + "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
|
| + {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
|
| + "TaskScheduler.TaskLatency.UserBlockingTaskPriority"},
|
| + {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING).MayBlock(),
|
| + "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"},
|
| + {TaskTraits()
|
| + .WithPriority(TaskPriority::USER_BLOCKING)
|
| + .WithBaseSyncPrimitives(),
|
| + "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"}};
|
| +
|
| + for (const auto& test : tests) {
|
| + auto task =
|
| + MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), test.traits, TimeDelta());
|
| + ASSERT_TRUE(tracker.WillPostTask(task.get()));
|
| +
|
| + HistogramTester tester;
|
| + EXPECT_TRUE(tracker.RunTask(std::move(task), SequenceToken::Create()));
|
| + tester.ExpectTotalCount(test.expected_histogram, 1);
|
| + }
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace base
|
|
|