From 3cc91e655f4119d15fa226cabe8e2f66be3d3c58 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 15 Aug 2024 18:20:52 -0400 Subject: [PATCH] Remove many explicit reflow calls (#33067) * Remove explicit reflow for iframe content updates. Signed-off-by: Josh Matthews * Remove explicit reflow for timers. Signed-off-by: Josh Matthews * Remove explicit reflow for MouseEvent. Signed-off-by: Josh Matthews * Remove explicit reflow for key events. Signed-off-by: Josh Matthews * Remove explicit reflow for document load. Signed-off-by: Josh Matthews * Remove explicit reflow for iframe load. Signed-off-by: Josh Matthews * Remove unused reflow reasons. Signed-off-by: Josh Matthews * Fix warnings. Signed-off-by: Josh Matthews --------- Signed-off-by: Josh Matthews --- components/script/dom/document.rs | 11 ----------- components/script/dom/htmliframeelement.rs | 7 +------ components/script/dom/window.rs | 10 ---------- 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index bd4773439b3..048628e805f 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1352,9 +1352,6 @@ impl Document { self.commit_focus_transaction(FocusType::Element); self.maybe_fire_dblclick(client_point, node, pressed_mouse_buttons); } - - self.window - .reflow(ReflowGoal::Full, ReflowReason::MouseEvent); } fn maybe_fire_dblclick( @@ -1570,8 +1567,6 @@ impl Document { // If the target has changed then store the current mouse over target for next frame. if target_has_changed { prev_mouse_over_target.set(maybe_new_target.as_deref()); - self.window - .reflow(ReflowGoal::Full, ReflowReason::MouseEvent); } } @@ -1772,8 +1767,6 @@ impl Document { let event = event.upcast::(); let result = event.fire(&target); - window.reflow(ReflowGoal::Full, ReflowReason::MouseEvent); - match result { EventStatus::Canceled => TouchEventResult::Processed(false), EventStatus::NotCanceled => TouchEventResult::Processed(true), @@ -1857,8 +1850,6 @@ impl Document { } } } - - self.window.reflow(ReflowGoal::Full, ReflowReason::KeyEvent); } pub fn ime_dismissed(&self) { @@ -2363,8 +2354,6 @@ impl Document { // http://w3c.github.io/navigation-timing/#widl-PerformanceNavigationTiming-loadEventEnd update_with_current_time_ms(&document.load_event_end); - window.reflow(ReflowGoal::Full, ReflowReason::DocumentLoaded); - if let Some(fragment) = document.url().fragment() { document.check_and_scroll_fragment(fragment); } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 0ccf0fa7661..73edda35b33 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -10,7 +10,6 @@ use dom_struct::dom_struct; use html5ever::{local_name, namespace_url, ns, LocalName, Prefix}; use js::rust::HandleObject; use profile_traits::ipc as ProfiledIpc; -use script_layout_interface::ReflowGoal; use script_traits::IFrameSandboxState::{IFrameSandboxed, IFrameUnsandboxed}; use script_traits::{ HistoryEntryReplacement, IFrameLoadInfo, IFrameLoadInfoWithData, JsEvalResult, LoadData, @@ -40,7 +39,6 @@ use crate::dom::node::{ document_from_node, window_from_node, BindContext, Node, NodeDamage, UnbindContext, }; use crate::dom::virtualmethods::VirtualMethods; -use crate::dom::window::ReflowReason; use crate::dom::windowproxy::WindowProxy; use crate::script_thread::ScriptThread; @@ -420,7 +418,7 @@ impl HTMLIFrameElement { self.upcast::().dirty(NodeDamage::OtherNodeDamage); let window = window_from_node(self); - window.reflow(ReflowGoal::Full, ReflowReason::FramedContentChanged); + window.add_pending_reflow(); } fn new_inherited( @@ -500,9 +498,6 @@ impl HTMLIFrameElement { LoadBlocker::terminate(&mut blocker); // TODO Step 5 - unset child document `mut iframe load` flag - - let window = window_from_node(self); - window.reflow(ReflowGoal::Full, ReflowReason::IFrameLoadEvent); } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index af01137b8e1..00f03df0e21 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -164,23 +164,14 @@ enum WindowState { #[derive(Debug, MallocSizeOf)] pub enum ReflowReason { CachedPageNeededReflow, - DOMContentLoaded, - DocumentLoaded, ElementStateChanged, FirstLoad, - FramedContentChanged, - IFrameLoadEvent, - ImageLoaded, - KeyEvent, MissingExplicitReflow, - MouseEvent, PendingReflow, Query, RefreshTick, RequestAnimationFrame, ScrollFromScript, - StylesheetLoaded, - Timer, Viewport, WindowResize, WorkletLoaded, @@ -2320,7 +2311,6 @@ impl Window { pub fn handle_fire_timer(&self, timer_id: TimerEventId) { self.upcast::().fire_timer(timer_id); - self.reflow(ReflowGoal::Full, ReflowReason::Timer); } pub fn set_window_size(&self, size: WindowSizeData) {