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);
 }