diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc b/chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc index f3fdfbe2fba..45a2bea2bd6 100644 --- a/chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc +++ b/chromium/third_party/blink/renderer/core/dom/scripted_animation_controller.cc @@ -80,7 +80,10 @@ void ScriptedAnimationController::ContextLifecycleStateChanged( } void ScriptedAnimationController::DispatchEventsAndCallbacksForPrinting() { - DispatchEvents(event_interface_names::kMediaQueryListEvent); + DispatchEvents([](const Event* event) { + return event->InterfaceName() == + event_interface_names::kMediaQueryListEvent; + }); CallMediaQueryListListeners(); } @@ -114,16 +117,15 @@ void ScriptedAnimationController::RunTasks() { std::move(task).Run(); } -void ScriptedAnimationController::DispatchEvents( - const AtomicString& event_interface_filter) { +void ScriptedAnimationController::DispatchEvents(const DispatchFilter& filter) { HeapVector<Member<Event>> events; - if (event_interface_filter.IsEmpty()) { + if (!filter.has_value()) { events.swap(event_queue_); per_frame_events_.clear(); } else { HeapVector<Member<Event>> remaining; for (auto& event : event_queue_) { - if (event && event->InterfaceName() == event_interface_filter) { + if (event && filter.value()(event)) { EraseFromPerFrameEventsMap(event.Get()); events.push_back(event.Release()); } else { @@ -192,13 +194,21 @@ PageAnimator* ScriptedAnimationController::GetPageAnimator() { } void ScriptedAnimationController::ServiceScriptedAnimations( - base::TimeTicks monotonic_time_now) { + base::TimeTicks monotonic_time_now, + bool can_throttle) { if (!GetExecutionContext() || GetExecutionContext()->IsContextPaused()) return; auto* loader = GetWindow()->document()->Loader(); if (!loader) return; + if (can_throttle) { + DispatchEvents([](const Event* event) { + return event->type() == event_type_names::kResize; + }); + return; + } + current_frame_time_ms_ = loader->GetTiming() .MonotonicTimeToZeroBasedDocumentTime(monotonic_time_now) |