Update jsoncpp to remove deprecated API usage
This patch updates all usages of Json::Reader to use the new
Json::CharReader class, as Json::Reader has been deprecated.
Bug: crbug.com/983223
Change-Id: I2dde3c4fff5172a6a927def8738dd2d1b3987d74
diff --git a/src/trace_processor/export_json.cc b/src/trace_processor/export_json.cc
index c9dc1b3..6424684 100644
--- a/src/trace_processor/export_json.cc
+++ b/src/trace_processor/export_json.cc
@@ -19,12 +19,14 @@
#include <inttypes.h>
#include <stdio.h>
+#include <sstream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <deque>
#include <limits>
+#include <memory>
#include "perfetto/base/build_config.h"
#include "perfetto/ext/base/string_splitter.h"
@@ -340,11 +342,10 @@
if (label_filter_ && !label_filter_("traceEvents"))
return;
+ std::ostringstream ss;
if (!first_event_)
- output_->AppendString(",\n");
+ ss << ",\n";
- Json::FastWriter writer;
- writer.omitEndingLineFeed();
Json::Value value;
value["ph"] = "M";
value["cat"] = "__metadata";
@@ -357,7 +358,10 @@
args["name"] = metadata_value;
value["args"] = args;
- output_->AppendString(writer.write(value));
+ Json::StreamWriterBuilder b;
+ auto writer = std::unique_ptr<Json::StreamWriter>(b.newStreamWriter());
+ writer->write(value, &ss);
+ output_->AppendString(ss.str());
first_event_ = false;
}
@@ -434,14 +438,19 @@
}
}
- Json::FastWriter writer;
- writer.omitEndingLineFeed();
+ Json::StreamWriterBuilder b;
+ auto writer = std::unique_ptr<Json::StreamWriter>(b.newStreamWriter());
if ((!label_filter_ || label_filter_("traceEvents")) &&
!user_trace_data_.empty()) {
user_trace_data_ += "]";
- Json::Reader reader;
+
+ Json::CharReaderBuilder builder;
+ auto reader =
+ std::unique_ptr<Json::CharReader>(builder.newCharReader());
Json::Value result;
- if (reader.parse(user_trace_data_, result)) {
+ if (reader->parse(user_trace_data_.data(),
+ user_trace_data_.data() + user_trace_data_.length(),
+ &result, nullptr)) {
for (const auto& event : result) {
WriteCommonEvent(event);
}
@@ -451,28 +460,35 @@
user_trace_data_.c_str());
}
}
+
+ std::ostringstream ss;
if (!label_filter_)
- output_->AppendString("]");
+ ss << "]";
+
if ((!label_filter_ || label_filter_("systemTraceEvents")) &&
!system_trace_data_.empty()) {
- output_->AppendString(",\"systemTraceEvents\":\n");
- output_->AppendString(writer.write(Json::Value(system_trace_data_)));
+ ss << ",\"systemTraceEvents\":\n";
+ writer->write(Json::Value(system_trace_data_), &ss);
}
+
if ((!label_filter_ || label_filter_("metadata")) && !metadata_.empty()) {
- output_->AppendString(",\"metadata\":\n");
- output_->AppendString(writer.write(metadata_));
+ ss << ",\"metadata\":\n";
+ writer->write(metadata_, &ss);
}
+
if (!label_filter_)
- output_->AppendString("}");
+ ss << "}";
+
+ output_->AppendString(ss.str());
}
void DoWriteEvent(const Json::Value& event) {
+ std::ostringstream ss;
if (!first_event_)
- output_->AppendString(",\n");
+ ss << ",\n";
- Json::FastWriter writer;
- writer.omitEndingLineFeed();
-
+ Json::StreamWriterBuilder b;
+ auto writer = std::unique_ptr<Json::StreamWriter>(b.newStreamWriter());
ArgumentNameFilterPredicate argument_name_filter;
bool strip_args =
argument_filter_ &&
@@ -489,11 +505,13 @@
args[member] = kStrippedArgument;
}
}
- output_->AppendString(writer.write(event_copy));
+ writer->write(event_copy, &ss);
} else {
- output_->AppendString(writer.write(event));
+ writer->write(event, &ss);
}
first_event_ = false;
+
+ output_->AppendString(ss.str());
}
OutputWriter* output_;
@@ -569,9 +587,12 @@
case Variadic::kBool:
return variadic.bool_value;
case Variadic::kJson:
- Json::Reader reader;
+ Json::CharReaderBuilder b;
+ auto reader = std::unique_ptr<Json::CharReader>(b.newCharReader());
+
Json::Value result;
- reader.parse(GetNonNullString(storage_, variadic.json_value), result);
+ std::string v = GetNonNullString(storage_, variadic.json_value);
+ reader->parse(v.data(), v.data() + v.length(), &result, nullptr);
return result;
}
PERFETTO_FATAL("Not reached"); // For gcc.
diff --git a/src/trace_processor/export_json_unittest.cc b/src/trace_processor/export_json_unittest.cc
index ef15834..02032b7 100644
--- a/src/trace_processor/export_json_unittest.cc
+++ b/src/trace_processor/export_json_unittest.cc
@@ -86,9 +86,12 @@
}
Json::Value ToJsonValue(const std::string& json) {
- Json::Reader reader;
+ Json::CharReaderBuilder b;
+ auto reader = std::unique_ptr<Json::CharReader>(b.newCharReader());
Json::Value result;
- EXPECT_TRUE(reader.parse(json, result)) << json;
+ EXPECT_TRUE(reader->parse(json.data(), json.data() + json.length(), &result,
+ nullptr))
+ << json;
return result;
}
diff --git a/src/trace_processor/importers/json/json_trace_tokenizer.cc b/src/trace_processor/importers/json/json_trace_tokenizer.cc
index 329d05f..004f3d7 100644
--- a/src/trace_processor/importers/json/json_trace_tokenizer.cc
+++ b/src/trace_processor/importers/json/json_trace_tokenizer.cc
@@ -17,6 +17,8 @@
#include "src/trace_processor/importers/json/json_trace_tokenizer.h"
+#include <memory>
+
#include "perfetto/base/build_config.h"
#include "perfetto/ext/base/string_utils.h"
@@ -425,7 +427,7 @@
"Failed to parse: illegal JSON format when parsing metadata");
}
- std::unique_ptr<Json::Value> value(new Json::Value());
+ auto value = std::unique_ptr<Json::Value>(new Json::Value());
const auto res = ReadOneJsonDict(next, end, value.get(), &next);
if (res == ReadDictRes::kFatalError || res == ReadDictRes::kEndOfArray)
return util::ErrStatus("Encountered fatal error while parsing JSON");
@@ -440,7 +442,7 @@
}
case TracePosition::kTraceEventsArray: {
while (next < end) {
- std::unique_ptr<Json::Value> value(new Json::Value());
+ auto value = std::unique_ptr<Json::Value>(new Json::Value());
const auto res = ReadOneJsonDict(next, end, value.get(), &next);
if (res == ReadDictRes::kFatalError)
return util::ErrStatus("Encountered fatal error while parsing JSON");
diff --git a/src/trace_processor/importers/json/json_utils.cc b/src/trace_processor/importers/json/json_utils.cc
index b9b1e65..45e9a3e 100644
--- a/src/trace_processor/importers/json/json_utils.cc
+++ b/src/trace_processor/importers/json/json_utils.cc
@@ -121,10 +121,12 @@
PERFETTO_DCHECK(IsJsonSupported());
#if PERFETTO_BUILDFLAG(PERFETTO_TP_JSON)
- Json::Reader reader;
+ Json::CharReaderBuilder b;
+ auto reader = std::unique_ptr<Json::CharReader>(b.newCharReader());
+
Json::Value value;
const char* begin = raw_string.data();
- return reader.parse(begin, begin + raw_string.size(), value)
+ return reader->parse(begin, begin + raw_string.size(), &value, nullptr)
? base::make_optional(std::move(value))
: base::nullopt;
#else
@@ -145,7 +147,7 @@
auto it = value.begin();
bool inserted = false;
for (; it != value.end(); ++it) {
- std::string child_name = it.memberName();
+ std::string child_name = it.name();
std::string child_flat_key = flat_key.ToStdString() + "." + child_name;
std::string child_key = key.ToStdString() + "." + child_name;
inserted |=
diff --git a/src/trace_processor/storage_minimal_smoke_test.cc b/src/trace_processor/storage_minimal_smoke_test.cc
index dcf8aba..3aeb15b 100644
--- a/src/trace_processor/storage_minimal_smoke_test.cc
+++ b/src/trace_processor/storage_minimal_smoke_test.cc
@@ -59,9 +59,12 @@
JsonStringOutputWriter output_writer;
json::ExportJson(storage_.get(), &output_writer);
- Json::Reader reader;
+ Json::CharReaderBuilder b;
+ auto reader = std::unique_ptr<Json::CharReader>(b.newCharReader());
+
Json::Value result;
- reader.parse(output_writer.buffer, result);
+ std::string& o = output_writer.buffer;
+ ASSERT_TRUE(reader->parse(o.data(), o.data() + o.length(), &result, nullptr));
ASSERT_EQ(result["traceEvents"].size(), 0u);
}
@@ -88,10 +91,12 @@
JsonStringOutputWriter output_writer;
json::ExportJson(storage_.get(), &output_writer);
- Json::Reader reader;
- Json::Value result;
- reader.parse(output_writer.buffer, result);
+ Json::CharReaderBuilder b;
+ auto reader = std::unique_ptr<Json::CharReader>(b.newCharReader());
+ Json::Value result;
+ std::string& o = output_writer.buffer;
+ ASSERT_TRUE(reader->parse(o.data(), o.data() + o.length(), &result, nullptr));
ASSERT_EQ(result["traceEvents"].size(), 4u);
}