Commit ea70559a authored by Keishi Hattori's avatar Keishi Hattori Committed by Commit Bot

Use HeapVector for media_query_list_listeners_

Use HeapVector for media_query_list_listeners_ instead of HeapListHashSet as a specular fix for a bug in HeapListHashSet.

Bug: 1139511
Change-Id: I8c697b6079d186108aed95fa552a38fb3c56d502
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2536574Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Keishi Hattori <keishi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827578}
parent 6f81ff96
......@@ -69,6 +69,7 @@ void ScriptedAnimationController::Trace(Visitor* visitor) const {
visitor->Trace(callback_collection_);
visitor->Trace(event_queue_);
visitor->Trace(media_query_list_listeners_);
visitor->Trace(media_query_list_listeners_set_);
visitor->Trace(per_frame_events_);
}
......@@ -169,7 +170,8 @@ void ScriptedAnimationController::ExecuteFrameCallbacks() {
void ScriptedAnimationController::CallMediaQueryListListeners() {
MediaQueryListListeners listeners;
listeners.Swap(media_query_list_listeners_);
listeners.swap(media_query_list_listeners_);
media_query_list_listeners_set_.clear();
for (const auto& listener : listeners) {
listener->NotifyMediaQueryChanged();
......@@ -267,8 +269,13 @@ void ScriptedAnimationController::EnqueuePerFrameEvent(Event* event) {
void ScriptedAnimationController::EnqueueMediaQueryChangeListeners(
HeapVector<Member<MediaQueryListListener>>& listeners) {
for (const auto& listener : listeners) {
media_query_list_listeners_.insert(listener);
if (!media_query_list_listeners_set_.Contains(listener)) {
media_query_list_listeners_.push_back(listener);
media_query_list_listeners_set_.insert(listener);
}
}
DCHECK_EQ(media_query_list_listeners_.size(),
media_query_list_listeners_set_.size());
ScheduleAnimationIfNeeded();
}
......
......@@ -121,9 +121,11 @@ class CORE_EXPORT ScriptedAnimationController
using PerFrameEventsMap =
HeapHashMap<Member<const EventTarget>, HashSet<const StringImpl*>>;
PerFrameEventsMap per_frame_events_;
using MediaQueryListListeners =
HeapListHashSet<Member<MediaQueryListListener>>;
using MediaQueryListListeners = HeapVector<Member<MediaQueryListListener>>;
MediaQueryListListeners media_query_list_listeners_;
// This is used to quickly lookup if a listener exists in
// media_query_list_listeners_. The contents should be exactly the same.
HeapHashSet<Member<MediaQueryListListener>> media_query_list_listeners_set_;
double current_frame_time_ms_ = 0.0;
double current_frame_legacy_time_ms_ = 0.0;
......
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