Chromium Code Reviews| 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..b6457c7e31dd47fb03816a06d6e6bf4c4ffc0884 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,31 @@ ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const |
| return m_imageBuffer.get(); |
| } |
| -ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState) |
| +bool OffscreenCanvasRenderingContext2D::isAccelerated() const |
|
xidachen
2016/09/22 19:42:33
Is there a reason to keep this function here, sinc
xlai (Olivia)
2016/09/22 19:53:51
Done.
|
| +{ |
| + if (!hasImageBuffer()) |
| + return false; |
| + return m_imageBuffer->isAccelerated(); |
| +} |
| + |
| +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 |