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

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

Issue 2359723003: Implement OffscreenCanvas Accelerated 2D commit() (Closed)
Patch Set: Fix 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..b69a97d9ae76ab78f02b35c5cbc5c763d5b1cf95 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -53,7 +53,9 @@ 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();
+ DCHECK(image->isTextureBacked() == this->isAccelerated());
Justin Novosad 2016/09/22 19:27:39 Why this DCHECK? If for some reason this ever bec
xlai (Olivia) 2016/09/22 19:36:18 Done.
+ getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(image.release());
}
// BaseRenderingContext2D implementation
@@ -124,13 +126,28 @@ ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const
return m_imageBuffer.get();
}
-ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState)
+bool OffscreenCanvasRenderingContext2D::isAccelerated() const
+{
+ if (!hasImageBuffer())
+ return false;
+ return m_imageBuffer->isAccelerated();
+}
+
+PassRefPtr<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.release();
+}
+
+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());

Powered by Google App Engine
This is Rietveld 408576698