Bug 1429904 - Give UniqueJSONStrings a copy constructor. r?njn
MozReview-Commit-ID: tlh6qkYX7A
--- 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));
}