mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	LibWeb: Paint page only if something that requires repaint happened
Resolves a performance regression from
8ba18dfd40, where moving paint scheduling
to `EventLoop::process()` led to unnecessary repaints.
This update introduces a flag to trigger repaints only when necessary,
addressing the issue where repaints previously occurred with each event
loop process, irrespective of actual changes.
			
			
This commit is contained in:
		
							parent
							
								
									906ac71eca
								
							
						
					
					
						commit
						c3f5dbb101
					
				
					 4 changed files with 15 additions and 4 deletions
				
			
		|  | @ -1980,12 +1980,14 @@ void Navigable::set_viewport_rect(CSSPixelRect const& rect) | |||
|             document->set_needs_layout(); | ||||
|         } | ||||
|         did_change = true; | ||||
|         m_needs_repaint = true; | ||||
|     } | ||||
| 
 | ||||
|     if (m_viewport_scroll_offset != rect.location()) { | ||||
|         m_viewport_scroll_offset = rect.location(); | ||||
|         scroll_offset_did_change(); | ||||
|         did_change = true; | ||||
|         m_needs_repaint = true; | ||||
|     } | ||||
| 
 | ||||
|     if (did_change && active_document()) { | ||||
|  | @ -2036,6 +2038,8 @@ void Navigable::set_needs_display(CSSPixelRect const& rect) | |||
|     // FIXME: Ignore updates outside the visible viewport rect.
 | ||||
|     //        This requires accounting for fixed-position elements in the input rect, which we don't do yet.
 | ||||
| 
 | ||||
|     m_needs_repaint = true; | ||||
| 
 | ||||
|     if (is<TraversableNavigable>(*this)) { | ||||
|         static_cast<TraversableNavigable*>(this)->page().client().page_did_invalidate(to_top_level_rect(rect)); | ||||
|         return; | ||||
|  | @ -2128,6 +2132,8 @@ void Navigable::paint(Painting::RecordingPainter& recording_painter, PaintConfig | |||
|         } | ||||
|         recording_painter.commands_list().apply_scroll_offsets(scroll_offsets_by_frame_id); | ||||
|     } | ||||
| 
 | ||||
|     m_needs_repaint = false; | ||||
| } | ||||
| 
 | ||||
| // https://html.spec.whatwg.org/multipage/browsing-the-web.html#event-uni
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Aliaksandr Kalenik
						Aliaksandr Kalenik