Only request synchronous repaint when a resize will actually occur.

This commit is contained in:
Josh Matthews 2021-03-03 09:36:11 -05:00
parent 10231573be
commit 49ddc5ea3d
3 changed files with 12 additions and 14 deletions

View file

@ -835,7 +835,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
} }
} }
pub fn on_resize_window_event(&mut self) { pub fn on_resize_window_event(&mut self) -> bool {
debug!("compositor resize requested"); debug!("compositor resize requested");
let old_coords = self.embedder_coordinates; let old_coords = self.embedder_coordinates;
@ -847,11 +847,12 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
} }
if self.embedder_coordinates.viewport == old_coords.viewport { if self.embedder_coordinates.viewport == old_coords.viewport {
return; return false;
} }
self.send_window_size(WindowSizeType::Resize); self.send_window_size(WindowSizeType::Resize);
self.composite_if_necessary(CompositingReason::Resize); self.composite_if_necessary(CompositingReason::Resize);
return true;
} }
pub fn on_mouse_window_event_class(&mut self, mouse_window_event: MouseWindowEvent) { pub fn on_mouse_window_event_class(&mut self, mouse_window_event: MouseWindowEvent) {

View file

@ -549,7 +549,7 @@ where
} }
} }
fn handle_window_event(&mut self, event: WindowEvent) { fn handle_window_event(&mut self, event: WindowEvent) -> bool {
match event { match event {
WindowEvent::Idle => {}, WindowEvent::Idle => {},
@ -558,7 +558,7 @@ where
}, },
WindowEvent::Resize => { WindowEvent::Resize => {
self.compositor.on_resize_window_event(); return self.compositor.on_resize_window_event();
}, },
WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => { WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => {
@ -745,6 +745,7 @@ where
} }
}, },
} }
return false;
} }
fn receive_messages(&mut self) { fn receive_messages(&mut self) {
@ -776,18 +777,20 @@ where
::std::mem::replace(&mut self.embedder_events, Vec::new()) ::std::mem::replace(&mut self.embedder_events, Vec::new())
} }
pub fn handle_events(&mut self, events: Vec<WindowEvent>) { pub fn handle_events(&mut self, events: Vec<WindowEvent>) -> bool {
if self.compositor.receive_messages() { if self.compositor.receive_messages() {
self.receive_messages(); self.receive_messages();
} }
let mut need_resize = false;
for event in events { for event in events {
self.handle_window_event(event); need_resize |= self.handle_window_event(event);
} }
if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown { if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown {
self.compositor.perform_updates(); self.compositor.perform_updates();
} else { } else {
self.embedder_events.push((None, EmbedderMsg::Shutdown)); self.embedder_events.push((None, EmbedderMsg::Shutdown));
} }
need_resize
} }
pub fn repaint_synchronously(&mut self) { pub fn repaint_synchronously(&mut self) {

View file

@ -204,19 +204,13 @@ impl App {
} }
}); });
// FIXME: this could be handled by Servo. We don't need
// a repaint_synchronously function exposed.
let need_resize = app_events.iter().any(|e| match *e {
WindowEvent::Resize => true,
_ => false,
});
browser.handle_window_events(app_events); browser.handle_window_events(app_events);
let mut servo_events = self.servo.as_mut().unwrap().get_events(); let mut servo_events = self.servo.as_mut().unwrap().get_events();
let mut need_resize = false;
loop { loop {
browser.handle_servo_events(servo_events); browser.handle_servo_events(servo_events);
self.servo.as_mut().unwrap().handle_events(browser.get_events()); need_resize |= self.servo.as_mut().unwrap().handle_events(browser.get_events());
if browser.shutdown_requested() { if browser.shutdown_requested() {
return true; return true;
} }