OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/test/histogram_tester.h" | 5 #include "base/test/histogram_tester.h" |
6 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker .h" | 6 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker .h" |
7 #include "content/common/input/synthetic_web_input_event_builders.h" | 7 #include "content/common/input/synthetic_web_input_event_builders.h" |
8 #include "content/public/browser/native_web_keyboard_event.h" | 8 #include "content/public/browser/native_web_keyboard_event.h" |
9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 histogram_tester_->GetAllSamples(histogram_name).size(); | 65 histogram_tester_->GetAllSamples(histogram_name).size(); |
66 if (static_cast<uint64_t>(size) == histogram_size) { | 66 if (static_cast<uint64_t>(size) == histogram_size) { |
67 return ::testing::AssertionSuccess(); | 67 return ::testing::AssertionSuccess(); |
68 } else { | 68 } else { |
69 return ::testing::AssertionFailure() << histogram_name << " expected " | 69 return ::testing::AssertionFailure() << histogram_name << " expected " |
70 << size << " entries, but had " | 70 << size << " entries, but had " |
71 << histogram_size; | 71 << histogram_size; |
72 } | 72 } |
73 } | 73 } |
74 | 74 |
75 void HistogramTotalCountEq(const std::string& name, int count) { | |
tdresser
2016/08/24 12:48:57
Since this contains an expectation, it should have
lanwei
2016/08/25 04:17:11
Done.
| |
76 histogram_tester_->ExpectTotalCount(name, count); | |
77 } | |
78 | |
75 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } | 79 RenderWidgetHostLatencyTracker* tracker() { return &tracker_; } |
76 void ResetHistograms() { | 80 void ResetHistograms() { |
77 histogram_tester_.reset(new base::HistogramTester()); | 81 histogram_tester_.reset(new base::HistogramTester()); |
78 } | 82 } |
79 | 83 |
80 const base::HistogramTester& histogram_tester() { | 84 const base::HistogramTester& histogram_tester() { |
81 return *histogram_tester_; | 85 return *histogram_tester_; |
82 } | 86 } |
83 | 87 |
84 private: | 88 private: |
85 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); | 89 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest); |
86 const int kTestRoutingId = 3; | 90 const int kTestRoutingId = 3; |
87 const int kTestProcessId = 1; | 91 const int kTestProcessId = 1; |
88 std::unique_ptr<base::HistogramTester> histogram_tester_; | 92 std::unique_ptr<base::HistogramTester> histogram_tester_; |
89 RenderWidgetHostLatencyTracker tracker_; | 93 RenderWidgetHostLatencyTracker tracker_; |
90 }; | 94 }; |
91 | 95 |
92 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { | 96 TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) { |
93 for (bool rendering_on_main : { false, true }) { | 97 for (bool rendering_on_main : {false, true}) { |
94 for (bool is_running_navigation_hint_task : {false, true}) { | 98 for (bool is_running_navigation_hint_task : {false, true}) { |
95 ResetHistograms(); | 99 ResetHistograms(); |
96 { | 100 { |
97 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | 101 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( |
98 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | 102 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); |
99 scroll.timeStampSeconds = | 103 scroll.timeStampSeconds = |
100 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); | 104 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
101 ui::LatencyInfo scroll_latency; | 105 ui::LatencyInfo scroll_latency; |
102 AddFakeComponents(*tracker(), &scroll_latency); | 106 scroll_latency.AddLatencyNumber( |
107 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0); | |
103 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); | 108 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); |
104 tracker()->OnInputEvent(scroll, &scroll_latency); | 109 tracker()->OnInputEvent(scroll, &scroll_latency); |
105 EXPECT_TRUE(scroll_latency.FindLatency( | 110 EXPECT_TRUE(scroll_latency.FindLatency( |
106 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 111 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
107 tracker()->latency_component_id(), nullptr)); | 112 tracker()->latency_component_id(), nullptr)); |
108 EXPECT_TRUE(scroll_latency.FindLatency( | 113 EXPECT_TRUE(scroll_latency.FindLatency( |
109 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | 114 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); |
110 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | 115 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); |
111 tracker()->OnInputEventAck(scroll, &scroll_latency, | 116 tracker()->OnInputEventAck(scroll, &scroll_latency, |
112 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 117 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 EXPECT_TRUE( | 165 EXPECT_TRUE( |
161 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin_" | 166 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin_" |
162 "IsRunningNavigationHintTask", | 167 "IsRunningNavigationHintTask", |
163 is_running_navigation_hint_task ? 1 : 0)); | 168 is_running_navigation_hint_task ? 1 : 0)); |
164 EXPECT_TRUE( | 169 EXPECT_TRUE( |
165 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); | 170 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); |
166 EXPECT_TRUE( | 171 EXPECT_TRUE( |
167 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin_" | 172 HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin_" |
168 "IsRunningNavigationHintTask", | 173 "IsRunningNavigationHintTask", |
169 is_running_navigation_hint_task ? 1 : 0)); | 174 is_running_navigation_hint_task ? 1 : 0)); |
175 EXPECT_TRUE(HistogramSizeEq( | |
176 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Main", | |
177 rendering_on_main ? 1 : 0)); | |
178 EXPECT_TRUE(HistogramSizeEq( | |
179 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Impl", | |
180 rendering_on_main ? 0 : 1)); | |
181 EXPECT_TRUE(HistogramSizeEq( | |
182 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", | |
183 rendering_on_main ? 1 : 0)); | |
184 EXPECT_TRUE(HistogramSizeEq( | |
185 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", | |
186 rendering_on_main ? 0 : 1)); | |
187 EXPECT_TRUE(HistogramSizeEq( | |
188 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 1)); | |
189 EXPECT_TRUE(HistogramSizeEq( | |
190 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); | |
191 EXPECT_TRUE( | |
192 HistogramSizeEq("Event.Latency.FirstScrollUpdate.GpuSwap", 1)); | |
170 EXPECT_TRUE( | 193 EXPECT_TRUE( |
171 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", | 194 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", |
172 rendering_on_main ? 1 : 0)); | 195 rendering_on_main ? 1 : 0)); |
173 EXPECT_TRUE( | 196 EXPECT_TRUE( |
174 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", | 197 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", |
175 rendering_on_main ? 0 : 1)); | 198 rendering_on_main ? 0 : 1)); |
176 EXPECT_TRUE(HistogramSizeEq( | 199 EXPECT_TRUE(HistogramSizeEq( |
177 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", | 200 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", |
178 rendering_on_main ? 1 : 0)); | 201 rendering_on_main ? 1 : 0)); |
179 EXPECT_TRUE(HistogramSizeEq( | 202 EXPECT_TRUE(HistogramSizeEq( |
180 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", | 203 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", |
181 rendering_on_main ? 0 : 1)); | 204 rendering_on_main ? 0 : 1)); |
182 EXPECT_TRUE(HistogramSizeEq( | 205 EXPECT_TRUE(HistogramSizeEq( |
183 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); | 206 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 1)); |
184 EXPECT_TRUE(HistogramSizeEq( | 207 EXPECT_TRUE(HistogramSizeEq( |
185 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); | 208 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1)); |
186 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); | 209 EXPECT_TRUE(HistogramSizeEq("Event.Latency.ScrollUpdate.GpuSwap", 1)); |
210 | |
211 { | |
212 auto second_scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( | |
213 5.f, -5.f, 0, blink::WebGestureDeviceTouchscreen); | |
214 ui::LatencyInfo scroll_latency; | |
215 scroll_latency.AddLatencyNumber( | |
216 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0); | |
217 scroll_latency.AddLatencyNumber( | |
218 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); | |
219 scroll_latency.AddLatencyNumber( | |
220 ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0, 0); | |
221 scroll_latency.AddLatencyNumber( | |
222 ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 0); | |
223 scroll_latency.AddLatencyNumber( | |
224 ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0, 0); | |
225 AddRenderingScheduledComponent(&scroll_latency, rendering_on_main); | |
226 tracker()->OnInputEvent(second_scroll, &scroll_latency); | |
227 EXPECT_TRUE(scroll_latency.FindLatency( | |
228 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | |
229 tracker()->latency_component_id(), nullptr)); | |
230 EXPECT_TRUE(scroll_latency.FindLatency( | |
231 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); | |
232 EXPECT_FALSE(scroll_latency.FindLatency( | |
233 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, 0, | |
234 nullptr)); | |
235 EXPECT_EQ(1U, scroll_latency.input_coordinates_size()); | |
236 tracker()->OnInputEventAck(second_scroll, &scroll_latency, | |
237 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
238 tracker()->OnFrameSwapped(scroll_latency, | |
239 is_running_navigation_hint_task); | |
240 } | |
241 | |
242 HistogramTotalCountEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", | |
243 1); | |
244 HistogramTotalCountEq( | |
245 "Event.Latency.TouchToFirstScrollUpdateSwapBegin_" | |
246 "IsRunningNavigationHintTask", | |
247 is_running_navigation_hint_task ? 1 : 0); | |
248 HistogramTotalCountEq("Event.Latency.TouchToScrollUpdateSwapBegin", 2); | |
249 HistogramTotalCountEq( | |
250 "Event.Latency.TouchToScrollUpdateSwapBegin_" | |
251 "IsRunningNavigationHintTask", | |
252 is_running_navigation_hint_task ? 2 : 0); | |
253 HistogramTotalCountEq( | |
254 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Main", | |
255 rendering_on_main ? 1 : 0); | |
256 HistogramTotalCountEq( | |
257 "Event.Latency.FirstScrollUpdate.FirstTouchToHandled_Impl", | |
258 rendering_on_main ? 0 : 1); | |
259 HistogramTotalCountEq( | |
260 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", | |
261 rendering_on_main ? 1 : 0); | |
262 HistogramTotalCountEq( | |
263 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", | |
264 rendering_on_main ? 0 : 1); | |
265 HistogramTotalCountEq( | |
266 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 1); | |
267 HistogramTotalCountEq( | |
268 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1); | |
269 HistogramTotalCountEq("Event.Latency.FirstScrollUpdate.GpuSwap", 1); | |
270 HistogramTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", | |
271 rendering_on_main ? 2 : 0); | |
272 HistogramTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", | |
273 rendering_on_main ? 0 : 2); | |
274 HistogramTotalCountEq( | |
275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", | |
276 rendering_on_main ? 2 : 0); | |
277 HistogramTotalCountEq( | |
278 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", | |
279 rendering_on_main ? 0 : 2); | |
280 HistogramTotalCountEq( | |
281 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 2); | |
282 HistogramTotalCountEq( | |
283 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 2); | |
284 HistogramTotalCountEq("Event.Latency.ScrollUpdate.GpuSwap", 2); | |
187 } | 285 } |
188 } | 286 } |
189 } | 287 } |
190 | 288 |
191 TEST_F(RenderWidgetHostLatencyTrackerTest, | 289 TEST_F(RenderWidgetHostLatencyTrackerTest, |
192 LatencyTerminatedOnAckIfRenderingNotScheduled) { | 290 LatencyTerminatedOnAckIfRenderingNotScheduled) { |
193 { | 291 { |
194 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( | 292 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( |
195 5.f, -5.f, blink::WebGestureDeviceTouchscreen); | 293 5.f, -5.f, blink::WebGestureDeviceTouchscreen); |
196 ui::LatencyInfo scroll_latency; | 294 ui::LatencyInfo scroll_latency; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
258 EXPECT_TRUE(key_latency.terminated()); | 356 EXPECT_TRUE(key_latency.terminated()); |
259 } | 357 } |
260 | 358 |
261 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); | 359 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); |
262 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); | 360 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); |
263 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); | 361 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); |
264 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); | 362 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); |
265 EXPECT_TRUE( | 363 EXPECT_TRUE( |
266 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); | 364 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); |
267 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); | 365 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); |
366 EXPECT_TRUE(HistogramSizeEq( | |
367 "Event.Latency.FirstScrollUpdate.TouchToHandled_Main", 0)); | |
368 EXPECT_TRUE(HistogramSizeEq( | |
369 "Event.Latency.FirstScrollUpdate.TouchToHandled_Impl", 0)); | |
370 EXPECT_TRUE(HistogramSizeEq( | |
371 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", 0)); | |
372 EXPECT_TRUE(HistogramSizeEq( | |
373 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", 0)); | |
374 EXPECT_TRUE(HistogramSizeEq( | |
375 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 0)); | |
376 EXPECT_TRUE(HistogramSizeEq( | |
377 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 0)); | |
378 EXPECT_TRUE(HistogramSizeEq("Event.Latency.FirstScrollUpdate.GpuSwap", 0)); | |
268 EXPECT_TRUE( | 379 EXPECT_TRUE( |
269 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0)); | 380 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0)); |
270 EXPECT_TRUE( | 381 EXPECT_TRUE( |
271 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0)); | 382 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0)); |
272 EXPECT_TRUE(HistogramSizeEq( | 383 EXPECT_TRUE(HistogramSizeEq( |
273 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0)); | 384 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0)); |
274 EXPECT_TRUE(HistogramSizeEq( | 385 EXPECT_TRUE(HistogramSizeEq( |
275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0)); | 386 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0)); |
276 EXPECT_TRUE(HistogramSizeEq( | 387 EXPECT_TRUE(HistogramSizeEq( |
277 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0)); | 388 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0)); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
572 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), | 683 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), |
573 ElementsAre(Bucket( | 684 ElementsAre(Bucket( |
574 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 685 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
575 EXPECT_THAT(histogram_tester().GetAllSamples( | 686 EXPECT_THAT(histogram_tester().GetAllSamples( |
576 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), | 687 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), |
577 ElementsAre(Bucket( | 688 ElementsAre(Bucket( |
578 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); | 689 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); |
579 } | 690 } |
580 | 691 |
581 } // namespace content | 692 } // namespace content |
OLD | NEW |