SkiaRenderer/macOS: Use IOSurfaceInUse to not recycle in-use resources
Add a method GLImage::IsInUseByWindowServer. This is implemented
only macOS, and queries the IOSurfaceIsInUse method. Roll the
the function GLImageIOSurface::CanCheckIOSurfaceIsInUse into the
GLImageIOSurface::IsInUseByWindowServer function.
Add two accessors to viz::OutputPresenter::OverlayData. One is
IsInUseByWindowServer (which calls the method on the GLImage).
The second returns the mailbox for the the overlay.
Add viz::SkiaOutputDeviceBufferQueue::in_use_by_window_server_overlays_,
which is a map from gpu::Mailbox to viz::OutputPresenter::OverlayData.
When overlays are swapped in SkiaOutputDeviceBufferQueue::
DoFinishSwapBuffers, move them into this map, and remove any entries
that are no longer in use.
Bug: 1100750
Change-Id: I32ccc4aee6e0392e258bc03086f70f06a5b2bdc0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2274776
Commit-Queue: ccameron <ccameron@chromium.org>
Reviewed-by: Peng Huang <penghuang@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#786918}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: e7d4874c0220d1cad5aaeb047a40a6e92e133af0
diff --git a/command_buffer/service/shared_image_representation.h b/command_buffer/service/shared_image_representation.h
index 2337a2c..5c7d414 100644
--- a/command_buffer/service/shared_image_representation.h
+++ b/command_buffer/service/shared_image_representation.h
@@ -69,6 +69,7 @@
const gfx::Size& size() const { return backing_->size(); }
const gfx::ColorSpace& color_space() const { return backing_->color_space(); }
uint32_t usage() const { return backing_->usage(); }
+ const gpu::Mailbox& mailbox() const { return backing_->mailbox(); }
MemoryTypeTracker* tracker() { return tracker_; }
bool IsCleared() const { return backing_->IsCleared(); }
void SetCleared() { backing_->SetCleared(); }
diff --git a/ipc/service/image_transport_surface_overlay_mac.mm b/ipc/service/image_transport_surface_overlay_mac.mm
index f0dd292..67e0efb 100644
--- a/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/ipc/service/image_transport_surface_overlay_mac.mm
@@ -163,10 +163,8 @@
bool in_use = false;
gl::GLImageIOSurface* io_surface_image =
gl::GLImageIOSurface::FromGLImage(query.image.get());
- if (io_surface_image) {
- in_use = io_surface_image->CanCheckIOSurfaceIsInUse() &&
- IOSurfaceIsInUse(io_surface_image->io_surface());
- }
+ if (io_surface_image)
+ in_use = io_surface_image->IsInUseByWindowServer();
response.in_use = in_use;
params.texture_in_use_responses.push_back(std::move(response));
}