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

Unified Diff: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp

Issue 2849463005: Refactor ImageBuffer to make OffscreenCanvas match HTMLCanvasElement (Closed)
Patch Set: x Created 3 years, 8 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
Index: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
index 667d8b102cba45503af01d149d88f52409e2dc02..ade20b6f682d0859f357908e773e44683c00428e 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -12,8 +12,6 @@
#include "core/workers/WorkerSettings.h"
#include "platform/graphics/ImageBuffer.h"
#include "platform/graphics/StaticBitmapImage.h"
-#include "platform/graphics/UnacceleratedImageBufferSurface.h"
-#include "platform/graphics/gpu/AcceleratedImageBufferSurface.h"
#include "platform/graphics/paint/PaintCanvas.h"
#include "platform/wtf/Assertions.h"
#include "platform/wtf/CurrentTime.h"
@@ -90,11 +88,11 @@ int OffscreenCanvasRenderingContext2D::Height() const {
}
bool OffscreenCanvasRenderingContext2D::HasImageBuffer() const {
- return !!image_buffer_;
+ return host()->GetImageBuffer();
}
void OffscreenCanvasRenderingContext2D::Reset() {
- image_buffer_ = nullptr;
+ host()->DiscardImageBuffer();
BaseRenderingContext2D::Reset();
}
@@ -104,38 +102,15 @@ ColorBehavior OffscreenCanvasRenderingContext2D::DrawImageColorBehavior()
}
ImageBuffer* OffscreenCanvasRenderingContext2D::GetImageBuffer() const {
- if (!image_buffer_) {
- IntSize surface_size(Width(), Height());
- OpacityMode opacity_mode = 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));
- }
-
- OffscreenCanvasRenderingContext2D* non_const_this =
- const_cast<OffscreenCanvasRenderingContext2D*>(this);
- non_const_this->image_buffer_ = ImageBuffer::Create(std::move(surface));
-
- if (needs_matrix_clip_restore_) {
- RestoreMatrixClipStack(image_buffer_->Canvas());
- non_const_this->needs_matrix_clip_restore_ = false;
- }
- }
-
- return image_buffer_.get();
+ return const_cast<CanvasRenderingContextHost*>(host())
+ ->GetOrCreateImageBuffer();
}
RefPtr<StaticBitmapImage>
OffscreenCanvasRenderingContext2D::TransferToStaticBitmapImage() {
if (!GetImageBuffer())
return nullptr;
- sk_sp<SkImage> sk_image = image_buffer_->NewSkImageSnapshot(
+ sk_sp<SkImage> sk_image = host()->GetImageBuffer()->NewSkImageSnapshot(
kPreferAcceleration, kSnapshotReasonTransferToImageBitmap);
RefPtr<StaticBitmapImage> image =
StaticBitmapImage::Create(std::move(sk_image));
@@ -151,8 +126,7 @@ ImageBitmap* OffscreenCanvasRenderingContext2D::TransferToImageBitmap(
RefPtr<StaticBitmapImage> image = TransferToStaticBitmapImage();
if (!image)
return nullptr;
- image_buffer_.reset(); // "Transfer" means no retained buffer
- needs_matrix_clip_restore_ = true;
+ host()->DiscardImageBuffer(); // "Transfer" means no retained buffer
return ImageBitmap::Create(std::move(image));
}
@@ -161,7 +135,8 @@ PassRefPtr<Image> OffscreenCanvasRenderingContext2D::GetImage(
SnapshotReason reason) const {
if (!GetImageBuffer())
return nullptr;
- sk_sp<SkImage> sk_image = image_buffer_->NewSkImageSnapshot(hint, reason);
+ sk_sp<SkImage> sk_image =
+ host()->GetImageBuffer()->NewSkImageSnapshot(hint, reason);
RefPtr<StaticBitmapImage> image =
StaticBitmapImage::Create(std::move(sk_image));
return image;
@@ -171,8 +146,8 @@ ImageData* OffscreenCanvasRenderingContext2D::ToImageData(
SnapshotReason reason) {
if (!GetImageBuffer())
return nullptr;
- sk_sp<SkImage> snapshot =
- image_buffer_->NewSkImageSnapshot(kPreferNoAcceleration, reason);
+ sk_sp<SkImage> snapshot = host()->GetImageBuffer()->NewSkImageSnapshot(
+ kPreferNoAcceleration, reason);
ImageData* image_data = nullptr;
if (snapshot) {
image_data = ImageData::Create(host()->Size());
@@ -204,18 +179,18 @@ PaintCanvas* OffscreenCanvasRenderingContext2D::DrawingCanvas() const {
}
PaintCanvas* OffscreenCanvasRenderingContext2D::ExistingDrawingCanvas() const {
- if (!image_buffer_)
+ if (!host()->GetImageBuffer())
return nullptr;
- return image_buffer_->Canvas();
+ return host()->GetImageBuffer()->Canvas();
}
void OffscreenCanvasRenderingContext2D::DisableDeferral(DisableDeferralReason) {
}
AffineTransform OffscreenCanvasRenderingContext2D::BaseTransform() const {
- if (!image_buffer_)
+ if (!host()->GetImageBuffer())
return AffineTransform(); // identity
- return image_buffer_->BaseTransform();
+ return host()->GetImageBuffer()->BaseTransform();
}
void OffscreenCanvasRenderingContext2D::DidDraw(const SkIRect& dirty_rect) {}
@@ -242,7 +217,7 @@ bool OffscreenCanvasRenderingContext2D::isContextLost() const {
}
bool OffscreenCanvasRenderingContext2D::IsPaintable() const {
- return this->GetImageBuffer();
+ return GetImageBuffer();
}
CanvasColorSpace OffscreenCanvasRenderingContext2D::ColorSpace() const {
@@ -258,6 +233,6 @@ CanvasPixelFormat OffscreenCanvasRenderingContext2D::PixelFormat() const {
}
bool OffscreenCanvasRenderingContext2D::IsAccelerated() const {
- return image_buffer_ && image_buffer_->IsAccelerated();
+ return host()->GetImageBuffer() && host()->GetImageBuffer()->IsAccelerated();
}
}

Powered by Google App Engine
This is Rietveld 408576698