Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc

Issue 2268163002: Add sub-metrics for Event.Latency.TouchToFirstScrollUpdateSwapBegin (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl try Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698