فهرست منبع

WindowServer+LibGUI: Make much of window construction asynchronous

Most of the IPC that happens between clients and WindowServer when
creating and configuring windows can be asynchronous. This further
reduces the amount of ping-ponging played during application startup.
Andreas Kling 4 سال پیش
والد
کامیت
1aa56f0129
2فایلهای تغییر یافته به همراه21 افزوده شده و 21 حذف شده
  1. 11 11
      Userland/Libraries/LibGUI/Window.cpp
  2. 10 10
      Userland/Services/WindowServer/WindowServer.ipc

+ 11 - 11
Userland/Libraries/LibGUI/Window.cpp

@@ -204,7 +204,7 @@ void Window::set_title(String title)
     m_title_when_windowless = move(title);
     if (!is_visible())
         return;
-    WindowServerConnection::the().set_window_title(m_window_id, m_title_when_windowless);
+    WindowServerConnection::the().async_set_window_title(m_window_id, m_title_when_windowless);
 }
 
 String Window::title() const
@@ -262,7 +262,7 @@ void Window::set_minimum_size(const Gfx::IntSize& size)
     m_minimum_size_when_windowless = size;
 
     if (is_visible())
-        WindowServerConnection::the().set_window_minimum_size(m_window_id, size);
+        WindowServerConnection::the().async_set_window_minimum_size(m_window_id, size);
 }
 
 void Window::center_on_screen()
@@ -695,7 +695,7 @@ void Window::set_has_alpha_channel(bool value)
     m_back_store = nullptr;
     m_front_store = nullptr;
 
-    WindowServerConnection::the().set_window_has_alpha_channel(m_window_id, value);
+    WindowServerConnection::the().async_set_window_has_alpha_channel(m_window_id, value);
     update();
 }
 
@@ -710,7 +710,7 @@ void Window::set_opacity(float opacity)
     m_opacity_when_windowless = opacity;
     if (!is_visible())
         return;
-    WindowServerConnection::the().set_window_opacity(m_window_id, opacity);
+    WindowServerConnection::the().async_set_window_opacity(m_window_id, opacity);
 }
 
 void Window::set_alpha_hit_threshold(float threshold)
@@ -724,7 +724,7 @@ void Window::set_alpha_hit_threshold(float threshold)
     m_alpha_hit_threshold = threshold;
     if (!is_visible())
         return;
-    WindowServerConnection::the().set_window_alpha_hit_threshold(m_window_id, threshold);
+    WindowServerConnection::the().async_set_window_alpha_hit_threshold(m_window_id, threshold);
 }
 
 void Window::set_hovered_widget(Widget* widget)
@@ -829,7 +829,7 @@ void Window::apply_icon()
     if (!is_visible())
         return;
 
-    WindowServerConnection::the().set_window_icon_bitmap(m_window_id, m_icon->to_shareable_bitmap());
+    WindowServerConnection::the().async_set_window_icon_bitmap(m_window_id, m_icon->to_shareable_bitmap());
 }
 
 void Window::start_interactive_resize()
@@ -978,7 +978,7 @@ void Window::set_base_size(const Gfx::IntSize& base_size)
         return;
     m_base_size = base_size;
     if (is_visible())
-        WindowServerConnection::the().set_window_base_size_and_size_increment(m_window_id, m_base_size, m_size_increment);
+        WindowServerConnection::the().async_set_window_base_size_and_size_increment(m_window_id, m_base_size, m_size_increment);
 }
 
 void Window::set_size_increment(const Gfx::IntSize& size_increment)
@@ -987,7 +987,7 @@ void Window::set_size_increment(const Gfx::IntSize& size_increment)
         return;
     m_size_increment = size_increment;
     if (is_visible())
-        WindowServerConnection::the().set_window_base_size_and_size_increment(m_window_id, m_base_size, m_size_increment);
+        WindowServerConnection::the().async_set_window_base_size_and_size_increment(m_window_id, m_base_size, m_size_increment);
 }
 
 void Window::set_resize_aspect_ratio(const Optional<Gfx::IntSize>& ratio)
@@ -997,7 +997,7 @@ void Window::set_resize_aspect_ratio(const Optional<Gfx::IntSize>& ratio)
 
     m_resize_aspect_ratio = ratio;
     if (is_visible())
-        WindowServerConnection::the().set_window_resize_aspect_ratio(m_window_id, m_resize_aspect_ratio);
+        WindowServerConnection::the().async_set_window_resize_aspect_ratio(m_window_id, m_resize_aspect_ratio);
 }
 
 void Window::did_add_widget(Badge<Widget>, Widget&)
