Bug 1238137 - Define a telemetry histogram for tracking the input methods used to trigger scrolling. r=kats
authorBotond Ballo <botond@mozilla.com>
Tue, 16 Feb 2016 14:17:35 -0500
changeset 331391 840dacbede7ab96c8ccf3a303d4cd6d7a36a8704
parent 331331 ff750b0019403ef7d5a901707fe533fe3ee5d92a
child 331392 ed0c495e77ab475288e6aae020c8acd4f5e54b49
push id10977
push usercykesiopka.bmo@gmail.com
push dateWed, 17 Feb 2016 01:27:23 +0000
reviewerskats
bugs1238137
milestone47.0a1
Bug 1238137 - Define a telemetry histogram for tracking the input methods used to trigger scrolling. r=kats
gfx/layers/apz/util/ScrollInputMethods.h
gfx/layers/moz.build
toolkit/components/telemetry/Histograms.json
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/util/ScrollInputMethods.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_layers_ScrollInputMethods_h
+#define mozilla_layers_ScrollInputMethods_h
+
+namespace mozilla {
+namespace layers {
+
+/**
+ * An enumeration that lists various input methods used to trigger scrolling.
+ * Used as the values for the SCROLL_INPUT_METHODS telemetry histogram.
+ */
+enum class ScrollInputMethod {
+
+  // === Driven by APZ ===
+
+  ApzTouch,          // touch events
+  ApzWheelPixel,     // wheel events, pixel scrolling mode
+  ApzWheelLine,      // wheel events, line scrolling mode
+  ApzWheelPage,      // wheel events, page scrolling mode
+  ApzPanGesture,     // pan gesture events (generally triggered by trackpad)
+  ApzScrollbarDrag,  // dragging the scrollbar
+
+  // === Driven by the main thread ===
+
+  // Keyboard
+  MainThreadScrollLine,       // line scrolling
+                              // (generally triggered by up/down arrow keys)
+  MainThreadScrollCharacter,  // character scrolling
+                              // (generally triggered by left/right arrow keys)
+  MainThreadScrollPage,       // page scrolling
+                              // (generally triggered by PageUp/PageDown keys)
+  MainThreadCompleteScroll,   // scrolling to the end of the scroll range
+                              // (generally triggered by Home/End keys)
+  MainThreadScrollCaretIntoView,  // scrolling to bring the caret into view
+                                  // after moving the caret via the keyboard
+
+  // Touch
+  MainThreadTouch,            // touch events
+
+  // Scrollbar
+  MainThreadScrollbarDrag,         // dragging the scrollbar
+  MainThreadScrollbarButtonClick,  // clicking the buttons at the ends of the
+                                   // scrollback track
+  MainThreadScrollbarTrackClick,   // clicking the scrollbar track above or
+                                   // below the thumb
+
+  // Autoscrolling
+  MainThreadAutoscrolling,    // autoscrolling
+
+  // New input methods can be added at the end, up to a maximum of 64.
+  // They should only be added at the end, to preserve the numerical values
+  // of the existing enumerators.
+};
+
+} // namespace layers
+} // namespace mozilla
+
+#endif /* mozilla_layers_ScrollInputMethods_h */
--- a/gfx/layers/moz.build
+++ b/gfx/layers/moz.build
@@ -108,16 +108,17 @@ EXPORTS.mozilla.layers += [
     'apz/testutil/APZTestData.h',
     'apz/util/ActiveElementManager.h',
     'apz/util/APZCCallbackHelper.h',
     'apz/util/APZEventState.h',
     'apz/util/APZThreadUtils.h',
     'apz/util/ChromeProcessController.h',
     'apz/util/DoubleTapToZoom.h',
     'apz/util/InputAPZContext.h',
+    'apz/util/ScrollInputMethods.h',
     'apz/util/ScrollLinkedEffectDetector.h',
     'AsyncCanvasRenderer.h',
     'AtomicRefCountedWithFinalize.h',
     'AxisPhysicsModel.h',
     'AxisPhysicsMSDModel.h',
     'basic/BasicCompositor.h',
     'basic/MacIOSurfaceTextureHostBasic.h',
     'basic/TextureHostBasic.h',
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -10005,16 +10005,24 @@
   },
   "SCROLL_LINKED_EFFECT_FOUND": {
     "alert_emails": ["kgupta@mozilla.com"],
     "bug_numbers": [1229052],
     "expires_in_version": "50",
     "kind": "boolean",
     "description": "Attempt to determine prevalence of scroll-linked effects on the web."
   },
+  "SCROLL_INPUT_METHODS": {
+    "alert_emails": ["botond@mozilla.com"],
+    "bug_numbers": [1238137],
+    "expires_in_version": "50",
+    "kind": "enumerated",
+    "n_values": 64,
+    "description": "Count of scroll actions triggered by different input methods. See gfx/layers/apz/util/ScrollInputMethods.h for a list of possible values and their meanings."
+  },
   "WEB_NOTIFICATION_CLICKED": {
     "alert_emails": ["firefox-dev@mozilla.org"],
     "bug_numbers": [1225336],
     "expires_in_version": "50",
     "kind": "count",
     "description": "Count of times a web notification was clicked"
   },
   "WEB_NOTIFICATION_MENU": {