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

Unified Diff: third_party/WebKit/Source/core/input/EventHandlerTest.cpp

Issue 2773893003: Record size of scroller that user scrolls (Closed)
Patch Set: nit Created 3 years, 8 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: third_party/WebKit/Source/core/input/EventHandlerTest.cpp
diff --git a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
index fd1d83710e613c6562a55c148db4514b11f6f1ee..50db49753528607e30b20e8d65b8879f6f1ef361 100644
--- a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
@@ -20,6 +20,7 @@
#include "core/paint/PaintLayerScrollableArea.h"
#include "core/testing/DummyPageHolder.h"
#include "platform/scroll/MainThreadScrollingReason.h"
+#include "platform/scroll/ScrollerSizeMetrics.h"
#include "platform/testing/HistogramTester.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -52,8 +53,8 @@ class EventHandlerTest : public ::testing::Test {
FrameSelection& Selection() const {
return GetDocument().GetFrame()->Selection();
}
-
void SetHtmlInnerHTML(const char* html_content);
+ void Scroll(Element*, const WebGestureDevice);
protected:
std::unique_ptr<DummyPageHolder> dummy_page_holder_;
@@ -62,43 +63,7 @@ class EventHandlerTest : public ::testing::Test {
class NonCompositedMainThreadScrollingReasonRecordTest
: public EventHandlerTest {
protected:
- class ScrollBeginEventBuilder : public WebGestureEvent {
- public:
- ScrollBeginEventBuilder(IntPoint position,
- FloatPoint delta,
- WebGestureDevice device)
- : WebGestureEvent() {
- type_ = WebInputEvent::kGestureScrollBegin;
- x = global_x = position.X();
- y = global_y = position.Y();
- data.scroll_begin.delta_y_hint = delta.Y();
- source_device = device;
- frame_scale_ = 1;
- }
- };
-
- class ScrollUpdateEventBuilder : public WebGestureEvent {
- public:
- ScrollUpdateEventBuilder() : WebGestureEvent() {
- type_ = WebInputEvent::kGestureScrollUpdate;
- data.scroll_update.delta_x = 0.0f;
- data.scroll_update.delta_y = 1.0f;
- data.scroll_update.velocity_x = 0;
- data.scroll_update.velocity_y = 1;
- frame_scale_ = 1;
- }
- };
-
- class ScrollEndEventBuilder : public WebGestureEvent {
- public:
- ScrollEndEventBuilder() : WebGestureEvent() {
- type_ = WebInputEvent::kGestureScrollEnd;
- frame_scale_ = 1;
- }
- };
-
int GetBucketIndex(uint32_t reason);
- void Scroll(Element*, const WebGestureDevice);
};
class TapEventBuilder : public WebGestureEvent {
@@ -146,6 +111,41 @@ class MousePressEventBuilder : public WebMouseEvent {
}
};
+class ScrollBeginEventBuilder : public WebGestureEvent {
+ public:
+ ScrollBeginEventBuilder(IntPoint position,
+ FloatPoint delta,
+ WebGestureDevice device)
+ : WebGestureEvent() {
+ type_ = WebInputEvent::kGestureScrollBegin;
+ x = global_x = position.X();
+ y = global_y = position.Y();
+ data.scroll_begin.delta_y_hint = delta.Y();
+ source_device = device;
+ frame_scale_ = 1;
+ }
+};
+
+class ScrollUpdateEventBuilder : public WebGestureEvent {
+ public:
+ ScrollUpdateEventBuilder() : WebGestureEvent() {
+ type_ = WebInputEvent::kGestureScrollUpdate;
+ data.scroll_update.delta_x = 0.0f;
+ data.scroll_update.delta_y = 1.0f;
+ data.scroll_update.velocity_x = 0;
+ data.scroll_update.velocity_y = 1;
+ frame_scale_ = 1;
+ }
+};
+
+class ScrollEndEventBuilder : public WebGestureEvent {
+ public:
+ ScrollEndEventBuilder() : WebGestureEvent() {
+ type_ = WebInputEvent::kGestureScrollEnd;
+ frame_scale_ = 1;
+ }
+};
+
void EventHandlerTest::SetUp() {
dummy_page_holder_ = DummyPageHolder::Create(IntSize(300, 400));
}
@@ -166,9 +166,7 @@ int NonCompositedMainThreadScrollingReasonRecordTest::GetBucketIndex(
return index;
}
-void NonCompositedMainThreadScrollingReasonRecordTest::Scroll(
- Element* element,
- const WebGestureDevice device) {
+void EventHandlerTest::Scroll(Element* element, const WebGestureDevice device) {
DCHECK(element);
DCHECK(element->getBoundingClientRect());
ClientRect* rect = element->getBoundingClientRect();
@@ -181,6 +179,7 @@ void NonCompositedMainThreadScrollingReasonRecordTest::Scroll(
GetDocument().GetFrame()->GetEventHandler().HandleGestureEvent(scroll_begin);
GetDocument().GetFrame()->GetEventHandler().HandleGestureEvent(scroll_update);
GetDocument().GetFrame()->GetEventHandler().HandleGestureEvent(scroll_end);
+ ASSERT_GT(scroll_update.DeltaYInRootFrame(), 0);
}
TEST_F(EventHandlerTest, dragSelectionAfterScroll) {
@@ -581,6 +580,54 @@ TEST_F(EventHandlerTest, dragEndInNewDrag) {
// This test passes if it doesn't crash.
}
+TEST_F(EventHandlerTest,
+ ScrollerSizeOfMainThreadScrollingHistogramRecordingTest) {
+ SetHtmlInnerHTML(
+ "<!DOCTYPE html>"
+ "<style>"
+ " .container { width: 200px; height: 200px; overflow: scroll; }"
+ " .box { width: 100px; height: 100px; overflow: scroll; }"
+ " .spacer { height: 1000px; }"
+ " .target { width: 200px; height: 200px; }"
+ " body { height: 2000px; }"
+ "</style>"
+ "<div class='container'>"
+ " <div id='box' class='box'>"
+ " <div id='content' class='spacer'></div>"
+ " </div>"
+ "</div>"
+ "<div id='target' class='target'></div>");
+
+ Element* box = GetDocument().getElementById("box");
+ HistogramTester histogram_tester;
+
+ // Test wheel scroll on the box.
+ Scroll(box, kWebGestureDeviceTouchpad);
+ histogram_tester.ExpectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Wheel",
+ 10000, 1);
+ // Only the first scrollable area is recorded.
+ histogram_tester.ExpectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Wheel",
+ 40000, 0);
+ histogram_tester.ExpectTotalCount("Event.Scroll.ScrollerSize.OnScroll_Wheel",
+ 1);
+
+ // Test touch scroll.
+ Scroll(box, kWebGestureDeviceTouchscreen);
+ histogram_tester.ExpectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Touch",
+ 10000, 1);
+ histogram_tester.ExpectTotalCount("Event.Scroll.ScrollerSize.OnScroll_Touch",
+ 1);
+
+ // Scrolling the non-scrollable target leads to scroll the root layer which
+ // doesn't add to count.
+ Element* body_scroll_target = GetDocument().getElementById("target");
+ Scroll(body_scroll_target, kWebGestureDeviceTouchscreen);
+ histogram_tester.ExpectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Touch",
+ kScrollerSizeLargestBucket, 0);
+ histogram_tester.ExpectTotalCount("Event.Scroll.ScrollerSize.OnScroll_Touch",
+ 1);
+}
+
class TooltipCapturingChromeClient : public EmptyChromeClient {
public:
TooltipCapturingChromeClient() {}

Powered by Google App Engine
This is Rietveld 408576698