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 @@
#include "third_party/blink/renderer/core/timing/event_counts.h"
#include "third_party/blink/renderer/platform/wtf/wtf.h"
namespace blink {
class EventCountsIterationSource final
......@@ -37,10 +39,47 @@ class EventCountsIterationSource final
void EventCounts::Add(const AtomicString& event_type) {
auto iterator = event_count_map_.find(event_type);
if (iterator == event_count_map_.end()) {
event_count_map_.insert(event_type, 1u);
} else {
iterator->value++;
DCHECK_NE(iterator, event_count_map_.end());
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,
DEFINE_WRAPPERTYPEINFO();
public:
EventCounts() = default;
EventCounts();
const HashMap<AtomicString, unsigned>& Map() const {
return event_count_map_;
......
......@@ -46,6 +46,7 @@ bool IsEventTypeForEventTiming(const Event& event) {
event.IsCompositionEvent() || event.IsDragEvent()) &&
event.type() != event_type_names::kMousemove &&
event.type() != event_type_names::kPointermove &&
event.type() != event_type_names::kPointerrawupdate &&
event.type() != event_type_names::kTouchmove &&
event.type() != event_type_names::kWheel &&
event.type() != event_type_names::kDrag;
......
......@@ -350,8 +350,7 @@ TEST_F(WindowPerformanceTest, FirstInput) {
bool should_report;
} inputs[] = {{"click", true}, {"keydown", true},
{"keypress", false}, {"pointerdown", false},
{"mousedown", true}, {"mousemove", false},
{"mouseover", false}};
{"mousedown", true}, {"mouseover", false}};
for (const auto& input : inputs) {
// first-input does not have a |duration| threshold so use close values.
performance_->RegisterEventTiming(
......@@ -370,7 +369,7 @@ TEST_F(WindowPerformanceTest, FirstInput) {
// Test that the 'firstInput' is populated after some irrelevant events are
// ignored.
TEST_F(WindowPerformanceTest, FirstInputAfterIgnored) {
AtomicString several_events[] = {"mousemove", "mouseover", "mousedown"};
AtomicString several_events[] = {"mouseover", "mousedown", "pointerup"};
for (const auto& event : several_events) {
performance_->RegisterEventTiming(
event, GetTimeOrigin(),
......
......@@ -189,8 +189,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeResumesPlayback) {
Timeline()->DispatchEvent(
*TouchEvent::Create("touchstart", GetValidTouchEventInit()));
Timeline()->DispatchEvent(
*TouchEvent::Create("change", GetValidTouchEventInit()));
Timeline()->DispatchEvent(*Event::Create("change", GetValidTouchEventInit()));
EXPECT_FALSE(Video()->paused());
}
......@@ -244,8 +243,7 @@ TEST_F(MediaControlTimelineElementTest, ChangeAfterPointerDoesNotResume) {
Timeline()->DispatchEvent(
*PointerEvent::Create("pointerdown", GetValidPointerEventInit()));
Timeline()->DispatchEvent(
*TouchEvent::Create("change", GetValidTouchEventInit()));
Timeline()->DispatchEvent(*Event::Create("change", GetValidTouchEventInit()));
EXPECT_TRUE(Video()->paused());
}
......
......@@ -13,7 +13,7 @@
assert_precondition(window.EventCounts, "Event Counts isn't supported");
function testClicks(expectedCount, resolve) {
const clickCount = performance.eventCounts.get('click');
if (!clickCount || clickCount < expectedCount) {
if (clickCount < expectedCount) {
t.step_timeout(function() {
testClicks(expectedCount, resolve);
}, 5);
......@@ -23,11 +23,8 @@
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('mouseover'), expectedCount, 'Incorrect mouseover count.');
if (expectedCount == 1) {
assert_equals(performance.eventCounts.size, 4, 'There should only be 4 types observed.');
} else {
if (expectedCount != 1) {
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();
}
......@@ -37,7 +34,6 @@
});
}
assert_equals(performance.eventCounts.size, 0);
return test_driver.click(document.getElementById('div')).then(() => {
return promiseClicks(1);
}).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