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 { ...@@ -69,6 +69,7 @@ void ScriptedAnimationController::Trace(Visitor* visitor) const {
visitor->Trace(callback_collection_); visitor->Trace(callback_collection_);
visitor->Trace(event_queue_); visitor->Trace(event_queue_);
visitor->Trace(media_query_list_listeners_); visitor->Trace(media_query_list_listeners_);
visitor->Trace(media_query_list_listeners_set_);
visitor->Trace(per_frame_events_); visitor->Trace(per_frame_events_);
} }
...@@ -169,7 +170,8 @@ void ScriptedAnimationController::ExecuteFrameCallbacks() { ...@@ -169,7 +170,8 @@ void ScriptedAnimationController::ExecuteFrameCallbacks() {
void ScriptedAnimationController::CallMediaQueryListListeners() { void ScriptedAnimationController::CallMediaQueryListListeners() {
MediaQueryListListeners listeners; 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) { for (const auto& listener : listeners) {
listener->NotifyMediaQueryChanged(); listener->NotifyMediaQueryChanged();
...@@ -267,8 +269,13 @@ void ScriptedAnimationController::EnqueuePerFrameEvent(Event* event) { ...@@ -267,8 +269,13 @@ void ScriptedAnimationController::EnqueuePerFrameEvent(Event* event) {
void ScriptedAnimationController::EnqueueMediaQueryChangeListeners( void ScriptedAnimationController::EnqueueMediaQueryChangeListeners(
HeapVector<Member<MediaQueryListListener>>& listeners) { HeapVector<Member<MediaQueryListListener>>& listeners) {
for (const auto& listener : 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(); ScheduleAnimationIfNeeded();
} }
......
...@@ -121,9 +121,11 @@ class CORE_EXPORT ScriptedAnimationController ...@@ -121,9 +121,11 @@ class CORE_EXPORT ScriptedAnimationController
using PerFrameEventsMap = using PerFrameEventsMap =
HeapHashMap<Member<const EventTarget>, HashSet<const StringImpl*>>; HeapHashMap<Member<const EventTarget>, HashSet<const StringImpl*>>;
PerFrameEventsMap per_frame_events_; PerFrameEventsMap per_frame_events_;
using MediaQueryListListeners = using MediaQueryListListeners = HeapVector<Member<MediaQueryListListener>>;
HeapListHashSet<Member<MediaQueryListListener>>;
MediaQueryListListeners media_query_list_listeners_; 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_time_ms_ = 0.0;
double current_frame_legacy_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