Commit dd449375 authored by bratell@opera.com's avatar bratell@opera.com

Reduce memory peaks when generating data urls for images.

Adding Vector<char> to a String results in one (or more) temporary
copies of that Vector<char> since Vector isn't a pointer/smart pointer
like the types usually used.

Luckily there are many other ways to solve the problem. With StringBuilder
or using a String.

BUG=389085 (related to, not necessarily fixing it)

Review URL: https://codereview.chromium.org/559103002

git-svn-id: svn://svn.chromium.org/blink/trunk@181925 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 5c88bd9d
......@@ -53,6 +53,7 @@
#include "public/platform/WebFloatPoint.h"
#include "public/platform/WebLayer.h"
#include "wtf/text/Base64.h"
#include "wtf/text/StringBuilder.h"
namespace blink {
......@@ -383,7 +384,11 @@ void InspectorLayerTreeAgent::replaySnapshot(ErrorString* errorString, const Str
*errorString = "Image encoding failed";
return;
}
*dataURL = "data:image/png;base64," + *base64Data;
StringBuilder url;
url.appendLiteral("data:image/png;base64,");
url.reserveCapacity(url.length() + base64Data->size());
url.append(base64Data->begin(), base64Data->size());
*dataURL = url.toString();
}
void InspectorLayerTreeAgent::profileSnapshot(ErrorString* errorString, const String& snapshotId, const int* minRepeatCount, const double* minDuration, RefPtr<TypeBuilder::Array<TypeBuilder::Array<double> > >& outTimings)
......
......@@ -415,10 +415,8 @@ String ImageBuffer::toDataURL(const String& mimeType, const double* quality) con
Vector<char> encodedImage;
if (!isSurfaceValid() || !encodeImage(m_surface->bitmap(), mimeType, quality, &encodedImage))
return "data:,";
Vector<char> base64Data;
base64Encode(encodedImage, base64Data);
return "data:" + mimeType + ";base64," + base64Data;
return "data:" + mimeType + ";base64," + base64Encode(encodedImage);
}
String ImageDataToDataURL(const ImageDataBuffer& imageData, const String& mimeType, const double* quality)
......@@ -429,10 +427,7 @@ String ImageDataToDataURL(const ImageDataBuffer& imageData, const String& mimeTy
if (!encodeImage(imageData, mimeType, quality, &encodedImage))
return "data:,";
Vector<char> base64Data;
base64Encode(encodedImage, base64Data);
return "data:" + mimeType + ";base64," + base64Data;
return "data:" + mimeType + ";base64," + base64Encode(encodedImage);
}
} // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment