Bug 1429904 - Give UniqueJSONStrings a copy constructor. r?njn draft
authorMarkus Stange <mstange@themasta.com>
Sat, 17 Feb 2018 15:39:45 -0500
changeset 762107 a9da8a4acb143bb5821af85b0de2bc1bbf41dd49
parent 762106 6b145704aed3deaafa8460c6f4067f6547613f4d
child 762108 053e5491c5b0abd9a4f62982ddbc2ff6b17f085f
push id101088
push userbmo:mstange@themasta.com
push dateThu, 01 Mar 2018 20:52:26 +0000
reviewersnjn
bugs1429904
milestone60.0a1
Bug 1429904 - Give UniqueJSONStrings a copy constructor. r?njn MozReview-Commit-ID: tlh6qkYX7A
tools/profiler/core/ProfileBufferEntry.cpp
tools/profiler/core/ProfileBufferEntry.h
--- a/tools/profiler/core/ProfileBufferEntry.cpp
+++ b/tools/profiler/core/ProfileBufferEntry.cpp
@@ -240,16 +240,35 @@ private:
 };
 
 template<typename LambdaT> ForEachTrackedOptimizationAttemptsLambdaOp<LambdaT>
 MakeForEachTrackedOptimizationAttemptsLambdaOp(LambdaT&& aLambda)
 {
   return ForEachTrackedOptimizationAttemptsLambdaOp<LambdaT>(Move(aLambda));
 }
 
+UniqueJSONStrings::UniqueJSONStrings()
+{
+  mStringTableWriter.StartBareList();
+}
+
+UniqueJSONStrings::UniqueJSONStrings(const UniqueJSONStrings& aOther)
+{
+  mStringTableWriter.StartBareList();
+  if (aOther.mStringToIndexMap.Count() > 0) {
+    for (auto iter = aOther.mStringToIndexMap.ConstIter();
+         !iter.Done(); iter.Next()) {
+      mStringToIndexMap.Put(iter.Key(), iter.Data());
+    }
+    UniquePtr<char[]> stringTableJSON =
+      aOther.mStringTableWriter.WriteFunc()->CopyData();
+    mStringTableWriter.Splice(stringTableJSON.get());
+  }
+}
+
 uint32_t
 UniqueJSONStrings::GetOrAddIndex(const char* aStr)
 {
   nsDependentCString str(aStr);
 
   uint32_t index;
   if (mStringToIndexMap.Get(str, &index)) {
     return index;
--- a/tools/profiler/core/ProfileBufferEntry.h
+++ b/tools/profiler/core/ProfileBufferEntry.h
@@ -115,19 +115,18 @@ private:
 // Packed layout: 1 byte for the tag + 8 bytes for the value.
 static_assert(sizeof(ProfileBufferEntry) == 9, "bad ProfileBufferEntry size");
 #pragma pack(pop)
 #endif
 
 class UniqueJSONStrings
 {
 public:
-  UniqueJSONStrings() {
-    mStringTableWriter.StartBareList();
-  }
+  UniqueJSONStrings();
+  explicit UniqueJSONStrings(const UniqueJSONStrings& aOther);
 
   void SpliceStringTableElements(SpliceableJSONWriter& aWriter) {
     aWriter.TakeAndSplice(mStringTableWriter.WriteFunc());
   }
 
   void WriteProperty(mozilla::JSONWriter& aWriter, const char* aName, const char* aStr) {
     aWriter.IntProperty(aName, GetOrAddIndex(aStr));
   }