mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	LibWeb: Run IntersectionObserver steps only when needed
Instead of updating IOs in every iteration of the HTML event loop, we now only do it after a relayout, or after the viewport changes.
This commit is contained in:
		
							parent
							
								
									d3f8d24abb
								
							
						
					
					
						commit
						11b4216e65
					
				
					 3 changed files with 8 additions and 3 deletions
				
			
		|  | @ -1106,6 +1106,9 @@ void Document::update_layout() | |||
| 
 | ||||
|     m_needs_layout = false; | ||||
|     m_layout_update_timer->stop(); | ||||
| 
 | ||||
|     // OPTIMIZATION: We do this here instead of in HTML::EventLoop::process() to avoid redundant work.
 | ||||
|     run_the_update_intersection_observations_steps(HighResolutionTime::unsafe_shared_current_time()); | ||||
| } | ||||
| 
 | ||||
| [[nodiscard]] static Element::RequiredInvalidationAfterStyleChange update_style_recursively(Node& node) | ||||
|  |  | |||
|  | @ -248,9 +248,7 @@ void EventLoop::process() | |||
|     }); | ||||
| 
 | ||||
|     // 14. For each fully active Document in docs, run the update intersection observations steps for that Document, passing in now as the timestamp. [INTERSECTIONOBSERVER]
 | ||||
|     for_each_fully_active_document_in_docs([&](DOM::Document& document) { | ||||
|         document.run_the_update_intersection_observations_steps(now); | ||||
|     }); | ||||
|     // OPTIMIZATION: We do this automatically after layout or viewport changes, so we don't need to do it here.
 | ||||
| 
 | ||||
|     // FIXME:     15. Invoke the mark paint timing algorithm for each Document object in docs.
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ | |||
| #include <LibWeb/HTML/TraversableNavigable.h> | ||||
| #include <LibWeb/HTML/Window.h> | ||||
| #include <LibWeb/HTML/WindowProxy.h> | ||||
| #include <LibWeb/HighResolutionTime/TimeOrigin.h> | ||||
| #include <LibWeb/Infra/Strings.h> | ||||
| #include <LibWeb/Layout/Node.h> | ||||
| #include <LibWeb/Loader/GeneratedPagesLoader.h> | ||||
|  | @ -1944,6 +1945,9 @@ void Navigable::scroll_offset_did_change() | |||
| 
 | ||||
|     // 3. Append doc to doc’s pending scroll event targets.
 | ||||
|     doc->pending_scroll_event_targets().append(*doc); | ||||
| 
 | ||||
|     // OPTIMIZATION: We do this here instead of in HTML::EventLoop::process() to avoid redundant work.
 | ||||
|     doc->run_the_update_intersection_observations_steps(HighResolutionTime::unsafe_shared_current_time()); | ||||
| } | ||||
| 
 | ||||
| CSSPixelRect Navigable::to_top_level_rect(CSSPixelRect const& a_rect) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling