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 2e58bec4cd36bf80e7f4042a0613b8a186f9b851..0e75ecfed823d8c1033ee290883be376132c1a49 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
@@ -304,7 +304,7 @@ void HTMLCanvasElement::didFinalizeFrame() |
m_numFramesSinceLastRenderingModeSwitch++; |
if (RuntimeEnabledFeatures::enableCanvas2dDynamicRenderingModeSwitchingEnabled() |
&& !RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled()) { |
- if (m_context->is2d() && buffer()->isAccelerated() |
+ if (m_context->is2d() && buffer() && buffer()->isAccelerated() |
&& m_numFramesSinceLastRenderingModeSwitch >= ExpensiveCanvasHeuristicParameters::MinFramesBeforeSwitch |
&& !m_pendingRenderingModeSwitch) { |
if (!m_context->isAccelerationOptimalForCanvasContent()) { |
@@ -323,7 +323,7 @@ void HTMLCanvasElement::didFinalizeFrame() |
} |
} |
- if (m_pendingRenderingModeSwitch && !buffer()->isAccelerated()) { |
+ if (m_pendingRenderingModeSwitch && buffer() && !buffer()->isAccelerated()) { |
m_pendingRenderingModeSwitch = false; |
} |
@@ -603,10 +603,12 @@ ImageData* HTMLCanvasElement::toImageData(SourceDrawingBuffer sourceBuffer, Snap |
m_context->paintRenderingResultsToCanvas(sourceBuffer); |
imageData = ImageData::create(m_size); |
- sk_sp<SkImage> snapshot = buffer()->newSkImageSnapshot(PreferNoAcceleration, reason); |
- if (snapshot) { |
- SkImageInfo imageInfo = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); |
- snapshot->readPixels(imageInfo, imageData->data()->data(), imageInfo.minRowBytes(), 0, 0); |
+ if (hasImageBuffer()) { |
+ sk_sp<SkImage> snapshot = buffer()->newSkImageSnapshot(PreferNoAcceleration, reason); |
+ if (snapshot) { |
+ SkImageInfo imageInfo = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); |
+ snapshot->readPixels(imageInfo, imageData->data()->data(), imageInfo.minRowBytes(), 0, 0); |
+ } |
} |
return imageData; |
} |
@@ -617,10 +619,12 @@ ImageData* HTMLCanvasElement::toImageData(SourceDrawingBuffer sourceBuffer, Snap |
return imageData; |
DCHECK(m_context->is2d()); |
- sk_sp<SkImage> snapshot = buffer()->newSkImageSnapshot(PreferNoAcceleration, reason); |
- if (snapshot) { |
- SkImageInfo imageInfo = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); |
- snapshot->readPixels(imageInfo, imageData->data()->data(), imageInfo.minRowBytes(), 0, 0); |
+ if (hasImageBuffer()) { |
+ sk_sp<SkImage> snapshot = buffer()->newSkImageSnapshot(PreferNoAcceleration, reason); |
+ if (snapshot) { |
+ SkImageInfo imageInfo = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); |
+ snapshot->readPixels(imageInfo, imageData->data()->data(), imageInfo.minRowBytes(), 0, 0); |
+ } |
} |
return imageData; |