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

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

Issue 44253005: 2D Canvas: Refactor code re-attempting to allocate an imageBuffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@convertL
Patch Set: Created 7 years, 2 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: Source/core/html/HTMLCanvasElement.cpp
diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp
index c7cca4d73eabc4a4f92fac2aa4b0d86ec78bea16..44c70e50b3bb62d1ac3ff0d7f118cca2b0bbc244 100644
--- a/Source/core/html/HTMLCanvasElement.cpp
+++ b/Source/core/html/HTMLCanvasElement.cpp
@@ -73,7 +73,6 @@ HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document& doc
, m_ignoreReset(false)
, m_deviceScaleFactor(1)
, m_originClean(true)
- , m_hasCreatedImageBuffer(false)
, m_didClearImageBuffer(false)
, m_accelerationDisabled(false)
, m_externallyAllocatedMemory(0)
@@ -238,7 +237,7 @@ void HTMLCanvasElement::reset()
return;
bool ok;
- bool hadImageBuffer = hasCreatedImageBuffer();
+ bool hadImageBuffer = m_imageBuffer.get();
int w = getAttribute(widthAttr).toInt(&ok);
if (!ok || w < 0)
@@ -265,7 +264,7 @@ void HTMLCanvasElement::reset()
// If the size of an existing buffer matches, we can just clear it instead of reallocating.
// This optimization is only done for 2D canvases for now.
- if (m_hasCreatedImageBuffer && oldSize == newSize && m_deviceScaleFactor == newDeviceScaleFactor && m_context && m_context->is2d()) {
+ if (m_imageBuffer && oldSize == newSize && m_deviceScaleFactor == newDeviceScaleFactor && m_context && m_context->is2d()) {
if (!m_didClearImageBuffer)
clearImageBuffer();
return;
@@ -323,15 +322,13 @@ void HTMLCanvasElement::paint(GraphicsContext* context, const LayoutRect& r, boo
m_context->paintRenderingResultsToCanvas();
}
- if (hasCreatedImageBuffer()) {
- ImageBuffer* imageBuffer = buffer();
- if (imageBuffer) {
- CompositeOperator compositeOperator = !m_context || m_context->hasAlpha() ? CompositeSourceOver : CompositeCopy;
- if (m_presentedImage)
- context->drawImage(m_presentedImage.get(), pixelSnappedIntRect(r), compositeOperator, DoNotRespectImageOrientation, useLowQualityScale);
- else
- context->drawImageBuffer(imageBuffer, pixelSnappedIntRect(r), compositeOperator, BlendModeNormal, useLowQualityScale);
- }
+ ImageBuffer* imageBuffer = buffer();
+ if (imageBuffer) {
+ CompositeOperator compositeOperator = !m_context || m_context->hasAlpha() ? CompositeSourceOver : CompositeCopy;
+ if (m_presentedImage)
+ context->drawImage(m_presentedImage.get(), pixelSnappedIntRect(r), compositeOperator, DoNotRespectImageOrientation, useLowQualityScale);
+ else
+ context->drawImageBuffer(imageBuffer, pixelSnappedIntRect(r), compositeOperator, BlendModeNormal, useLowQualityScale);
}
if (is3D())
@@ -359,7 +356,6 @@ void HTMLCanvasElement::clearPresentationCopy()
void HTMLCanvasElement::setSurfaceSize(const IntSize& size)
{
m_size = size;
- m_hasCreatedImageBuffer = false;
m_contextStateSaver.clear();
m_imageBuffer.clear();
setExternallyAllocatedMemory(0);
@@ -478,7 +474,6 @@ void HTMLCanvasElement::createImageBuffer()
{
ASSERT(!m_imageBuffer);
- m_hasCreatedImageBuffer = true;
m_didClearImageBuffer = true;
FloatSize logicalSize = size();
@@ -533,7 +528,7 @@ GraphicsContext* HTMLCanvasElement::drawingContext() const
GraphicsContext* HTMLCanvasElement::existingDrawingContext() const
{
- if (!m_hasCreatedImageBuffer)
+ if (!m_imageBuffer)
return 0;
return drawingContext();
@@ -541,7 +536,7 @@ GraphicsContext* HTMLCanvasElement::existingDrawingContext() const
ImageBuffer* HTMLCanvasElement::buffer() const
{
- if (!m_hasCreatedImageBuffer)
+ if (!m_imageBuffer)
const_cast<HTMLCanvasElement*>(this)->createImageBuffer();
return m_imageBuffer.get();
}
@@ -558,7 +553,7 @@ Image* HTMLCanvasElement::copiedImage() const
void HTMLCanvasElement::clearImageBuffer()
{
- ASSERT(m_hasCreatedImageBuffer);
+ ASSERT(m_imageBuffer);
ASSERT(!m_didClearImageBuffer);
ASSERT(m_context);
@@ -579,7 +574,7 @@ void HTMLCanvasElement::clearCopiedImage()
AffineTransform HTMLCanvasElement::baseTransform() const
{
- ASSERT(m_hasCreatedImageBuffer);
+ ASSERT(m_imageBuffer);
FloatSize unscaledSize = size();
FloatSize deviceSize = convertLogicalToDevice(unscaledSize);
IntSize size(deviceSize.width(), deviceSize.height());

Powered by Google App Engine
This is Rietveld 408576698