Index: Source/core/html/HTMLCanvasElement.cpp |
diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
index a4dcc991917028029c9db75fa8c1f25d658ebfdc..5cde15c4cb5e09bef600a3cc5bec45a7cf707317 100644 |
--- a/Source/core/html/HTMLCanvasElement.cpp |
+++ b/Source/core/html/HTMLCanvasElement.cpp |
@@ -694,11 +694,20 @@ void HTMLCanvasElement::trace(Visitor* visitor) |
void HTMLCanvasElement::updateExternallyAllocatedMemory() const |
{ |
int bufferCount = 0; |
- if (m_imageBuffer) |
+ if (m_imageBuffer) { |
bufferCount++; |
+ if (m_imageBuffer->isAccelerated()) { |
+ // The number of internal GPU buffers vary between one (stable |
+ // non-displayed state) and three (triple-buffered animations). |
+ // Adding 2 is a pessimistic but relevant estimate. |
+ // Note: These buffers might be allocated in GPU memory. |
+ bufferCount += 2; |
+ } |
+ } |
if (m_copiedImage) |
bufferCount++; |
+ // Four bytes per pixel per buffer. |
Checked<intptr_t, RecordOverflow> checkedExternallyAllocatedMemory = 4 * bufferCount; |
if (is3D()) |
checkedExternallyAllocatedMemory += toWebGLRenderingContext(m_context.get())->externallyAllocatedBytesPerPixel(); |