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

Side by Side Diff: components/scheduler/renderer/user_model.cc

Issue 1683583002: Report user actions when gesture starts and stops in user_model. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 10 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/scheduler/renderer/user_model.h" 5 #include "components/scheduler/renderer/user_model.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/metrics/user_metrics.h"
9 #include "base/single_thread_task_runner.h"
8 10
9 namespace scheduler { 11 namespace scheduler {
10 12
11 namespace { 13 namespace {
12 // This enum is used to back a histogram, and should therefore be treated as 14 // This enum is used to back a histogram, and should therefore be treated as
13 // append-only. 15 // append-only.
14 enum GesturePredictionResult { 16 enum GesturePredictionResult {
15 GESTURE_OCCURED_WAS_PREDICTED = 0, 17 GESTURE_OCCURED_WAS_PREDICTED = 0,
16 GESTURE_OCCURED_BUT_NOT_PREDICTED = 1, 18 GESTURE_OCCURED_BUT_NOT_PREDICTED = 1,
17 GESTURE_PREDICTED_BUT_DID_NOT_OCCUR = 2, 19 GESTURE_PREDICTED_BUT_DID_NOT_OCCUR = 2,
18 GESTURE_PREDICTION_RESULT_COUNT = 3 20 GESTURE_PREDICTION_RESULT_COUNT = 3
19 }; 21 };
20 22
21 void RecordGesturePrediction(GesturePredictionResult result) { 23 void RecordGesturePrediction(GesturePredictionResult result) {
22 UMA_HISTOGRAM_ENUMERATION( 24 UMA_HISTOGRAM_ENUMERATION(
23 "RendererScheduler.UserModel.GesturePredictedCorrectly", result, 25 "RendererScheduler.UserModel.GesturePredictedCorrectly", result,
24 GESTURE_PREDICTION_RESULT_COUNT); 26 GESTURE_PREDICTION_RESULT_COUNT);
25 } 27 }
26 28
27 } // namespace 29 } // namespace
28 30
29 UserModel::UserModel() 31 UserModel::UserModel(
30 : pending_input_event_count_(0), 32 const scoped_refptr<base::SingleThreadTaskRunner>& default_task_runner)
33 : default_task_runner_(default_task_runner),
34 pending_input_event_count_(0),
31 is_gesture_active_(false), 35 is_gesture_active_(false),
32 is_gesture_expected_(false) {} 36 is_gesture_expected_(false) {}
33 UserModel::~UserModel() {} 37 UserModel::~UserModel() {}
34 38
35 void UserModel::DidStartProcessingInputEvent(blink::WebInputEvent::Type type, 39 void UserModel::DidStartProcessingInputEvent(blink::WebInputEvent::Type type,
36 const base::TimeTicks now) { 40 const base::TimeTicks now) {
37 last_input_signal_time_ = now; 41 last_input_signal_time_ = now;
38 if (type == blink::WebInputEvent::TouchStart || 42 if (type == blink::WebInputEvent::TouchStart ||
39 type == blink::WebInputEvent::GestureScrollBegin || 43 type == blink::WebInputEvent::GestureScrollBegin ||
40 type == blink::WebInputEvent::GesturePinchBegin) { 44 type == blink::WebInputEvent::GesturePinchBegin) {
41 // Only update stats once per gesture. 45 // Only update stats once per gesture.
42 if (!is_gesture_active_) { 46 if (!is_gesture_active_) {
43 last_gesture_start_time_ = now; 47 last_gesture_start_time_ = now;
44 48
49 default_task_runner_->PostTask(
50 FROM_HERE,
51 base::Bind(&base::RecordAction,
52 base::UserMetricsAction(
53 "RendererScheduler.UserModel.GestureStart")));
54
45 RecordGesturePrediction(is_gesture_expected_ 55 RecordGesturePrediction(is_gesture_expected_
46 ? GESTURE_OCCURED_WAS_PREDICTED 56 ? GESTURE_OCCURED_WAS_PREDICTED
47 : GESTURE_OCCURED_BUT_NOT_PREDICTED); 57 : GESTURE_OCCURED_BUT_NOT_PREDICTED);
48 58
49 if (!last_reset_time_.is_null()) { 59 if (!last_reset_time_.is_null()) {
50 base::TimeDelta time_since_reset = now - last_reset_time_; 60 base::TimeDelta time_since_reset = now - last_reset_time_;
51 UMA_HISTOGRAM_MEDIUM_TIMES( 61 UMA_HISTOGRAM_MEDIUM_TIMES(
52 "RendererScheduler.UserModel.GestureStartTimeSinceModelReset", 62 "RendererScheduler.UserModel.GestureStartTimeSinceModelReset",
53 time_since_reset); 63 time_since_reset);
54 } 64 }
(...skipping 29 matching lines...) Expand all
84 // metric that tracks its duration. 94 // metric that tracks its duration.
85 if (type == blink::WebInputEvent::GestureScrollEnd || 95 if (type == blink::WebInputEvent::GestureScrollEnd ||
86 type == blink::WebInputEvent::GesturePinchEnd || 96 type == blink::WebInputEvent::GesturePinchEnd ||
87 type == blink::WebInputEvent::GestureFlingStart || 97 type == blink::WebInputEvent::GestureFlingStart ||
88 type == blink::WebInputEvent::TouchEnd) { 98 type == blink::WebInputEvent::TouchEnd) {
89 // Only update stats once per gesture. 99 // Only update stats once per gesture.
90 if (is_gesture_active_) { 100 if (is_gesture_active_) {
91 base::TimeDelta duration = now - last_gesture_start_time_; 101 base::TimeDelta duration = now - last_gesture_start_time_;
92 UMA_HISTOGRAM_TIMES("RendererScheduler.UserModel.GestureDuration", 102 UMA_HISTOGRAM_TIMES("RendererScheduler.UserModel.GestureDuration",
93 duration); 103 duration);
104 default_task_runner_->PostTask(
105 FROM_HERE, base::Bind(&base::RecordAction,
106 base::UserMetricsAction(
107 "RendererScheduler.UserModel.GestureEnd")));
94 } 108 }
95 is_gesture_active_ = false; 109 is_gesture_active_ = false;
96 } 110 }
97 111
98 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 112 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
99 "is_gesture_active", is_gesture_active_); 113 "is_gesture_active", is_gesture_active_);
100 114
101 pending_input_event_count_++; 115 pending_input_event_count_++;
102 } 116 }
103 117
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 (last_gesture_expected_start_time_ - base::TimeTicks()) 227 (last_gesture_expected_start_time_ - base::TimeTicks())
214 .InMillisecondsF()); 228 .InMillisecondsF());
215 state->SetDouble("last_reset_time", 229 state->SetDouble("last_reset_time",
216 (last_reset_time_ - base::TimeTicks()).InMillisecondsF()); 230 (last_reset_time_ - base::TimeTicks()).InMillisecondsF());
217 state->SetBoolean("is_gesture_expected", is_gesture_expected_); 231 state->SetBoolean("is_gesture_expected", is_gesture_expected_);
218 state->SetBoolean("is_gesture_active", is_gesture_active_); 232 state->SetBoolean("is_gesture_active", is_gesture_active_);
219 state->EndDictionary(); 233 state->EndDictionary();
220 } 234 }
221 235
222 } // namespace scheduler 236 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698