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));
     }