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

Unified Diff: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.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
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 ef0c5333c102ac1d544e5b2587524fa2dc292cf5..1d968f9c1af2cc00e4cdd4a61754f114e2bd1be8 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -53,7 +53,8 @@ void OffscreenCanvasRenderingContext2D::commit(ExceptionState& exceptionState)
exceptionState.throwDOMException(InvalidStateError, "Commit() was called on a context whose OffscreenCanvas is not associated with a canvas element.");
return;
}
- getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(nullptr);
+ RefPtr<StaticBitmapImage> image = this->transferToStaticBitmapImage();
+ getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(std::move(image));
}
// BaseRenderingContext2D implementation
@@ -124,16 +125,24 @@ ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const
return m_imageBuffer.get();
}
-ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState)
+RefPtr<StaticBitmapImage> OffscreenCanvasRenderingContext2D::transferToStaticBitmapImage()
{
if (!imageBuffer())
return nullptr;
sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(PreferAcceleration, SnapshotReasonTransferToImageBitmap);
RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(std::move(skImage));
image->setOriginClean(this->originClean());
+ return image;
+}
+
+ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState)
+{
+ RefPtr<StaticBitmapImage> image = transferToStaticBitmapImage();
+ if (!image)
+ return nullptr;
m_imageBuffer.reset(); // "Transfer" means no retained buffer
m_needsMatrixClipRestore = true;
- return ImageBitmap::create(image.release());
+ return ImageBitmap::create(std::move(image));
}
PassRefPtr<Image> OffscreenCanvasRenderingContext2D::getImage(AccelerationHint hint, SnapshotReason reason) const

Powered by Google App Engine
This is Rietveld 408576698