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

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

Issue 2924943004: Add ScrollBegin.Touch/Wheel Event to UKM (Closed)
Patch Set: Rebase & edit UKM summary Created 3 years, 6 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
« no previous file with comments | « no previous file | tools/metrics/ukm/ukm.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "content/browser/renderer_host/input/render_widget_host_latency_tracker .h" 5 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker .h"
6 #include "base/metrics/metrics_hashes.h" 6 #include "base/metrics/metrics_hashes.h"
7 #include "base/test/histogram_tester.h" 7 #include "base/test/histogram_tester.h"
8 #include "components/metrics/proto/ukm/entry.pb.h" 8 #include "components/metrics/proto/ukm/entry.pb.h"
9 #include "components/rappor/public/rappor_utils.h" 9 #include "components/rappor/public/rappor_utils.h"
10 #include "components/rappor/test_rappor_service.h" 10 #include "components/rappor/test_rappor_service.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 else 139 else
140 return ::testing::AssertionFailure() << rappor_name 140 return ::testing::AssertionFailure() << rappor_name
141 << " rappor sample should be null"; 141 << " rappor sample should be null";
142 } 142 }
143 } 143 }
144 144
145 ::testing::AssertionResult AssertUkmReported(const char* event_name, 145 ::testing::AssertionResult AssertUkmReported(const char* event_name,
146 const char* metric_name) { 146 const char* metric_name) {
147 const ukm::TestUkmRecorder* ukm_recoder = 147 const ukm::TestUkmRecorder* ukm_recoder =
148 test_browser_client_.GetTestUkmRecorder(); 148 test_browser_client_.GetTestUkmRecorder();
149
149 size_t actual_event_count = 0; 150 size_t actual_event_count = 0;
150 for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) { 151 for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) {
151 const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i); 152 const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i);
152 if (entry->event_hash != base::HashMetricName(event_name)) 153 if (entry->event_hash != base::HashMetricName(event_name))
153 continue; 154 continue;
154 155
155 const ukm::UkmSource* source = 156 const ukm::UkmSource* source =
156 ukm_recoder->GetSourceForSourceId(entry->source_id); 157 ukm_recoder->GetSourceForSourceId(entry->source_id);
157 if (!source) 158 if (!source)
158 return ::testing::AssertionFailure() << "Source should not be null"; 159 return ::testing::AssertionFailure() << "Source should not be null";
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 const int kTestRoutingId = 3; 220 const int kTestRoutingId = 3;
220 const int kTestProcessId = 1; 221 const int kTestProcessId = 1;
221 std::unique_ptr<base::HistogramTester> histogram_tester_; 222 std::unique_ptr<base::HistogramTester> histogram_tester_;
222 RenderWidgetHostLatencyTracker tracker_; 223 RenderWidgetHostLatencyTracker tracker_;
223 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_; 224 RenderWidgetHostLatencyTrackerTestBrowserClient test_browser_client_;
224 ContentBrowserClient* old_browser_client_; 225 ContentBrowserClient* old_browser_client_;
225 }; 226 };
226 227
227 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) { 228 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToFirstScrollHistograms) {
228 const GURL url(kUrl); 229 const GURL url(kUrl);
230 size_t total_ukm_entry_count = 0;
229 contents()->NavigateAndCommit(url); 231 contents()->NavigateAndCommit(url);
230 for (bool rendering_on_main : {false, true}) { 232 for (bool rendering_on_main : {false, true}) {
231 ResetHistograms(); 233 ResetHistograms();
232 { 234 {
233 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( 235 auto wheel = SyntheticWebMouseWheelEventBuilder::Build(
234 blink::WebMouseWheelEvent::kPhaseChanged); 236 blink::WebMouseWheelEvent::kPhaseChanged);
235 base::TimeTicks now = base::TimeTicks::Now(); 237 base::TimeTicks now = base::TimeTicks::Now();
236 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); 238 wheel.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF());
237 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL); 239 ui::LatencyInfo wheel_latency(ui::SourceEventType::WHEEL);
238 wheel_latency.AddLatencyNumberWithTimestamp( 240 wheel_latency.AddLatencyNumberWithTimestamp(
239 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, 241 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT,
240 tracker()->latency_component_id(), 0, now, 1); 242 tracker()->latency_component_id(), 0, now, 1);
241 AddFakeComponentsWithTimeStamp(*tracker(), &wheel_latency, now); 243 AddFakeComponentsWithTimeStamp(*tracker(), &wheel_latency, now);
242 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main, now); 244 AddRenderingScheduledComponent(&wheel_latency, rendering_on_main, now);
243 tracker()->OnInputEvent(wheel, &wheel_latency); 245 tracker()->OnInputEvent(wheel, &wheel_latency);
244 EXPECT_TRUE(wheel_latency.FindLatency( 246 EXPECT_TRUE(wheel_latency.FindLatency(
245 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 247 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
246 tracker()->latency_component_id(), nullptr)); 248 tracker()->latency_component_id(), nullptr));
247 EXPECT_TRUE(wheel_latency.FindLatency( 249 EXPECT_TRUE(wheel_latency.FindLatency(
248 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); 250 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
249 tracker()->OnInputEventAck(wheel, &wheel_latency, 251 tracker()->OnInputEventAck(wheel, &wheel_latency,
250 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 252 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
251 tracker()->OnGpuSwapBuffersCompleted(wheel_latency); 253 tracker()->OnGpuSwapBuffersCompleted(wheel_latency);
252 254
255 // UKM metrics.
256 total_ukm_entry_count++;
257 EXPECT_TRUE(AssertUkmReported("Event.ScrollBegin.Wheel",
258 "TimeToScrollUpdateSwapBegin"));
253 // Rappor metrics. 259 // Rappor metrics.
254 EXPECT_TRUE( 260 EXPECT_TRUE(
255 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." 261 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
256 "TimeToScrollUpdateSwapBegin2", 262 "TimeToScrollUpdateSwapBegin2",
257 0)); 263 0));
258 EXPECT_TRUE( 264 EXPECT_TRUE(
259 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." 265 RapporSampleAssert("Event.Latency.ScrollBegin.Touch."
260 "TimeToScrollUpdateSwapBegin2", 266 "TimeToScrollUpdateSwapBegin2",
261 0)); 267 0));
262 EXPECT_TRUE( 268 EXPECT_TRUE(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2", 315 "Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2",
310 0)); 316 0));
311 EXPECT_TRUE(HistogramSizeEq( 317 EXPECT_TRUE(HistogramSizeEq(
312 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2", 318 "Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2",
313 0)); 319 0));
314 EXPECT_TRUE( 320 EXPECT_TRUE(
315 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0)); 321 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0));
316 322
317 ukm::TestUkmRecorder* test_ukm_recorder = 323 ukm::TestUkmRecorder* test_ukm_recorder =
318 test_browser_client_.GetTestUkmRecorder(); 324 test_browser_client_.GetTestUkmRecorder();
319 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); 325 EXPECT_EQ(1U, test_ukm_recorder->sources_count());
320 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); 326 EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
321 } 327 }
322 } 328 }
323 } 329 }
324 330
325 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) { 331 TEST_F(RenderWidgetHostLatencyTrackerTest, TestWheelToScrollHistograms) {
326 for (bool rendering_on_main : {false, true}) { 332 for (bool rendering_on_main : {false, true}) {
327 ResetHistograms(); 333 ResetHistograms();
328 { 334 {
329 auto wheel = SyntheticWebMouseWheelEventBuilder::Build( 335 auto wheel = SyntheticWebMouseWheelEventBuilder::Build(
330 blink::WebMouseWheelEvent::kPhaseChanged); 336 blink::WebMouseWheelEvent::kPhaseChanged);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 1)); 397 1));
392 EXPECT_TRUE( 398 EXPECT_TRUE(
393 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1)); 399 HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 1));
394 } 400 }
395 } 401 }
396 } 402 }
397 403
398 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) { 404 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToFirstScrollHistograms) {
399 const GURL url(kUrl); 405 const GURL url(kUrl);
400 contents()->NavigateAndCommit(url); 406 contents()->NavigateAndCommit(url);
407 size_t total_ukm_entry_count = 0;
401 for (bool rendering_on_main : {false, true}) { 408 for (bool rendering_on_main : {false, true}) {
402 ResetHistograms(); 409 ResetHistograms();
403 { 410 {
404 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate( 411 auto scroll = SyntheticWebGestureEventBuilder::BuildScrollUpdate(
405 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen); 412 5.f, -5.f, 0, blink::kWebGestureDeviceTouchscreen);
406 base::TimeTicks now = base::TimeTicks::Now(); 413 base::TimeTicks now = base::TimeTicks::Now();
407 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF()); 414 scroll.SetTimeStampSeconds((now - base::TimeTicks()).InSecondsF());
408 ui::LatencyInfo scroll_latency; 415 ui::LatencyInfo scroll_latency;
409 scroll_latency.AddLatencyNumberWithTimestamp( 416 scroll_latency.AddLatencyNumberWithTimestamp(
410 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, 417 ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT,
(...skipping 25 matching lines...) Expand all
436 EXPECT_TRUE(touch_latency.FindLatency( 443 EXPECT_TRUE(touch_latency.FindLatency(
437 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 444 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
438 tracker()->latency_component_id(), nullptr)); 445 tracker()->latency_component_id(), nullptr));
439 EXPECT_TRUE(touch_latency.FindLatency( 446 EXPECT_TRUE(touch_latency.FindLatency(
440 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr)); 447 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
441 tracker()->OnInputEventAck(touch, &touch_latency, 448 tracker()->OnInputEventAck(touch, &touch_latency,
442 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 449 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
443 tracker()->OnGpuSwapBuffersCompleted(touch_latency); 450 tracker()->OnGpuSwapBuffersCompleted(touch_latency);
444 } 451 }
445 452
453 // UKM metrics.
454 total_ukm_entry_count++;
455 EXPECT_TRUE(AssertUkmReported("Event.ScrollBegin.Touch",
456 "TimeToScrollUpdateSwapBegin"));
446 // Rappor metrics. 457 // Rappor metrics.
447 EXPECT_TRUE( 458 EXPECT_TRUE(
448 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch." 459 RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
449 "TimeToScrollUpdateSwapBegin2", 460 "TimeToScrollUpdateSwapBegin2",
450 0)); 461 0));
451 EXPECT_TRUE( 462 EXPECT_TRUE(
452 RapporSampleAssert("Event.Latency.ScrollBegin.Touch." 463 RapporSampleAssert("Event.Latency.ScrollBegin.Touch."
453 "TimeToScrollUpdateSwapBegin2", 464 "TimeToScrollUpdateSwapBegin2",
454 2)); 465 2));
455 EXPECT_TRUE( 466 EXPECT_TRUE(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0)); 515 "Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2_Impl", 0));
505 EXPECT_TRUE(HistogramSizeEq( 516 EXPECT_TRUE(HistogramSizeEq(
506 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0)); 517 "Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2", 0));
507 EXPECT_TRUE(HistogramSizeEq( 518 EXPECT_TRUE(HistogramSizeEq(
508 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0)); 519 "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0));
509 EXPECT_TRUE( 520 EXPECT_TRUE(
510 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0)); 521 HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0));
511 522
512 ukm::TestUkmRecorder* test_ukm_recorder = 523 ukm::TestUkmRecorder* test_ukm_recorder =
513 test_browser_client_.GetTestUkmRecorder(); 524 test_browser_client_.GetTestUkmRecorder();
514 EXPECT_EQ(0U, test_ukm_recorder->sources_count()); 525 EXPECT_EQ(1U, test_ukm_recorder->sources_count());
515 EXPECT_EQ(0U, test_ukm_recorder->entries_count()); 526 EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
516 } 527 }
517 } 528 }
518 529
519 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) { 530 TEST_F(RenderWidgetHostLatencyTrackerTest, TestTouchToScrollHistograms) {
520 const GURL url(kUrl); 531 const GURL url(kUrl);
521 contents()->NavigateAndCommit(url); 532 contents()->NavigateAndCommit(url);
522 size_t total_ukm_entry_count = 0; 533 size_t total_ukm_entry_count = 0;
523 for (bool rendering_on_main : {false, true}) { 534 for (bool rendering_on_main : {false, true}) {
524 ResetHistograms(); 535 ResetHistograms();
525 EXPECT_EQ(0, 536 EXPECT_EQ(0,
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 1279
1269 tracker()->OnInputEventAck(wheel_event, &latency, ack_state); 1280 tracker()->OnInputEventAck(wheel_event, &latency, ack_state);
1270 } 1281 }
1271 1282
1272 EXPECT_THAT(histogram_tester().GetAllSamples( 1283 EXPECT_THAT(histogram_tester().GetAllSamples(
1273 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"), 1284 "Event.Latency.QueueingTime.MouseWheelDefaultAllowed"),
1274 ElementsAre(Bucket(14, 1))); 1285 ElementsAre(Bucket(14, 1)));
1275 } 1286 }
1276 1287
1277 } // namespace content 1288 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/ukm/ukm.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698