Chromium Code Reviews| 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 |