Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Unified Diff: third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp

Issue 2359723003: Implement OffscreenCanvas Accelerated 2D commit() (Closed)
Patch Set: Fix rebase error Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
index ee0d12b9948f0bc78b9bc75c969e71684f9095e5..d97c9a85a77abd71a28cfce4c079bd2593759e95 100644
--- a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
+++ b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
@@ -16,6 +16,7 @@
#include "public/platform/modules/offscreencanvas/offscreen_canvas_surface.mojom-blink.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/skia/include/core/SkColor.h"
+#include "third_party/skia/include/core/SkImage.h"
#include "third_party/skia/include/core/SkXfermode.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/transform.h"
@@ -26,6 +27,7 @@ OffscreenCanvasFrameDispatcherImpl::OffscreenCanvasFrameDispatcherImpl(uint32_t
: m_surfaceId(cc::SurfaceId(clientId, localId, nonce))
, m_width(width)
, m_height(height)
+ , m_nextResourceId(1u)
, m_binding(this)
{
DCHECK(!m_sink.is_bound());
@@ -36,6 +38,10 @@ OffscreenCanvasFrameDispatcherImpl::OffscreenCanvasFrameDispatcherImpl(uint32_t
void OffscreenCanvasFrameDispatcherImpl::dispatchFrame(RefPtr<StaticBitmapImage> image)
{
+ if (!image)
+ return;
+ if (!verifyImageSize(image->imageForCurrentFrame()))
+ return;
cc::CompositorFrame frame;
frame.metadata.device_scale_factor = 1.0f;
frame.delegated_frame_data.reset(new cc::DelegatedFrameData);
@@ -48,17 +54,15 @@ void OffscreenCanvasFrameDispatcherImpl::dispatchFrame(RefPtr<StaticBitmapImage>
cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, false, 1.f, SkXfermode::kSrcOver_Mode, 0);
- unsigned nextResourceId = 1u;
- // TODO(xidachen): for now, we just submit a SolidColor frame to compositor in the 2d case,
- // we should extract data from image.
- if (!image) {
+ if (!image->isTextureBacked()) {
+ // TODO(xlai): Make unaccelerated 2d canvas work. See crbug.com/563858
+ // This is a temporary code that submits a solidColor frame.
cc::SolidColorDrawQuad* quad = pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>();
const bool forceAntialiasingOff = false;
quad->SetNew(sqs, bounds, bounds, SK_ColorGREEN, forceAntialiasingOff);
- } else { // WebGL
- DCHECK(image->isTextureBacked());
+ } else {
cc::TransferableResource resource;
- resource.id = nextResourceId;
+ resource.id = m_nextResourceId;
resource.format = cc::ResourceFormat::RGBA_8888;
// TODO(crbug.com/645590): filter should respect the image-rendering CSS property of associated canvas element.
resource.filter = GL_LINEAR;
@@ -69,11 +73,12 @@ void OffscreenCanvasFrameDispatcherImpl::dispatchFrame(RefPtr<StaticBitmapImage>
resource.is_software = false;
// TODO(crbug.com/646022): making this overlay-able.
resource.is_overlay_candidate = false;
+
frame.delegated_frame_data->resource_list.push_back(std::move(resource));
// Hold ref to |image|, to keep it alive until the browser ReturnResources.
// It guarantees that the resource is not re-used or deleted.
- m_cachedImages.add(nextResourceId++, std::move(image));
+ m_cachedImages.add(m_nextResourceId++, std::move(image));
cc::TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>();
gfx::Size rectSize(m_width, m_height);
@@ -102,4 +107,11 @@ void OffscreenCanvasFrameDispatcherImpl::ReturnResources(Vector<cc::mojom::blink
m_cachedImages.remove(resource->id);
}
+bool OffscreenCanvasFrameDispatcherImpl::verifyImageSize(const sk_sp<SkImage>& image)
+{
+ if (image && image->width() == m_width && image->height() == m_height)
+ return true;
+ return false;
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698