[go: nahoru, domu]

Fix race when drawing video frames to 2d canvas.

Without this change there are possible races in GPU resource access.
Most notably PaintCanvasVideoRenderer::Paint flushes the destination
canvas after having drawn a video frame into it because the source
image buffer's content is ephemeral and is not protected by any
locking or synchronization mechanisms.  Prior to this change, the
call to PaintCanvas::flush in PaintCanvasVideoRenderer::Paint was
not effective because RecordPaintCanvas::flush was a no-op. With
this change, the flush request gets recorded so that calling code can
take care of flushing.

BUG=1254747

Change-Id: I2a99fb75f0a29d49079bba92c8f121a6c3005bcf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3231460
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Robert Flack <flackr@chromium.org>
Reviewed-by: Juanmi Huertas <juanmihd@chromium.org>
Commit-Queue: Justin Novosad <junov@chromium.org>
Cr-Commit-Position: refs/heads/main@{#940884}
diff --git a/cc/paint/paint_canvas.h b/cc/paint/paint_canvas.h
index 7781c0ad..a3e7cd5 100644
--- a/cc/paint/paint_canvas.h
+++ b/cc/paint/paint_canvas.h
@@ -209,6 +209,8 @@
   virtual SkMatrix getTotalMatrix() const = 0;
   virtual SkM44 getLocalToDevice() const = 0;
 
+  virtual bool NeedsFlush() const = 0;
+
   // Used for printing
   enum class AnnotationType {
     URL,