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

Unified Diff: third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp

Issue 1482363004: Fixing laggy chrome on a multitude of accelerated canvases (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moving variables to ImageBuffer and Adding Unit Test Created 5 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
Index: third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
index de389a8901b6e456b9e34973a72910200086397e..f066e364ee4bac531189fe8ae5401b17889db48b 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
@@ -79,12 +79,17 @@ ImageBuffer::ImageBuffer(PassOwnPtr<ImageBufferSurface> surface)
: m_snapshotState(InitialSnapshotState)
, m_surface(surface)
, m_client(0)
+ , m_gpuMemoryUsage(0)
{
m_surface->setImageBuffer(this);
+ updateGPUMemoryUsage();
}
+intptr_t ImageBuffer::s_totalGPUMemoryUsage = 0;
+
ImageBuffer::~ImageBuffer()
{
+ ImageBuffer::s_totalGPUMemoryUsage -= m_gpuMemoryUsage;
}
SkCanvas* ImageBuffer::canvas() const
@@ -345,6 +350,23 @@ void ImageBuffer::putByteArray(Multiply multiplied, const unsigned char* source,
m_surface->writePixels(info, srcAddr, srcBytesPerRow, destX, destY);
}
+void ImageBuffer::updateGPUMemoryUsage() const
+{
+ // If image buffer is accelerated, we should keep track of GPU memory usage.
+ if (this->isAccelerated()) {
+ int gpuBufferCount = 2;
+ Checked<intptr_t, RecordOverflow> checkedGPUUsage = 4 * gpuBufferCount;
+ checkedGPUUsage *= this->size().width();
+ checkedGPUUsage *= this->size().height();
+ intptr_t gpuMemoryUsage;
+ if (checkedGPUUsage.safeGet(gpuMemoryUsage) == CheckedState::DidOverflow)
+ gpuMemoryUsage = std::numeric_limits<intptr_t>::max();
+
+ s_totalGPUMemoryUsage += (gpuMemoryUsage - m_gpuMemoryUsage);
+ m_gpuMemoryUsage = gpuMemoryUsage;
+ }
Justin Novosad 2015/12/08 22:15:27 In the case where we are not accelerated, you need
+}
+
bool ImageDataBuffer::encodeImage(const String& mimeType, const double& quality, Vector<unsigned char>* encodedImage) const
{
if (mimeType == "image/jpeg") {

Powered by Google App Engine
This is Rietveld 408576698