Bug 1444430 - Remove a copy in EncodeSourceSurfaceInternal. r?jrmuizel
MozReview-Commit-ID: 5iNEd4RKIyn
--- a/gfx/thebes/gfxUtils.cpp
+++ b/gfx/thebes/gfxUtils.cpp
@@ -939,17 +939,17 @@ gfxUtils::GetColorForFrameNumber(uint64_
}
static nsresult
EncodeSourceSurfaceInternal(SourceSurface* aSurface,
const nsACString& aMimeType,
const nsAString& aOutputOptions,
gfxUtils::BinaryOrData aBinaryOrData,
FILE* aFile,
- nsCString* aStrOut)
+ nsACString* aStrOut)
{
MOZ_ASSERT(aBinaryOrData == gfxUtils::eDataURIEncode || aFile || aStrOut,
"Copying binary encoding to clipboard not currently supported");
const IntSize size = aSurface->GetSize();
if (size.IsEmpty()) {
return NS_ERROR_INVALID_ARG;
}
@@ -1052,17 +1052,19 @@ EncodeSourceSurfaceInternal(SourceSurfac
return NS_OK;
}
// base 64, result will be null-terminated
nsCString encodedImg;
rv = Base64Encode(Substring(imgData.begin(), imgSize), encodedImg);
NS_ENSURE_SUCCESS(rv, rv);
- nsCString string("data:");
+ nsCString stringBuf;
+ nsACString& string = aStrOut ? *aStrOut : stringBuf;
+ string.AppendLiteral("data:");
string.Append(aMimeType);
string.AppendLiteral(";base64,");
string.Append(encodedImg);
if (aFile) {
#ifdef ANDROID
if (aFile == stdout || aFile == stderr) {
// ADB logcat cuts off long strings so we will break it down
@@ -1073,19 +1075,17 @@ EncodeSourceSurfaceInternal(SourceSurfac
if (len <= 140)
break;
len -= 140;
cStr += 140;
}
}
#endif
fprintf(aFile, "%s", string.BeginReading());
- } else if (aStrOut) {
- *aStrOut = string;
- } else {
+ } else if (!aStrOut) {
nsCOMPtr<nsIClipboardHelper> clipboard(do_GetService("@mozilla.org/widget/clipboardhelper;1", &rv));
if (clipboard) {
clipboard->CopyString(NS_ConvertASCIItoUTF16(string));
}
}
return NS_OK;
}