| Index: third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
|
| diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
|
| index c94e05c81040f6398d1c29b041800fc63abdf881..ebd8677aa0f0974de3f7cdf621489e95a648d402 100644
|
| --- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
|
| +++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
|
| @@ -18,6 +18,8 @@
|
| #include "platform/graphics/ImageBuffer.h"
|
| #include "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h"
|
| #include "platform/graphics/StaticBitmapImage.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| +#include "platform/graphics/gpu/AcceleratedImageBufferSurface.h"
|
| #include "platform/image-encoders/ImageEncoderUtils.h"
|
| #include "platform/instrumentation/tracing/TraceEvent.h"
|
| #include "platform/wtf/MathExtras.h"
|
| @@ -109,7 +111,7 @@ PassRefPtr<Image> OffscreenCanvas::GetSourceImageForCanvas(
|
| SourceImageStatus* status,
|
| AccelerationHint hint,
|
| SnapshotReason reason,
|
| - const FloatSize& size) const {
|
| + const FloatSize& size) {
|
| if (!context_) {
|
| *status = kInvalidSourceImageStatus;
|
| sk_sp<SkSurface> surface =
|
| @@ -237,6 +239,38 @@ OffscreenCanvasFrameDispatcher* OffscreenCanvas::GetOrCreateFrameDispatcher() {
|
| return frame_dispatcher_.get();
|
| }
|
|
|
| +void OffscreenCanvas::DiscardImageBuffer() {
|
| + image_buffer_.reset();
|
| + needs_matrix_clip_restore_ = true;
|
| +}
|
| +
|
| +ImageBuffer* OffscreenCanvas::GetOrCreateImageBuffer() {
|
| + if (!image_buffer_) {
|
| + IntSize surface_size(width(), height());
|
| + OpacityMode opacity_mode =
|
| + context_->CreationAttributes().hasAlpha() ? kNonOpaque : kOpaque;
|
| + std::unique_ptr<ImageBufferSurface> surface;
|
| + if (RuntimeEnabledFeatures::accelerated2dCanvasEnabled()) {
|
| + surface.reset(
|
| + new AcceleratedImageBufferSurface(surface_size, opacity_mode));
|
| + }
|
| +
|
| + if (!surface || !surface->IsValid()) {
|
| + surface.reset(new UnacceleratedImageBufferSurface(
|
| + surface_size, opacity_mode, kInitializeImagePixels));
|
| + }
|
| +
|
| + image_buffer_ = ImageBuffer::Create(std::move(surface));
|
| +
|
| + if (needs_matrix_clip_restore_) {
|
| + needs_matrix_clip_restore_ = false;
|
| + context_->RestoreCanvasMatrixClipStack(image_buffer_->Canvas());
|
| + }
|
| + }
|
| +
|
| + return image_buffer_.get();
|
| +}
|
| +
|
| ScriptPromise OffscreenCanvas::Commit(RefPtr<StaticBitmapImage> image,
|
| bool is_web_gl_software_rendering,
|
| ScriptState* script_state,
|
|
|