Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc |
index 80e9810e1de559f237d9230bbde6d513059948ce..9a4f4ffe4570cdd1801657d2e7618a4a5d7de85a 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc |
@@ -12,6 +12,7 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
+#include "base/test/histogram_tester.h" |
#include "base/test/simple_test_tick_clock.h" |
#include "cc/output/begin_frame_args.h" |
#include "cc/test/ordered_simple_task_runner.h" |
@@ -3945,5 +3946,42 @@ TEST_F(RendererSchedulerImplTest, UnresponsiveMainThreadWithContention) { |
scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); |
} |
+TEST_F(RendererSchedulerImplTest, MaxQueueingTimeMetric) { |
+ base::HistogramTester tester; |
+ // Start with a long task. The long queueing time of the task will be |
+ // ignored because max queueing time is recorded after navigation start |
tdresser
2017/05/30 13:34:44
is recorded -> is only recorded
Liquan (Max) Gu
2017/05/30 19:57:19
Done.
|
+ // (OnCommitProvisionalLoad). |
+ AdvanceTimeWithTask(10); |
+ // Navigation start |
+ scheduler_->OnCommitProvisionalLoad(); |
+ // The max queueing time of the following task will be recorded. |
+ AdvanceTimeWithTask(1); |
+ scheduler_->OnCommitProvisionalLoad(); |
+ // The expected queueing time of 1s task in 1s window is 500ms. |
+ tester.ExpectUniqueSample("RendererScheduler.MaxQueueingTime", 500, 1); |
+} |
+ |
+void SetQueueingTimeInThread(RendererSchedulerImpl* scheduler, |
+ base::SimpleTestTickClock* clock) { |
+ // Navigation of a webpage start. |
+ scheduler->OnCommitProvisionalLoad(); |
+ // Queueing time is recorded with time advanced. |
+ clock->Advance(base::TimeDelta::FromSeconds(1)); |
+} |
+ |
+TEST_F(RendererSchedulerImplTest, MaxQueueingTimeMetricInTwoThreads) { |
tdresser
2017/05/30 13:34:44
We're only ever going to be adding EQT information
Liquan (Max) Gu
2017/05/30 19:57:19
Talked offline with Tim, as SingleSampleMetric alr
|
+ base::HistogramTester tester; |
+ |
+ default_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&SetQueueingTimeInThread, scheduler_.get(), clock_.get())); |
+ RunUntilIdle(); |
+ // Histogram won't be set until next navigation start. |
+ tester.ExpectUniqueSample("RendererScheduler.MaxQueueingTime", 500, 0); |
+ scheduler_->OnCommitProvisionalLoad(); |
+ // The expected queueing time of 1s task in 1s window is 500ms. |
+ tester.ExpectUniqueSample("RendererScheduler.MaxQueueingTime", 500, 1); |
+} |
+ |
} // namespace scheduler |
} // namespace blink |