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

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: Add flag in the macro 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 ExpectTotalCountEq(const std::string& name, int count) {
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
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));
170 EXPECT_TRUE( 175 EXPECT_TRUE(
176 HistogramSizeEq("Event.Latency.FirstScrollUpdate.TouchToHandled_Main",
177 rendering_on_main ? 1 : 0));
178 EXPECT_TRUE(
179 HistogramSizeEq("Event.Latency.FirstScrollUpdate.TouchToHandled_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));
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 ExpectTotalCountEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1);
243 ExpectTotalCountEq(
244 "Event.Latency.TouchToFirstScrollUpdateSwapBegin_"
245 "IsRunningNavigationHintTask",
246 is_running_navigation_hint_task ? 1 : 0);
247 ExpectTotalCountEq("Event.Latency.TouchToScrollUpdateSwapBegin", 2);
248 ExpectTotalCountEq(
249 "Event.Latency.TouchToScrollUpdateSwapBegin_"
250 "IsRunningNavigationHintTask",
251 is_running_navigation_hint_task ? 2 : 0);
252 ExpectTotalCountEq("Event.Latency.FirstScrollUpdate.TouchToHandled_Main",
253 rendering_on_main ? 1 : 0);
254 ExpectTotalCountEq("Event.Latency.FirstScrollUpdate.TouchToHandled_Impl",
255 rendering_on_main ? 0 : 1);
256 ExpectTotalCountEq(
257 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main",
258 rendering_on_main ? 1 : 0);
259 ExpectTotalCountEq(
260 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl",
261 rendering_on_main ? 0 : 1);
262 ExpectTotalCountEq(
263 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 1);
264 ExpectTotalCountEq(
265 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 1);
266 ExpectTotalCountEq("Event.Latency.FirstScrollUpdate.GpuSwap", 1);
267 ExpectTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Main",
268 rendering_on_main ? 2 : 0);
269 ExpectTotalCountEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl",
270 rendering_on_main ? 0 : 2);
271 ExpectTotalCountEq(
272 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main",
273 rendering_on_main ? 2 : 0);
274 ExpectTotalCountEq(
275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl",
276 rendering_on_main ? 0 : 2);
277 ExpectTotalCountEq(
278 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 2);
279 ExpectTotalCountEq(
280 "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 2);
281 ExpectTotalCountEq("Event.Latency.ScrollUpdate.GpuSwap", 2);
187 } 282 }
188 } 283 }
189 } 284 }
190 285
191 TEST_F(RenderWidgetHostLatencyTrackerTest, 286 TEST_F(RenderWidgetHostLatencyTrackerTest,
192 LatencyTerminatedOnAckIfRenderingNotScheduled) { 287 LatencyTerminatedOnAckIfRenderingNotScheduled) {
193 { 288 {
194 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin( 289 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollBegin(
195 5.f, -5.f, blink::WebGestureDeviceTouchscreen); 290 5.f, -5.f, blink::WebGestureDeviceTouchscreen);
196 ui::LatencyInfo scroll_latency; 291 ui::LatencyInfo scroll_latency;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 EXPECT_TRUE(key_latency.terminated()); 353 EXPECT_TRUE(key_latency.terminated());
259 } 354 }
260 355
261 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1)); 356 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelUI", 1));
262 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1)); 357 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchUI", 1));
263 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1)); 358 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.WheelAcked", 1));
264 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1)); 359 EXPECT_TRUE(HistogramSizeEq("Event.Latency.Browser.TouchAcked", 1));
265 EXPECT_TRUE( 360 EXPECT_TRUE(
266 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1)); 361 HistogramSizeEq("Event.Latency.TouchToFirstScrollUpdateSwapBegin", 1));
267 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1)); 362 EXPECT_TRUE(HistogramSizeEq("Event.Latency.TouchToScrollUpdateSwapBegin", 1));
363 EXPECT_TRUE(HistogramSizeEq(
364 "Event.Latency.FirstScrollUpdate.TouchToHandled_Main", 0));
365 EXPECT_TRUE(HistogramSizeEq(
366 "Event.Latency.FirstScrollUpdate.TouchToHandled_Impl", 0));
367 EXPECT_TRUE(HistogramSizeEq(
368 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Main", 0));
369 EXPECT_TRUE(HistogramSizeEq(
370 "Event.Latency.FirstScrollUpdate.HandledToRendererSwap_Impl", 0));
371 EXPECT_TRUE(HistogramSizeEq(
372 "Event.Latency.FirstScrollUpdate.RendererSwapToBrowserNotified", 0));
373 EXPECT_TRUE(HistogramSizeEq(
374 "Event.Latency.FirstScrollUpdate.BrowserNotifiedToBeforeGpuSwap", 0));
375 EXPECT_TRUE(HistogramSizeEq("Event.Latency.FirstScrollUpdate.GpuSwap", 0));
268 EXPECT_TRUE( 376 EXPECT_TRUE(
269 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0)); 377 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Main", 0));
270 EXPECT_TRUE( 378 EXPECT_TRUE(
271 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0)); 379 HistogramSizeEq("Event.Latency.ScrollUpdate.TouchToHandled_Impl", 0));
272 EXPECT_TRUE(HistogramSizeEq( 380 EXPECT_TRUE(HistogramSizeEq(
273 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0)); 381 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", 0));
274 EXPECT_TRUE(HistogramSizeEq( 382 EXPECT_TRUE(HistogramSizeEq(
275 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0)); 383 "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", 0));
276 EXPECT_TRUE(HistogramSizeEq( 384 EXPECT_TRUE(HistogramSizeEq(
277 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0)); 385 "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", 0));
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"), 680 "Event.Latency.BlockingTime.TouchEndDefaultPrevented"),
573 ElementsAre(Bucket( 681 ElementsAre(Bucket(
574 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); 682 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1)));
575 EXPECT_THAT(histogram_tester().GetAllSamples( 683 EXPECT_THAT(histogram_tester().GetAllSamples(
576 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"), 684 "Event.Latency.BlockingTime.TouchEndDefaultAllowed"),
577 ElementsAre(Bucket( 685 ElementsAre(Bucket(
578 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1))); 686 touchend_timestamps_ms[2] - touchend_timestamps_ms[1], 1)));
579 } 687 }
580 688
581 } // namespace content 689 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698