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

Unified Diff: third_party/WebKit/Source/modules/imagebitmap/ImageBitmapRenderingContext.cpp

Issue 2738573002: Streamline the presentation of ImageBitmapRenderingContext (Closed)
Patch Set: Fixed expectations 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/imagebitmap/ImageBitmapRenderingContext.cpp
diff --git a/third_party/WebKit/Source/modules/imagebitmap/ImageBitmapRenderingContext.cpp b/third_party/WebKit/Source/modules/imagebitmap/ImageBitmapRenderingContext.cpp
index 06b4cb96b8a16fd02fa2997f52d5b4901686063f..2754fbbfe68d0b2ad090446651b78fb9288b526b 100644
--- a/third_party/WebKit/Source/modules/imagebitmap/ImageBitmapRenderingContext.cpp
+++ b/third_party/WebKit/Source/modules/imagebitmap/ImageBitmapRenderingContext.cpp
@@ -8,6 +8,7 @@
#include "core/frame/ImageBitmap.h"
#include "platform/graphics/GraphicsContext.h"
#include "platform/graphics/StaticBitmapImage.h"
+#include "platform/graphics/gpu/ImageLayerBridge.h"
#include "third_party/skia/include/core/SkImage.h"
#include "third_party/skia/include/core/SkSurface.h"
@@ -17,7 +18,9 @@ ImageBitmapRenderingContext::ImageBitmapRenderingContext(
HTMLCanvasElement* canvas,
const CanvasContextCreationAttributes& attrs,
Document& document)
- : CanvasRenderingContext(canvas, nullptr, attrs) {}
+ : CanvasRenderingContext(canvas, nullptr, attrs),
+ m_imageLayerBridge(
+ new ImageLayerBridge(attrs.alpha() ? NonOpaque : Opaque)) {}
ImageBitmapRenderingContext::~ImageBitmapRenderingContext() {}
@@ -29,50 +32,19 @@ void ImageBitmapRenderingContext::setCanvasGetContextResult(
void ImageBitmapRenderingContext::transferFromImageBitmap(
ImageBitmap* imageBitmap,
ExceptionState& exceptionState) {
- if (!imageBitmap) {
- m_image.release();
- return;
- }
-
- if (imageBitmap->isNeutered()) {
+ if (imageBitmap && imageBitmap->isNeutered()) {
exceptionState.throwDOMException(InvalidStateError,
"The input ImageBitmap has been detached");
return;
}
- m_image = imageBitmap->bitmapImage();
- if (!m_image)
- return;
+ m_imageLayerBridge->setImage(imageBitmap ? imageBitmap->bitmapImage()
+ : nullptr);
- sk_sp<SkImage> skImage = m_image->imageForCurrentFrame();
- if (skImage->isTextureBacked()) {
- // TODO(junov): crbug.com/585607 Eliminate this readback and use an
- // ExternalTextureLayer
- sk_sp<SkSurface> surface =
- SkSurface::MakeRasterN32Premul(skImage->width(), skImage->height());
- if (!surface) {
- // silent failure
- m_image.clear();
- return;
- }
- surface->getCanvas()->drawImage(skImage, 0, 0);
- m_image = StaticBitmapImage::create(surface->makeImageSnapshot());
- }
- didDraw(skImage->bounds());
- imageBitmap->close();
-}
-
-bool ImageBitmapRenderingContext::paint(GraphicsContext& gc, const IntRect& r) {
- if (!m_image)
- return true;
+ didDraw();
- // With impl-side painting, it is unsafe to use a gpu-backed SkImage
- DCHECK(!m_image->imageForCurrentFrame()->isTextureBacked());
- gc.drawImage(m_image.get(), r, nullptr, creationAttributes().alpha()
- ? SkBlendMode::kSrcOver
- : SkBlendMode::kSrc);
-
- return true;
+ if (imageBitmap)
+ imageBitmap->close();
}
CanvasRenderingContext* ImageBitmapRenderingContext::Factory::create(
@@ -85,7 +57,29 @@ CanvasRenderingContext* ImageBitmapRenderingContext::Factory::create(
}
void ImageBitmapRenderingContext::stop() {
- m_image.clear();
+ m_imageLayerBridge->dispose();
+}
+
+PassRefPtr<Image> ImageBitmapRenderingContext::getImage(AccelerationHint,
+ SnapshotReason) const {
+ return m_imageLayerBridge->image();
+}
+
+WebLayer* ImageBitmapRenderingContext::platformLayer() const {
+ return m_imageLayerBridge->platformLayer();
+}
+
+bool ImageBitmapRenderingContext::isPaintable() const {
+ return !!m_imageLayerBridge->image();
+}
+
+DEFINE_TRACE(ImageBitmapRenderingContext) {
+ visitor->trace(m_imageLayerBridge);
+ CanvasRenderingContext::trace(visitor);
+}
+
+bool ImageBitmapRenderingContext::isAccelerated() const {
+ return m_imageLayerBridge->isAccelerated();
}
} // blink

Powered by Google App Engine
This is Rietveld 408576698