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..b4152245b3196d49798ce62490c366271a850824 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" |
@@ -885,5 +888,63 @@ 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; |
+ HistogramBase* const expected_histogram; |
+ } tests[] = { |
+ {TaskTraits().WithPriority(TaskPriority::BACKGROUND), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::BACKGROUND)][0]}, |
+ {TaskTraits().WithPriority(TaskPriority::BACKGROUND).MayBlock(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::BACKGROUND)][1]}, |
+ {TaskTraits() |
+ .WithPriority(TaskPriority::BACKGROUND) |
+ .WithBaseSyncPrimitives(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::BACKGROUND)][1]}, |
+ {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_VISIBLE)][0]}, |
+ {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE).MayBlock(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_VISIBLE)][1]}, |
+ {TaskTraits() |
+ .WithPriority(TaskPriority::USER_VISIBLE) |
+ .WithBaseSyncPrimitives(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_VISIBLE)][1]}, |
+ {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_BLOCKING)][0]}, |
+ {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING).MayBlock(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_BLOCKING)][1]}, |
+ {TaskTraits() |
+ .WithPriority(TaskPriority::USER_BLOCKING) |
+ .WithBaseSyncPrimitives(), |
+ tracker.task_latency_histograms_[static_cast<int>( |
+ TaskPriority::USER_BLOCKING)][1]}}; |
gab
2017/01/05 19:25:46
Use HistogramTester instead of friending and using
fdoray
2017/01/05 20:13:38
Done.
|
+ |
+ for (const auto& test : tests) { |
gab
2017/01/05 19:25:46
Interesting use of auto! I thought something was w
fdoray
2017/01/05 20:13:38
Acknowledged.
|
+ // Take a snapshot of the histogram so that the snapshot below only contains |
+ // increments that occurred within this scope. |
+ test.expected_histogram->SnapshotDelta(); |
+ |
+ auto task = |
+ MakeUnique<Task>(FROM_HERE, Bind(&DoNothing), test.traits, TimeDelta()); |
+ ASSERT_TRUE(tracker.WillPostTask(task.get())); |
+ EXPECT_TRUE(tracker.RunTask(std::move(task), SequenceToken::Create())); |
+ EXPECT_EQ(1, test.expected_histogram->SnapshotDelta()->TotalCount()); |
+ } |
+} |
+ |
} // namespace internal |
} // namespace base |