Copy sub texture, even in non OOP-R
Has become a straightforward revert of this commit.
https://chromium-review.googlesource.com/c/chromium/src/+/2216591
For as yet unknown reasons, not using CopySubTexture can cause rapid
flickering between pixellated and non-pixellated rendering. Considering
this is negatively effecting many users right now, it may be worth
pushing this change through as a quick fix.
(cherry picked from commit 568b4fffeb1f346e9a4ff3805b8836af2b1452d8)
Bug: 1134799
Change-Id: Ia25b312f3755063b1fdeaa39be5057b7654b7548
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2450842
Reviewed-by: Jonah Chin <[email protected]>
Reviewed-by: Juanmi Huertas <[email protected]>
Reviewed-by: Fernando Serboncini <[email protected]>
Commit-Queue: Aaron Krajeski <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#815697}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2476497
Reviewed-by: Aaron Krajeski <[email protected]>
Commit-Queue: Juanmi Huertas <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#555}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
index 83ffde1..7807757 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -444,17 +444,27 @@
resource_ = NewOrRecycledResource();
DCHECK(resource_);
- if (use_oop_rasterization_) {
+ auto* raster_interface = RasterInterface();
+ if (raster_interface) {
+ if (!use_oop_rasterization_)
+ TearDownSkSurface();
+
if (mode_ == SkSurface::kRetain_ContentChangeMode) {
auto old_mailbox = old_resource_shared_image->GetOrCreateGpuMailbox(
kOrderingBarrier);
auto mailbox = resource()->GetOrCreateGpuMailbox(kOrderingBarrier);
- RasterInterface()->CopySubTexture(
+ raster_interface->CopySubTexture(
old_mailbox, mailbox, GetBackingTextureTarget(), 0, 0, 0, 0,
Size().Width(), Size().Height(), false /* unpack_flip_y */,
false /* unpack_premultiply_alpha */);
}
+
+ // In non-OOPR mode we need to update the client side SkSurface with the
+ // copied texture. Recreating SkSurface here matches the GPU process
+ // behaviour that will happen in OOPR mode.
+ if (!use_oop_rasterization_)
+ GetSkSurface();
} else {
EnsureWriteAccess();
if (surface_) {
@@ -1492,6 +1502,11 @@
return recorder_ && recorder_->ListHasDrawOps();
}
+void CanvasResourceProvider::TearDownSkSurface() {
+ skia_canvas_ = nullptr;
+ surface_ = nullptr;
+}
+
size_t CanvasResourceProvider::ComputeSurfaceSize() const {
if (!surface_)
return 0;
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
index 1ee50ad..89671f6 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -265,6 +265,7 @@
cc::PaintImage MakeImageSnapshot();
virtual void RasterRecord(sk_sp<cc::PaintRecord>);
CanvasImageProvider* GetOrCreateCanvasImageProvider();
+ void TearDownSkSurface();
ResourceProviderType type_;
mutable sk_sp<SkSurface> surface_; // mutable for lazy init