diff --git a/Libraries/LibWeb/HTML/RenderingThread.cpp b/Libraries/LibWeb/HTML/RenderingThread.cpp index 17cec97546d..80097e7c7aa 100644 --- a/Libraries/LibWeb/HTML/RenderingThread.cpp +++ b/Libraries/LibWeb/HTML/RenderingThread.cpp @@ -56,7 +56,7 @@ void RenderingThread::rendering_thread_loop() } } -void RenderingThread::enqueue_rendering_task(RefPtr display_list, NonnullRefPtr painting_surface, Function&& callback) +void RenderingThread::enqueue_rendering_task(NonnullRefPtr display_list, NonnullRefPtr painting_surface, Function&& callback) { Threading::MutexLocker const locker { m_rendering_task_mutex }; m_rendering_tasks.enqueue(Task { move(display_list), move(painting_surface), move(callback) }); diff --git a/Libraries/LibWeb/HTML/RenderingThread.h b/Libraries/LibWeb/HTML/RenderingThread.h index e7f385d6da4..fe4c2a36222 100644 --- a/Libraries/LibWeb/HTML/RenderingThread.h +++ b/Libraries/LibWeb/HTML/RenderingThread.h @@ -25,7 +25,7 @@ public: void start(); void set_skia_player(OwnPtr&& player) { m_skia_player = move(player); } - void enqueue_rendering_task(RefPtr, NonnullRefPtr, Function&& callback); + void enqueue_rendering_task(NonnullRefPtr, NonnullRefPtr, Function&& callback); private: void rendering_thread_loop(); @@ -38,7 +38,7 @@ private: Atomic m_exit { false }; struct Task { - RefPtr display_list; + NonnullRefPtr display_list; NonnullRefPtr painting_surface; Function callback; }; diff --git a/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Libraries/LibWeb/HTML/TraversableNavigable.cpp index 493cda3b8cd..a8519eab177 100644 --- a/Libraries/LibWeb/HTML/TraversableNavigable.cpp +++ b/Libraries/LibWeb/HTML/TraversableNavigable.cpp @@ -1454,7 +1454,7 @@ RefPtr TraversableNavigable::record_display_list(DevicePi return document->record_display_list(paint_config); } -void TraversableNavigable::start_display_list_rendering(RefPtr display_list, NonnullRefPtr painting_surface, Function&& callback) +void TraversableNavigable::start_display_list_rendering(NonnullRefPtr display_list, NonnullRefPtr painting_surface, Function&& callback) { m_rendering_thread.enqueue_rendering_task(move(display_list), move(painting_surface), move(callback)); } diff --git a/Libraries/LibWeb/HTML/TraversableNavigable.h b/Libraries/LibWeb/HTML/TraversableNavigable.h index 88557b26f44..1bd18b8b092 100644 --- a/Libraries/LibWeb/HTML/TraversableNavigable.h +++ b/Libraries/LibWeb/HTML/TraversableNavigable.h @@ -98,7 +98,7 @@ public: [[nodiscard]] GC::Ptr currently_focused_area(); RefPtr record_display_list(DevicePixelRect const&, PaintOptions); - void start_display_list_rendering(RefPtr display_list, NonnullRefPtr painting_surface, Function&& callback); + void start_display_list_rendering(NonnullRefPtr display_list, NonnullRefPtr painting_surface, Function&& callback); enum class CheckIfUnloadingIsCanceledResult { CanceledByBeforeUnload, diff --git a/Services/WebContent/PageClient.cpp b/Services/WebContent/PageClient.cpp index ff99b62d789..698521fced3 100644 --- a/Services/WebContent/PageClient.cpp +++ b/Services/WebContent/PageClient.cpp @@ -242,8 +242,12 @@ void PageClient::start_display_list_rendering(Web::DevicePixelRect const& conten paint_options.has_focus = m_has_focus; auto& traversable = *page().top_level_traversable(); auto display_list = traversable.record_display_list(content_rect, paint_options); + if (!display_list) { + callback(); + return; + } auto painting_surface = traversable.painting_surface_for_backing_store(target); - traversable.start_display_list_rendering(display_list, painting_surface, move(callback)); + traversable.start_display_list_rendering(*display_list, painting_surface, move(callback)); } Queue& PageClient::input_event_queue()