summarylogtreecommitdiffstats
path: root/chromium-sway-presentation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'chromium-sway-presentation.patch')
-rw-r--r--chromium-sway-presentation.patch71
1 files changed, 0 insertions, 71 deletions
diff --git a/chromium-sway-presentation.patch b/chromium-sway-presentation.patch
deleted file mode 100644
index 3d06fcebb1df..000000000000
--- a/chromium-sway-presentation.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-commit 5682b344c0dabc6d7047363f9c877dcf4c0add72
-Author: Maksim Sisov <msisov@igalia.com>
-Date: Fri Jul 26 14:33:28 2019 +0300
-
- [ozone/wayland] Sway: avoid sending presentation early.
-
- In Sway, presentation callbacks may come much earlier than we send
- submission callbacks. That results in unexpected crashes in the
- GbmSurfacelessWayland, because of early presentation callbacks.
- Shortly speaking, a submitted frame may not receive the submission
- callback and not be moved to the list of waiting for a presentation
- frames. That means GbmSurfacelessWayland::OnPresentation simply
- accesses an invalid pointer to a frame, for which the presentation
- feedback comes.
-
- Bug: 974456
- Change-Id: Iae7ab57a00d06f0dde6057ed05df885239e099bd
-
-diff --git a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
-index eed48394602f..cd3245390fdf 100644
---- a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
-+++ b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
-@@ -228,6 +228,12 @@ class WaylandBufferManagerHost::Surface {
- // surface can tell the gpu about successful swap.
- bool released = true;
-
-+ // In some cases, a presentation feedback can come earlier than we fire a
-+ // submission callback. Thus, instead of sending it immediately to the GPU
-+ // process, we store it and fire as soon as the submission callback is
-+ // fired.
-+ bool needs_send_feedback = false;
-+
- gfx::PresentationFeedback feedback;
-
- DISALLOW_COPY_AND_ASSIGN(WaylandBuffer);
-@@ -355,6 +361,10 @@ class WaylandBufferManagerHost::Surface {
- void CompleteSubmission() {
- DCHECK(submitted_buffer_);
- auto id = submitted_buffer_->buffer_id;
-+
-+ auto feedback = std::move(submitted_buffer_->feedback);
-+ bool needs_send_feedback = submitted_buffer_->needs_send_feedback;
-+
- prev_submitted_buffer_ = submitted_buffer_;
- submitted_buffer_ = nullptr;
- // We can now complete the latest submission. We had to wait for this
-@@ -370,14 +380,21 @@ class WaylandBufferManagerHost::Surface {
- OnPresentation(id, gfx::PresentationFeedback(
- base::TimeTicks::Now(), base::TimeDelta(),
- GetPresentationKindFlags(0)));
-+ } else if (needs_send_feedback) {
-+ OnPresentation(id, std::move(feedback));
- }
- }
-
- void OnPresentation(uint32_t buffer_id,
- const gfx::PresentationFeedback& feedback) {
-- // The order of submission and presentation callbacks is checked on the GPU
-- // side, but it must never happen, because the Submission is called
-- // immediately after the buffer is swapped.
-+ // The order of submission and presentation callbacks cannot be controlled.
-+ // Some Wayland compositors may fire presentation callbacks earlier than we
-+ // are able to send submission callbacks is bad. Thus, handle it here.
-+ if (submitted_buffer_ && submitted_buffer_->buffer_id == buffer_id) {
-+ submitted_buffer_->feedback = feedback;
-+ return;
-+ }
-+
- buffer_manager_->OnPresentation(window_->GetWidget(), buffer_id, feedback);
- }
-