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 |