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

Unified Diff: content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc

Issue 1861733002: Add touch drag UMA latency metric. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix everything. Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
index 9b757dc88589a821790c4b755673fd3702700f97..536fa68402125e7f442d1eddcfe99d848a34559b 100644
--- a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
+++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
@@ -6,9 +6,12 @@
#include "content/browser/renderer_host/input/render_widget_host_latency_tracker.h"
#include "content/common/input/synthetic_web_input_event_builders.h"
#include "content/public/browser/native_web_keyboard_event.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using base::Bucket;
using blink::WebInputEvent;
+using testing::ElementsAre;
namespace content {
namespace {
@@ -74,6 +77,10 @@ class RenderWidgetHostLatencyTrackerTest : public testing::Test {
histogram_tester_.reset(new base::HistogramTester());
}
+ const base::HistogramTester& histogram_tester() {
+ return *histogram_tester_;
+ }
+
private:
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTest);
const int kTestRoutingId = 3;
@@ -100,7 +107,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) {
EXPECT_TRUE(scroll_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
EXPECT_EQ(1U, scroll_latency.input_coordinates_size());
- tracker()->OnInputEventAck(scroll, &scroll_latency);
+ tracker()->OnInputEventAck(scroll, &scroll_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
}
{
@@ -118,7 +126,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) {
EXPECT_TRUE(wheel_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
EXPECT_EQ(1U, wheel_latency.input_coordinates_size());
- tracker()->OnInputEventAck(wheel, &wheel_latency);
+ tracker()->OnInputEventAck(wheel, &wheel_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
}
{
@@ -135,7 +144,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, TestHistograms) {
EXPECT_TRUE(touch_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
EXPECT_EQ(2U, touch_latency.input_coordinates_size());
- tracker()->OnInputEventAck(touch, &touch_latency);
+ tracker()->OnInputEventAck(touch, &touch_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
tracker()->OnFrameSwapped(touch_latency);
}
@@ -177,7 +187,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
// Don't include the rendering schedule component, since we're testing the
// case where rendering isn't scheduled.
tracker()->OnInputEvent(scroll, &scroll_latency);
- tracker()->OnInputEventAck(scroll, &scroll_latency);
+ tracker()->OnInputEventAck(scroll, &scroll_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(scroll_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT, 0, nullptr));
EXPECT_TRUE(scroll_latency.terminated());
@@ -189,7 +200,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
ui::LatencyInfo wheel_latency;
AddFakeComponents(*tracker(), &wheel_latency);
tracker()->OnInputEvent(wheel, &wheel_latency);
- tracker()->OnInputEventAck(wheel, &wheel_latency);
+ tracker()->OnInputEventAck(wheel, &wheel_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(wheel_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT, 0, nullptr));
EXPECT_TRUE(wheel_latency.terminated());
@@ -201,7 +213,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
ui::LatencyInfo touch_latency;
AddFakeComponents(*tracker(), &touch_latency);
tracker()->OnInputEvent(touch, &touch_latency);
- tracker()->OnInputEventAck(touch, &touch_latency);
+ tracker()->OnInputEventAck(touch, &touch_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(touch_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT, 0, nullptr));
EXPECT_TRUE(touch_latency.terminated());
@@ -214,7 +227,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
ui::LatencyInfo mouse_latency;
AddFakeComponents(*tracker(), &mouse_latency);
tracker()->OnInputEvent(mouse_move, &mouse_latency);
- tracker()->OnInputEventAck(mouse_move, &mouse_latency);
+ tracker()->OnInputEventAck(mouse_move, &mouse_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(mouse_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT, 0, nullptr));
EXPECT_TRUE(mouse_latency.terminated());
@@ -226,7 +240,8 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
ui::LatencyInfo key_latency;
AddFakeComponents(*tracker(), &key_latency);
tracker()->OnInputEvent(key_event, &key_latency);
- tracker()->OnInputEventAck(key_event, &key_latency);
+ tracker()->OnInputEventAck(key_event, &key_latency,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(key_latency.FindLatency(
ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT, 0, nullptr));
EXPECT_TRUE(key_latency.terminated());
@@ -364,4 +379,62 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, ScrollLatency) {
EXPECT_EQ(3U, scroll_latency.latency_components().size());
}
+TEST_F(RenderWidgetHostLatencyTrackerTest, TouchBlockingAndQueueingTime) {
+ for (InputEventAckState blocking :
+ {INPUT_EVENT_ACK_STATE_NOT_CONSUMED, INPUT_EVENT_ACK_STATE_CONSUMED}) {
+ SyntheticWebTouchEvent event;
+ event.PressPoint(1, 1);
+
+ ui::LatencyInfo latency_start;
+ tracker()->OnInputEvent(event, &latency_start);
+ tracker()->OnInputEventAck(event, &latency_start,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+
+ ui::LatencyInfo latency_move;
+ event.MovePoint(0, 20, 20);
+ tracker()->OnInputEvent(event, &latency_move);
+
+ EXPECT_TRUE(latency_move.FindLatency(
+ ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, nullptr));
+ EXPECT_TRUE(
+ latency_move.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
+ tracker()->latency_component_id(), nullptr));
+
+ EXPECT_EQ(2U, latency_move.latency_components().size());
+
+ ui::LatencyInfo fake_latency_move;
+ fake_latency_move.AddLatencyNumberWithTimestamp(
+ ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
+ tracker()->latency_component_id(), 0,
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(1), 1);
+
+ fake_latency_move.AddLatencyNumberWithTimestamp(
+ ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT, 0, 0,
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(5), 1);
+
+ fake_latency_move.AddLatencyNumberWithTimestamp(
+ ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT, 0, 0,
+ base::TimeTicks() + base::TimeDelta::FromMilliseconds(12), 1);
+
+ // Call ComputeInputLatencyHistograms directly to avoid OnInputEventAck
+ // overwriting components.
+ tracker()->ComputeInputLatencyHistograms(event.type,
+ tracker()->latency_component_id(),
+ fake_latency_move, blocking);
+ }
+
+ EXPECT_THAT(histogram_tester().GetAllSamples(
+ "Event.Latency.QueueingTime.TouchMoveDefaultPrevented"),
+ ElementsAre(Bucket(4, 1)));
+ EXPECT_THAT(histogram_tester().GetAllSamples(
+ "Event.Latency.QueueingTime.TouchMoveDefaultAllowed"),
+ ElementsAre(Bucket(4, 1)));
+ EXPECT_THAT(histogram_tester().GetAllSamples(
+ "Event.Latency.BlockingTime.TouchMoveDefaultPrevented"),
+ ElementsAre(Bucket(7, 1)));
+ EXPECT_THAT(histogram_tester().GetAllSamples(
+ "Event.Latency.BlockingTime.TouchMoveDefaultAllowed"),
+ ElementsAre(Bucket(7, 1)));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698