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

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

Issue 2756893002: Add Keyboard Latency UMA Metrics. (Closed)
Patch Set: mfomitchev responses, rebase Created 3 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 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 "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 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram_functions.h" 10 #include "base/metrics/histogram_functions.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 WebInputEvent::Type type, 96 WebInputEvent::Type type,
97 int64_t latency_component_id, 97 int64_t latency_component_id,
98 const LatencyInfo& latency, 98 const LatencyInfo& latency,
99 InputEventAckState ack_result) { 99 InputEventAckState ack_result) {
100 // If this event was coalesced into another event, ignore it, as the event it 100 // If this event was coalesced into another event, ignore it, as the event it
101 // was coalesced into will reflect the full latency. 101 // was coalesced into will reflect the full latency.
102 if (latency.coalesced()) 102 if (latency.coalesced())
103 return; 103 return;
104 104
105 if (type != blink::WebInputEvent::kMouseWheel && 105 if (type != blink::WebInputEvent::kMouseWheel &&
106 !WebInputEvent::IsTouchEventType(type)) { 106 !WebInputEvent::IsTouchEventType(type) &&
107 !WebInputEvent::IsKeyboardEventType(type)) {
107 return; 108 return;
108 } 109 }
109 110
110 LatencyInfo::LatencyComponent rwh_component; 111 LatencyInfo::LatencyComponent rwh_component;
111 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 112 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
112 latency_component_id, &rwh_component)) { 113 latency_component_id, &rwh_component)) {
113 return; 114 return;
114 } 115 }
115 DCHECK_EQ(rwh_component.event_count, 1u); 116 DCHECK_EQ(rwh_component.event_count, 1u);
116 117
117 bool multi_finger_touch_gesture = 118 bool multi_finger_touch_gesture =
118 WebInputEvent::IsTouchEventType(type) && active_multi_finger_gesture_; 119 WebInputEvent::IsTouchEventType(type) && active_multi_finger_gesture_;
119 120
120 LatencyInfo::LatencyComponent ui_component; 121 LatencyInfo::LatencyComponent ui_component;
121 if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 122 if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0,
122 &ui_component)) { 123 &ui_component)) {
123 DCHECK_EQ(ui_component.event_count, 1u); 124 DCHECK_EQ(ui_component.event_count, 1u);
124 base::TimeDelta ui_delta = 125 base::TimeDelta ui_delta =
125 rwh_component.last_event_time - ui_component.first_event_time; 126 rwh_component.last_event_time - ui_component.first_event_time;
126 127
127 if (type == blink::WebInputEvent::kMouseWheel) { 128 if (type == blink::WebInputEvent::kMouseWheel) {
128 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser.WheelUI", 129 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser.WheelUI",
129 ui_delta.InMicroseconds(), 1, 20000, 100); 130 ui_delta.InMicroseconds(), 1, 20000, 100);
130 } else { 131 } else if (WebInputEvent::IsTouchEventType(type)) {
131 DCHECK(WebInputEvent::IsTouchEventType(type));
132 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser.TouchUI", 132 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser.TouchUI",
133 ui_delta.InMicroseconds(), 1, 20000, 100); 133 ui_delta.InMicroseconds(), 1, 20000, 100);
134 } else if (WebInputEvent::IsKeyboardEventType(type)) {
135 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser.KeyUI",
136 ui_delta.InMicroseconds(), 1, 20000, 50);
137 } else {
138 // We should only report these histograms for wheel, touch and keyboard.
139 NOTREACHED();
134 } 140 }
135 } 141 }
136 142
137 // Both tap and scroll gestures depend on the disposition of the touch start 143 // Touchscreen tap and scroll gestures depend on the disposition of the touch
138 // and the current touch. For touch start, touch_start_default_prevented_ == 144 // start and the current touch. For touch start,
139 // (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED). 145 // touch_start_default_prevented_ == (ack_result ==
146 // INPUT_EVENT_ACK_STATE_CONSUMED).
140 bool action_prevented = touch_start_default_prevented_ || 147 bool action_prevented = touch_start_default_prevented_ ||
141 ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; 148 ack_result == INPUT_EVENT_ACK_STATE_CONSUMED;
142 149
143 std::string event_name = WebInputEvent::GetName(type); 150 std::string event_name = WebInputEvent::GetName(type);
151 if (WebInputEvent::IsKeyboardEventType(type))
152 event_name = "KeyEvent";
144 153
145 std::string default_action_status = 154 std::string default_action_status =
146 action_prevented ? "DefaultPrevented" : "DefaultAllowed"; 155 action_prevented ? "DefaultPrevented" : "DefaultAllowed";
147 156
148 LatencyInfo::LatencyComponent main_component; 157 LatencyInfo::LatencyComponent main_component;
149 if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT, 0, 158 if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT, 0,
150 &main_component)) { 159 &main_component)) {
151 DCHECK_EQ(main_component.event_count, 1u); 160 DCHECK_EQ(main_component.event_count, 1u);
152 if (!multi_finger_touch_gesture) { 161 if (!multi_finger_touch_gesture) {
153 UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS( 162 UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS(
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 sample->SetUInt64Field( 314 sample->SetUInt64Field(
306 "Latency", 315 "Latency",
307 (end_component.last_event_time - start_component.first_event_time) 316 (end_component.last_event_time - start_component.first_event_time)
308 .InMicroseconds(), 317 .InMicroseconds(),
309 rappor::NO_NOISE); 318 rappor::NO_NOISE);
310 rappor_service->RecordSample(name, std::move(sample)); 319 rappor_service->RecordSample(name, std::move(sample));
311 } 320 }
312 } 321 }
313 322
314 } // namespace content 323 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698