Bug 1444430 - Remove a copy in EncodeSourceSurfaceInternal. r?jrmuizel draft
authorMarkus Stange <mstange@themasta.com>
Mon, 26 Mar 2018 23:04:04 -0400
changeset 781246 851079810914040fd0673646e55b3441e1ee21c4
parent 781245 a3912da749bef7df1ff48e281a183135783bbc70
child 781247 aea18715f6f1acaace3f631bc1760dce2bffe23c
child 781364 5e53627e64e897a82cfe7a3a6455f66778bf1fef
push id106255
push userbmo:mstange@themasta.com
push dateThu, 12 Apr 2018 19:45:02 +0000
reviewersjrmuizel
bugs1444430
milestone61.0a1
Bug 1444430 - Remove a copy in EncodeSourceSurfaceInternal. r?jrmuizel MozReview-Commit-ID: 5iNEd4RKIyn
gfx/thebes/gfxUtils.cpp
--- 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;
 }