@@ -1038,9 +1038,9 @@ void Window::update_cursor()
     m_effective_cursor = new_cursor;
 
     if (m_custom_cursor)
-        WindowServerConnection::the().set_window_custom_cursor(m_window_id, m_custom_cursor->to_shareable_bitmap());
+        WindowServerConnection::the().async_set_window_custom_cursor(m_window_id, m_custom_cursor->to_shareable_bitmap());
     else
-        WindowServerConnection::the().set_window_cursor(m_window_id, (u32)m_effective_cursor);
+        WindowServerConnection::the().async_set_window_cursor(m_window_id, (u32)m_effective_cursor);
 }
 
 void Window::focus_a_widget_if_possible(FocusSource source)

+ 10 - 10
Userland/Services/WindowServer/WindowServer.ipc

@@ -51,7 +51,7 @@ endpoint WindowServer
 
     set_window_menubar(i32 window_id, i32 menubar_id) =|
 
-    set_window_title(i32 window_id, [UTF8] String title) => ()
+    set_window_title(i32 window_id, [UTF8] String title) =|
     get_window_title(i32 window_id) => ([UTF8] String title)
 
     set_window_progress(i32 window_id, Optional<i32> progress) =|
@@ -62,7 +62,7 @@ endpoint WindowServer
     set_window_rect(i32 window_id, Gfx::IntRect rect) => (Gfx::IntRect rect)
     get_window_rect(i32 window_id) => (Gfx::IntRect rect)
 
-    set_window_minimum_size(i32 window_id, Gfx::IntSize size) => ()
+    set_window_minimum_size(i32 window_id, Gfx::IntSize size) =|
     get_window_minimum_size(i32 window_id) => (Gfx::IntSize size)
 
     get_applet_rect_on_screen(i32 window_id) => (Gfx::IntRect rect)
@@ -75,13 +75,13 @@ endpoint WindowServer
     did_finish_painting(i32 window_id, Vector<Gfx::IntRect> rects) =|
 
     set_global_cursor_tracking(i32 window_id, bool enabled) => ()
-    set_window_opacity(i32 window_id, float opacity) => ()
+    set_window_opacity(i32 window_id, float opacity) =|
 
-    set_window_alpha_hit_threshold(i32 window_id, float threshold) => ()
+    set_window_alpha_hit_threshold(i32 window_id, float threshold) =|
 
     set_window_backing_store(i32 window_id, i32 bpp, i32 pitch, IPC::File anon_file, i32 serial, bool has_alpha_channel, Gfx::IntSize size, bool flush_immediately) => ()
 
-    set_window_has_alpha_channel(i32 window_id, bool has_alpha_channel) => ()
+    set_window_has_alpha_channel(i32 window_id, bool has_alpha_channel) =|
     move_window_to_front(i32 window_id) => ()
     set_fullscreen(i32 window_id, bool fullscreen) => ()
     set_frameless(i32 window_id, bool frameless) => ()
@@ -94,11 +94,11 @@ endpoint WindowServer
     set_wallpaper_mode(String mode)  => ()
 
     set_resolution(Gfx::IntSize resolution, int scale_factor) => (bool success, Gfx::IntSize resolution, int scale_factor)
-    set_window_icon_bitmap(i32 window_id, Gfx::ShareableBitmap icon) => ()
+    set_window_icon_bitmap(i32 window_id, Gfx::ShareableBitmap icon) =|
 
     get_wallpaper() => (String path)
-    set_window_cursor(i32 window_id, i32 cursor_type) => ()
-    set_window_custom_cursor(i32 window_id, Gfx::ShareableBitmap cursor) => ()
+    set_window_cursor(i32 window_id, i32 cursor_type) =|
+    set_window_custom_cursor(i32 window_id, Gfx::ShareableBitmap cursor) =|
 
     start_drag([UTF8] String text, HashMap<String,ByteBuffer> mime_data, Gfx::ShareableBitmap drag_bitmap) => (bool started)
 
@@ -106,8 +106,8 @@ endpoint WindowServer
     get_system_theme() => ([UTF8] String theme_name)
     refresh_system_theme() =|
 
-    set_window_base_size_and_size_increment(i32 window_id, Gfx::IntSize base_size, Gfx::IntSize size_increment) => ()
-    set_window_resize_aspect_ratio(i32 window_id, Optional<Gfx::IntSize> resize_aspect_ratio) => ()
+    set_window_base_size_and_size_increment(i32 window_id, Gfx::IntSize base_size, Gfx::IntSize size_increment) =|
+    set_window_resize_aspect_ratio(i32 window_id, Optional<Gfx::IntSize> resize_aspect_ratio) =|
 
     enable_display_link() =|
     disable_display_link() =|