Canvas low latency: a few more cleanups
This CL has a few side cleanups to crrev.com/c/1321773, taken
out for clarity.
- Renames class
CanvasResourceProviderRamGpuMemoryBuffer to
CanvasResourceProviderBitmapGpuMemoryBuffer
- Moves calculation of |gl_format| to where it's used.
Bug: 902585
Change-Id: Ia0f0393425afd60ad98dbdd38f3ef5bc0d5e9e2f
Reviewed-on: https://chromium-review.googlesource.com/c/1321749
Commit-Queue: Miguel Casas <mcasas@chromium.org>
Reviewed-by: Fernando Serboncini <fserb@chromium.org>
Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606229}
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
index 79bb7835..712d1b5 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -97,17 +97,15 @@
DCHECK(IsValid());
DCHECK(out_callback);
- scoped_refptr<CanvasResource> this_ref(this);
auto func = WTF::Bind(&ReleaseFrameResources, provider_,
- WTF::Passed(std::move(this_ref)));
+ WTF::Passed(base::WrapRefCounted(this)));
*out_callback = viz::SingleReleaseCallback::Create(std::move(func));
- if (out_resource) {
- if (SupportsAcceleratedCompositing())
- return PrepareAcceleratedTransferableResource(out_resource, sync_mode);
- return PrepareUnacceleratedTransferableResource(out_resource);
- }
- return true;
+ if (!out_resource)
+ return true;
+ if (SupportsAcceleratedCompositing())
+ return PrepareAcceleratedTransferableResource(out_resource, sync_mode);
+ return PrepareUnacceleratedTransferableResource(out_resource);
}
bool CanvasResource::PrepareAcceleratedTransferableResource(
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 44d13bd..2d7dee09 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -28,16 +28,13 @@
namespace blink {
-// CanvasResourceProviderTexture
-//==============================================================================
-//
-// * Renders to a texture managed by skia. Mailboxes are straight GL textures.
-// * Layers are not overlay candidates
-
void CanvasResourceProvider::RecordTypeToUMA(ResourceProviderType type) {
UMA_HISTOGRAM_ENUMERATION("Blink.Canvas.ResourceProviderType", type);
}
+// * Renders to a texture managed by Skia. Mailboxes are backed by vanilla GL
+// textures.
+// * Layers are not overlay candidates.
class CanvasResourceProviderTexture : public CanvasResourceProvider {
public:
CanvasResourceProviderTexture(
@@ -142,13 +139,9 @@
const bool is_origin_top_left_;
};
-// CanvasResourceProviderTextureGpuMemoryBuffer
-//==============================================================================
-//
-// * Renders to a texture managed by skia. Mailboxes are
-// gpu-accelerated platform native surfaces.
-// * Layers are overlay candidates
-
+// * Renders to a texture managed by Skia. Mailboxes are GPU-accelerated
+// platform native surfaces.
+// * Layers are overlay candidates.
class CanvasResourceProviderTextureGpuMemoryBuffer final
: public CanvasResourceProviderTexture {
public:
@@ -217,12 +210,8 @@
}
};
-// CanvasResourceProviderBitmap
-//==============================================================================
-//
-// * Renders to a skia RAM-backed bitmap
-// * Mailboxing is not supported : cannot be directly composited
-
+// * Renders to a Skia RAM-backed bitmap.
+// * Mailboxing is not supported : cannot be directly composited.
class CanvasResourceProviderBitmap : public CanvasResourceProvider {
public:
CanvasResourceProviderBitmap(
@@ -259,17 +248,13 @@
}
};
-// CanvasResourceProviderRamGpuMemoryBuffer
-//==============================================================================
-//
-// * Renders to a ram memory buffer managed by skia
+// * Renders to a ram memory buffer managed by Skia
// * Uses GpuMemoryBuffer to pass frames to the compositor
// * Layers are overlay candidates
-
-class CanvasResourceProviderRamGpuMemoryBuffer final
+class CanvasResourceProviderBitmapGpuMemoryBuffer final
: public CanvasResourceProviderBitmap {
public:
- CanvasResourceProviderRamGpuMemoryBuffer(
+ CanvasResourceProviderBitmapGpuMemoryBuffer(
const IntSize& size,
const CanvasColorParams color_params,
base::WeakPtr<WebGraphicsContext3DProviderWrapper>
@@ -280,14 +265,14 @@
std::move(context_provider_wrapper),
std::move(resource_dispatcher)) {}
- ~CanvasResourceProviderRamGpuMemoryBuffer() override = default;
+ ~CanvasResourceProviderBitmapGpuMemoryBuffer() override = default;
bool SupportsDirectCompositing() const override { return true; }
bool SupportsSingleBuffering() const override { return true; }
private:
scoped_refptr<CanvasResource> CreateResource() final {
TRACE_EVENT0("blink",
- "CanvasResourceProviderRamGpuMemoryBuffer::CreateResource");
+ "CanvasResourceProviderBitmapGpuMemoryBuffer::CreateResource");
constexpr bool is_accelerated = false;
return CanvasResourceGpuMemoryBuffer::Create(
@@ -297,7 +282,7 @@
scoped_refptr<CanvasResource> ProduceFrame() final {
TRACE_EVENT0("blink",
- "CanvasResourceProviderRamGpuMemoryBuffer::ProduceFrame");
+ "CanvasResourceProviderBitmapGpuMemoryBuffer::ProduceFrame");
DCHECK(GetSkSurface());
@@ -318,12 +303,8 @@
}
};
-// CanvasResourceProviderSharedBitmap
-//==============================================================================
-//
-// * Renders to a shared memory bitmap
-// * Uses SharedBitmaps to pass frames directly to the compositor
-
+// * Renders to a shared memory bitmap.
+// * Uses SharedBitmaps to pass frames directly to the compositor.
class CanvasResourceProviderSharedBitmap : public CanvasResourceProviderBitmap {
public:
CanvasResourceProviderSharedBitmap(
@@ -371,9 +352,6 @@
}
};
-// CanvasResourceProvider base class implementation
-//==============================================================================
-
enum CanvasResourceType {
kTextureGpuMemoryBufferResourceType,
kRamGpuMemoryBufferResourceType,
@@ -481,8 +459,10 @@
gfx::Size(size), color_params.GetBufferFormat())) {
continue;
}
- provider = std::make_unique<CanvasResourceProviderRamGpuMemoryBuffer>(
- size, color_params, context_provider_wrapper, resource_dispatcher);
+ provider =
+ std::make_unique<CanvasResourceProviderBitmapGpuMemoryBuffer>(
+ size, color_params, context_provider_wrapper,
+ resource_dispatcher);
break;
case kSharedBitmapResourceType:
if (!resource_dispatcher)
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
index 18adfcb9..06fd08f6 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
@@ -1421,25 +1421,25 @@
Platform::Current()->GetGpuMemoryBufferManager();
if (ShouldUseChromiumImage()) {
gfx::BufferFormat buffer_format;
- GLenum gl_format = GL_NONE;
if (allocate_alpha_channel_) {
buffer_format = use_half_float_storage_ ? gfx::BufferFormat::RGBA_F16
: gfx::BufferFormat::RGBA_8888;
- gl_format = GL_RGBA;
} else {
DCHECK(!use_half_float_storage_);
buffer_format = gfx::BufferFormat::RGBX_8888;
if (gpu::IsImageFromGpuMemoryBufferFormatSupported(
gfx::BufferFormat::BGRX_8888,
- ContextProvider()->GetCapabilities()))
+ ContextProvider()->GetCapabilities())) {
buffer_format = gfx::BufferFormat::BGRX_8888;
- gl_format = GL_RGB;
+ }
}
gpu_memory_buffer = gpu_memory_buffer_manager->CreateGpuMemoryBuffer(
gfx::Size(size), buffer_format, gfx::BufferUsage::SCANOUT,
gpu::kNullSurfaceHandle);
if (gpu_memory_buffer) {
gpu_memory_buffer->SetColorSpace(storage_color_space_);
+ const GLenum gl_format = allocate_alpha_channel_ ? GL_RGBA : GL_RGB;
+
image_id =
gl_->CreateImageCHROMIUM(gpu_memory_buffer->AsClientBuffer(),
size.Width(), size.Height(), gl_format);