Commit f1088403 authored by Nicolás Peña Moreno's avatar Nicolás Peña Moreno Committed by Commit Bot

[EventTiming] Set EventCounts to 0 for supported values

Bug: 543598
Change-Id: I9dab81aaa58b331fe9f5e7e102a3872152c8b09c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2142100
Commit-Queue: Nicolás Peña Moreno <npm@chromium.org>
Reviewed-by: default avatarYoav Weiss <yoavweiss@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758041}
parent f0e6bdff
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "third_party/blink/renderer/core/timing/event_counts.h" #include "third_party/blink/renderer/core/timing/event_counts.h"
#include "third_party/blink/renderer/platform/wtf/wtf.h"
namespace blink { namespace blink {
class EventCountsIterationSource final class EventCountsIterationSource final
...@@ -37,10 +39,47 @@ class EventCountsIterationSource final ...@@ -37,10 +39,47 @@ class EventCountsIterationSource final
void EventCounts::Add(const AtomicString& event_type) { void EventCounts::Add(const AtomicString& event_type) {
auto iterator = event_count_map_.find(event_type); auto iterator = event_count_map_.find(event_type);
if (iterator == event_count_map_.end()) { DCHECK_NE(iterator, event_count_map_.end());
event_count_map_.insert(event_type, 1u); iterator->value++;
} else { }
iterator->value++;
EventCounts::EventCounts() {
// Should contain the same types that would return true in
// IsEventTypeForEventTiming() in event_timing.cc. Note that this list differs
// from https://wicg.github.io/event-timing/#sec-events-exposed in that
// dragexit is not present since it's currently not implemented in Chrome.
DCHECK(IsMainThread());
DEFINE_STATIC_LOCAL(
const Vector<AtomicString>, event_types,
({/* MouseEvents */
event_type_names::kAuxclick, event_type_names::kClick,
event_type_names::kContextmenu, event_type_names::kDblclick,
event_type_names::kMousedown, event_type_names::kMouseenter,
event_type_names::kMouseleave, event_type_names::kMouseout,
event_type_names::kMouseover, event_type_names::kMouseup,
/* PointerEvents */
event_type_names::kPointerover, event_type_names::kPointerenter,
event_type_names::kPointerdown, event_type_names::kPointerup,
event_type_names::kPointercancel, event_type_names::kPointerout,
event_type_names::kPointerleave, event_type_names::kGotpointercapture,
event_type_names::kLostpointercapture,
/* TouchEvents */
event_type_names::kTouchstart, event_type_names::kTouchend,
event_type_names::kTouchcancel,
/* KeyboardEvents */
event_type_names::kKeydown, event_type_names::kKeypress,
event_type_names::kKeyup,
/* InputEvents */
event_type_names::kBeforeinput, event_type_names::kInput,
/* CompositionEvents */
event_type_names::kCompositionstart,
event_type_names::kCompositionupdate, event_type_names::kCompositionend,
/* Drag & Drop Events */
event_type_names::kDragstart, event_type_names::kDragend,
event_type_names::kDragenter, event_type_names::kDragleave,
event_type_names::kDragover, event_type_names::kDrop}));
for (const auto& type : event_types) {
event_count_map_.insert(type, 0u);
} }
} }
......
...@@ -18,7 +18,7 @@ class EventCounts final : public ScriptWrappable, ...@@ -18,7 +18,7 @@ class EventCounts final : public ScriptWrappable,
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
EventCounts() = default; EventCounts();
const HashMap<AtomicString, unsigned>& Map() const { const HashMap<AtomicString, unsigned>& Map() const {
return event_count_map_; return event_count_map_;
......
...@@ -46,6 +46,7 @@ bool IsEventTypeForEventTiming(const Event& event) { ...@@ -46,6 +46,7 @@ bool IsEventTypeForEventTiming(const Event& event) {
event.IsCompositionEvent() || event.IsDragEvent()) && event.IsCompositionEvent() || event.IsDragEvent()) &&
event.type() != event_type_names::kMousemove && event.type() != event_type_names::kMousemove &&
event.type() != event_type_names::kPointermove && event.type() != event_type_names::kPointermove &&
event.type() != event_type_names::kPointerrawupdate &&
event.type() != event_type_names::kTouchmove && event.type() != event_type_names::kTouchmove &&
event.type() != event_type_names::kWheel && event.type() != event_type_names::kWheel &&
event.type() != event_type_names::kDrag; event.type() != event_type_names::kDrag;
......
...@@ -350,8 +350,7 @@ TEST_F(WindowPerformanceTest, FirstInput) { ...@@ -350,8 +350,7 @@ TEST_F(WindowPerformanceTest, FirstInput) {
bool should_report; bool should_report;
} inputs[] = {{"click", true}, {"keydown", true}, } inputs[] = {{"click", true}, {"keydown", true},
{"keypress", false}, {"pointerdown", false}, {"keypress", false}, {"pointerdown", false},
{"mousedown", true}, {"mousemove", false}, {"mousedown", true}, {"mouseover", false}};
{"mouseover", false}};
for (const auto& input : inputs) { for (const auto& input : inputs) {
// first-input does not have a |duration| threshold so use close values. // first-input does not have a |duration| threshold so use close values.
performance_->RegisterEventTiming( performance_->RegisterEventTiming(
...@@ -370,7 +369,7 @@ TEST_F(WindowPerformanceTest, FirstInput) { ...@@ -370,7 +369,7 @@ TEST_F(WindowPerformanceTest, FirstInput) {
// Test that the 'firstInput' is populated after some irrelevant events are // Test that the 'firstInput' is populated after some irrelevant events are
// ignored. // ignored.
TEST_F(WindowPerformanceTest, FirstInputAfterIgnored) { TEST_F(WindowPerformanceTest, FirstInputAfterIgnored) {
AtomicString several_events[] = {"mousemove", "mouseover", "mousedown"}; AtomicString several_events[] = {"mouseover", "mousedown", "pointerup"};
for (const auto& event : several_events) { for (const auto& event : several_events) {
performance_->RegisterEventTiming( performance_->RegisterEventTiming(
event, GetTimeOrigin(), event, GetTimeOrigin(),
......
...@@ -189,8 +189,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeResumesPlayback) { ...@@ -189,8 +189,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeResumesPlayback) {
Timeline()->DispatchEvent( Timeline()->DispatchEvent(
*TouchEvent::Create("touchstart", GetValidTouchEventInit())); *TouchEvent::Create("touchstart", GetValidTouchEventInit()));
Timeline()->DispatchEvent( Timeline()->DispatchEvent(*Event::Create("change", GetValidTouchEventInit()));
*TouchEvent::Create("change", GetValidTouchEventInit()));
EXPECT_FALSE(Video()->paused()); EXPECT_FALSE(Video()->paused());
} }
...@@ -244,8 +243,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeAfterPointerDoesNotResume) { ...@@ -244,8 +243,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeAfterPointerDoesNotResume) {
Timeline()->DispatchEvent( Timeline()->DispatchEvent(
*PointerEvent::Create("pointerdown", GetValidPointerEventInit())); *PointerEvent::Create("pointerdown", GetValidPointerEventInit()));
Timeline()->DispatchEvent( Timeline()->DispatchEvent(*Event::Create("change", GetValidTouchEventInit()));
*TouchEvent::Create("change", GetValidTouchEventInit()));
EXPECT_TRUE(Video()->paused()); EXPECT_TRUE(Video()->paused());
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
assert_precondition(window.EventCounts, "Event Counts isn't supported"); assert_precondition(window.EventCounts, "Event Counts isn't supported");
function testClicks(expectedCount, resolve) { function testClicks(expectedCount, resolve) {
const clickCount = performance.eventCounts.get('click'); const clickCount = performance.eventCounts.get('click');
if (!clickCount || clickCount < expectedCount) { if (clickCount < expectedCount) {
t.step_timeout(function() { t.step_timeout(function() {
testClicks(expectedCount, resolve); testClicks(expectedCount, resolve);
}, 5); }, 5);
...@@ -23,11 +23,8 @@ ...@@ -23,11 +23,8 @@
assert_equals(performance.eventCounts.get('mousedown'), expectedCount, 'Incorrect mousedown count'); assert_equals(performance.eventCounts.get('mousedown'), expectedCount, 'Incorrect mousedown count');
assert_equals(performance.eventCounts.get('mouseup'), expectedCount, 'Incorrect mouseup count.'); assert_equals(performance.eventCounts.get('mouseup'), expectedCount, 'Incorrect mouseup count.');
assert_equals(performance.eventCounts.get('mouseover'), expectedCount, 'Incorrect mouseover count.'); assert_equals(performance.eventCounts.get('mouseover'), expectedCount, 'Incorrect mouseover count.');
if (expectedCount == 1) { if (expectedCount != 1) {
assert_equals(performance.eventCounts.size, 4, 'There should only be 4 types observed.');
} else {
assert_equals(performance.eventCounts.get('mouseout'), expectedCount - 1, 'Incorrect mouseout count.'); assert_equals(performance.eventCounts.get('mouseout'), expectedCount - 1, 'Incorrect mouseout count.');
assert_equals(performance.eventCounts.size, 5, 'There should only be 5 types observed.');
} }
resolve(); resolve();
} }
...@@ -37,7 +34,6 @@ ...@@ -37,7 +34,6 @@
}); });
} }
assert_equals(performance.eventCounts.size, 0);
return test_driver.click(document.getElementById('div')).then(() => { return test_driver.click(document.getElementById('div')).then(() => {
return promiseClicks(1); return promiseClicks(1);
}).then(() => { }).then(() => {
......
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: eventCounts.</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script>
test(() => {
assert_precondition(window.EventCounts, "Event Counts isn't supported");
const eventTypes = [
'auxclick',
'click',
'contextmenu',
'dblclick',
'mousedown',
'mouseenter',
'mouseleave',
'mouseout',
'mouseover',
'mouseup',
'pointerover',
'pointerenter',
'pointerdown',
'pointerup',
'pointercancel',
'pointerout',
'pointerleave',
'gotpointercapture',
'lostpointercapture',
'touchstart',
'touchend',
'touchcancel',
'keydown',
'keypress',
'keyup',
'beforeinput',
'input',
'compositionstart',
'compositionupdate',
'compositionend',
'dragstart',
'dragend',
'dragenter',
// 'dragexit'? Unclear if it will be removed from HTML spec or not.
'dragleave',
'dragover',
'drop'
];
eventTypes.forEach(type => {
assert_equals(performance.eventCounts.get(type), 0, 'There is a nonzero value for ' + type);
})
assert_equals(performance.eventCounts.size, eventTypes.length,
'The size of performance.eventCounts is incorrect.');
})
</script>
</html>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment