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

Unified Diff: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp

Issue 2594093002: Re-arrange some null pointer checks in HTMLCanvasElement.cpp (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index fbe421bc71978f52203a339ba876c9c3b362965e..b23ea4ea0c0b79402453575627dcf93abafebb63 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -111,12 +111,16 @@ const int MaxGlobalGPUMemoryUsage =
// misinterpreted as a user-input value
const int UndefinedQualityValue = -1.0;
-PassRefPtr<Image> createTransparentImage(const IntSize& size) {
+sk_sp<SkImage> createTransparentSkImage(const IntSize& size) {
DCHECK(ImageBuffer::canCreateImageBuffer(size));
sk_sp<SkSurface> surface =
SkSurface::MakeRasterN32Premul(size.width(), size.height());
- return surface ? StaticBitmapImage::create(surface->makeImageSnapshot())
- : nullptr;
+ return surface->makeImageSnapshot();
+}
+
+PassRefPtr<Image> createTransparentImage(const IntSize& size) {
+ sk_sp<SkImage> image = createTransparentSkImage(size);
+ return image ? StaticBitmapImage::create(image) : nullptr;
}
} // namespace
@@ -1230,8 +1234,9 @@ PassRefPtr<Image> HTMLCanvasElement::getSourceImageForCanvas(
}
if (!m_context) {
- *status = NormalSourceImageStatus;
- return createTransparentImage(size());
+ RefPtr<Image> result = createTransparentImage(size());
+ *status = result ? NormalSourceImageStatus : InvalidSourceImageStatus;
+ return result;
}
if (m_context->getContextType() == CanvasRenderingContext::ContextImageBitmap)
@@ -1245,10 +1250,11 @@ PassRefPtr<Image> HTMLCanvasElement::getSourceImageForCanvas(
// use paintRenderingResultsToCanvas instead of getImage in order to keep a
// cached copy of the backing in the canvas's ImageBuffer.
renderingContext()->paintRenderingResultsToCanvas(BackBuffer);
- skImage = hasImageBuffer()
- ? buffer()->newSkImageSnapshot(hint, reason)
- : createTransparentImage(size())->imageForCurrentFrame(
- ColorBehavior::transformToGlobalTarget());
+ if (hasImageBuffer()) {
+ skImage = buffer()->newSkImageSnapshot(hint, reason);
+ } else {
+ skImage = createTransparentSkImage(size());
+ }
} else {
if (ExpensiveCanvasHeuristicParameters::
DisableAccelerationToAvoidReadbacks &&
@@ -1256,12 +1262,13 @@ PassRefPtr<Image> HTMLCanvasElement::getSourceImageForCanvas(
hint == PreferNoAcceleration && m_context->isAccelerated() &&
hasImageBuffer())
buffer()->disableAcceleration();
- RefPtr<blink::Image> image = renderingContext()->getImage(hint, reason);
- skImage = image
- ? image->imageForCurrentFrame(
- ColorBehavior::transformToGlobalTarget())
- : createTransparentImage(size())->imageForCurrentFrame(
- ColorBehavior::transformToGlobalTarget());
+ RefPtr<Image> image = renderingContext()->getImage(hint, reason);
+ if (image) {
+ skImage =
+ image->imageForCurrentFrame(ColorBehavior::transformToGlobalTarget());
+ } else {
+ skImage = createTransparentSkImage(size());
+ }
}
if (skImage) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698