[llvm] ddde8be - [llvm-dwarfdump] --statistics: switch to json::OStream. NFC

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 20 12:24:35 PDT 2020


Author: Fangrui Song
Date: 2020-08-20T12:24:06-07:00
New Revision: ddde8bebb0ce618fdcae969e8b2ac911e842683b

URL: https://github.com/llvm/llvm-project/commit/ddde8bebb0ce618fdcae969e8b2ac911e842683b
DIFF: https://github.com/llvm/llvm-project/commit/ddde8bebb0ce618fdcae969e8b2ac911e842683b.diff

LOG: [llvm-dwarfdump] --statistics: switch to json::OStream. NFC

Then it is trivial to make the output indented (the second parameter of
json::OStream::OStream specifies the indentation).

Reviewed By: jhenderson, echristo

Differential Revision: https://reviews.llvm.org/D86045

Added: 
    

Modified: 
    llvm/tools/llvm-dwarfdump/Statistics.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-dwarfdump/Statistics.cpp b/llvm/tools/llvm-dwarfdump/Statistics.cpp
index 18b4c40c4d75..e1eeaf778d53 100644
--- a/llvm/tools/llvm-dwarfdump/Statistics.cpp
+++ b/llvm/tools/llvm-dwarfdump/Statistics.cpp
@@ -469,46 +469,52 @@ static void collectStatsRecursive(DWARFDie Die, std::string FnPrefix,
 /// Print machine-readable output.
 /// The machine-readable format is single-line JSON output.
 /// \{
-static void printDatum(raw_ostream &OS, const char *Key, json::Value Value) {
-  OS << ",\"" << Key << "\":" << Value;
+static void printDatum(json::OStream &J, const char *Key, json::Value Value) {
+  J.attribute(Key, Value);
   LLVM_DEBUG(llvm::dbgs() << Key << ": " << Value << '\n');
 }
 
-static void printLocationStats(raw_ostream &OS, const char *Key,
+static void printLocationStats(json::OStream &J, const char *Key,
                                std::vector<unsigned> &LocationStats) {
-  OS << ",\"" << Key << " with 0% of parent scope covered by DW_AT_location\":"
-     << LocationStats[0];
+  J.attribute(
+      (Twine(Key) + " with 0% of parent scope covered by DW_AT_location").str(),
+      LocationStats[0]);
   LLVM_DEBUG(
       llvm::dbgs() << Key
                    << " with 0% of parent scope covered by DW_AT_location: \\"
                    << LocationStats[0] << '\n');
-  OS << ",\"" << Key
-     << " with (0%,10%) of parent scope covered by DW_AT_location\":"
-     << LocationStats[1];
+  J.attribute(
+      (Twine(Key) + " with (0%,10%) of parent scope covered by DW_AT_location")
+          .str(),
+      LocationStats[1]);
   LLVM_DEBUG(llvm::dbgs()
              << Key
              << " with (0%,10%) of parent scope covered by DW_AT_location: "
              << LocationStats[1] << '\n');
   for (unsigned i = 2; i < NumOfCoverageCategories - 1; ++i) {
-    OS << ",\"" << Key << " with [" << (i - 1) * 10 << "%," << i * 10
-       << "%) of parent scope covered by DW_AT_location\":" << LocationStats[i];
+    J.attribute((Twine(Key) + " with [" + Twine((i - 1) * 10) + "%," +
+                 Twine(i * 10) + "%) of parent scope covered by DW_AT_location")
+                    .str(),
+                LocationStats[i]);
     LLVM_DEBUG(llvm::dbgs()
                << Key << " with [" << (i - 1) * 10 << "%," << i * 10
                << "%) of parent scope covered by DW_AT_location: "
                << LocationStats[i]);
   }
-  OS << ",\"" << Key
-     << " with 100% of parent scope covered by DW_AT_location\":"
-     << LocationStats[NumOfCoverageCategories - 1];
+  J.attribute(
+      (Twine(Key) + " with 100% of parent scope covered by DW_AT_location")
+          .str(),
+      LocationStats[NumOfCoverageCategories - 1]);
   LLVM_DEBUG(
       llvm::dbgs() << Key
                    << " with 100% of parent scope covered by DW_AT_location: "
                    << LocationStats[NumOfCoverageCategories - 1]);
 }
 
-static void printSectionSizes(raw_ostream &OS, const SectionSizes &Sizes) {
+static void printSectionSizes(json::OStream &J, const SectionSizes &Sizes) {
   for (const auto &DebugSec : Sizes.DebugSectionSizes)
-    OS << ",\"#bytes in " << DebugSec.getKey() << "\":" << DebugSec.getValue();
+    J.attribute((Twine("#bytes in ") + DebugSec.getKey()).str(),
+                int64_t(DebugSec.getValue()));
 }
 
 /// \}
@@ -587,101 +593,102 @@ bool dwarfdump::collectStatsForObjectFile(ObjectFile &Obj, DWARFContext &DICtx,
 
   // Print summary.
   OS.SetBufferSize(1024);
-  OS << "{\"version\":" << Version;
+  json::OStream J(OS);
+  J.objectBegin();
+  J.attribute("version", Version);
   LLVM_DEBUG(llvm::dbgs() << "Variable location quality metrics\n";
              llvm::dbgs() << "---------------------------------\n");
 
-  printDatum(OS, "file", Filename.str());
-  printDatum(OS, "format", FormatName);
+  printDatum(J, "file", Filename.str());
+  printDatum(J, "format", FormatName);
 
-  printDatum(OS, "#functions", NumFunctions);
-  printDatum(OS, "#functions with location", NumFuncsWithSrcLoc);
-  printDatum(OS, "#inlined functions", NumInlinedFunctions);
-  printDatum(OS, "#inlined functions with abstract origins",
-             NumAbstractOrigins);
+  printDatum(J, "#functions", NumFunctions);
+  printDatum(J, "#functions with location", NumFuncsWithSrcLoc);
+  printDatum(J, "#inlined functions", NumInlinedFunctions);
+  printDatum(J, "#inlined functions with abstract origins", NumAbstractOrigins);
 
   // This includes local variables and formal parameters.
-  printDatum(OS, "#unique source variables", VarParamUnique);
-  printDatum(OS, "#source variables", VarParamTotal);
-  printDatum(OS, "#source variables with location", VarParamWithLoc);
+  printDatum(J, "#unique source variables", VarParamUnique);
+  printDatum(J, "#source variables", VarParamTotal);
+  printDatum(J, "#source variables with location", VarParamWithLoc);
 
-  printDatum(OS, "#call site entries", GlobalStats.CallSiteEntries);
-  printDatum(OS, "#call site DIEs", GlobalStats.CallSiteDIEs);
-  printDatum(OS, "#call site parameter DIEs", GlobalStats.CallSiteParamDIEs);
+  printDatum(J, "#call site entries", GlobalStats.CallSiteEntries);
+  printDatum(J, "#call site DIEs", GlobalStats.CallSiteDIEs);
+  printDatum(J, "#call site parameter DIEs", GlobalStats.CallSiteParamDIEs);
 
-  printDatum(OS, "sum_all_variables(#bytes in parent scope)",
+  printDatum(J, "sum_all_variables(#bytes in parent scope)",
              GlobalStats.ScopeBytes);
-  printDatum(OS,
+  printDatum(J,
              "sum_all_variables(#bytes in parent scope covered by "
              "DW_AT_location)",
              GlobalStats.ScopeBytesCovered);
-  printDatum(OS,
+  printDatum(J,
              "sum_all_variables(#bytes in parent scope covered by "
              "DW_OP_entry_value)",
              GlobalStats.ScopeEntryValueBytesCovered);
 
-  printDatum(OS, "sum_all_params(#bytes in parent scope)",
+  printDatum(J, "sum_all_params(#bytes in parent scope)",
              GlobalStats.ParamScopeBytes);
-  printDatum(
-      OS,
-      "sum_all_params(#bytes in parent scope covered by DW_AT_location)",
-      GlobalStats.ParamScopeBytesCovered);
-  printDatum(OS,
+  printDatum(J,
+             "sum_all_params(#bytes in parent scope covered by DW_AT_location)",
+             GlobalStats.ParamScopeBytesCovered);
+  printDatum(J,
              "sum_all_params(#bytes in parent scope covered by "
              "DW_OP_entry_value)",
              GlobalStats.ParamScopeEntryValueBytesCovered);
 
-  printDatum(OS, "sum_all_local_vars(#bytes in parent scope)",
+  printDatum(J, "sum_all_local_vars(#bytes in parent scope)",
              GlobalStats.LocalVarScopeBytes);
-  printDatum(OS,
+  printDatum(J,
              "sum_all_local_vars(#bytes in parent scope covered by "
              "DW_AT_location)",
              GlobalStats.LocalVarScopeBytesCovered);
-  printDatum(OS,
+  printDatum(J,
              "sum_all_local_vars(#bytes in parent scope covered by "
              "DW_OP_entry_value)",
              GlobalStats.LocalVarScopeEntryValueBytesCovered);
 
-  printDatum(OS, "#bytes witin functions", GlobalStats.FunctionSize);
-  printDatum(OS, "#bytes witin inlined functions",
+  printDatum(J, "#bytes witin functions", GlobalStats.FunctionSize);
+  printDatum(J, "#bytes witin inlined functions",
              GlobalStats.InlineFunctionSize);
 
   // Print the summary for formal parameters.
-  printDatum(OS, "#params", ParamTotal);
-  printDatum(OS, "#params with source location", ParamWithSrcLoc);
-  printDatum(OS, "#params with type", ParamWithType);
-  printDatum(OS, "#params with binary location", ParamWithLoc);
+  printDatum(J, "#params", ParamTotal);
+  printDatum(J, "#params with source location", ParamWithSrcLoc);
+  printDatum(J, "#params with type", ParamWithType);
+  printDatum(J, "#params with binary location", ParamWithLoc);
 
   // Print the summary for local variables.
-  printDatum(OS, "#local vars", LocalVarTotal);
-  printDatum(OS, "#local vars with source location", LocalVarWithSrcLoc);
-  printDatum(OS, "#local vars with type", LocalVarWithType);
-  printDatum(OS, "#local vars with binary location", LocalVarWithLoc);
+  printDatum(J, "#local vars", LocalVarTotal);
+  printDatum(J, "#local vars with source location", LocalVarWithSrcLoc);
+  printDatum(J, "#local vars with type", LocalVarWithType);
+  printDatum(J, "#local vars with binary location", LocalVarWithLoc);
 
   // Print the debug section sizes.
-  printSectionSizes(OS, Sizes);
+  printSectionSizes(J, Sizes);
 
   // Print the location statistics for variables (includes local variables
   // and formal parameters).
-  printDatum(OS, "#variables processed by location statistics",
+  printDatum(J, "#variables processed by location statistics",
              LocStats.NumVarParam);
-  printLocationStats(OS, "#variables", LocStats.VarParamLocStats);
-  printLocationStats(OS, "#variables - entry values",
+  printLocationStats(J, "#variables", LocStats.VarParamLocStats);
+  printLocationStats(J, "#variables - entry values",
                      LocStats.VarParamNonEntryValLocStats);
 
   // Print the location statistics for formal parameters.
-  printDatum(OS, "#params processed by location statistics", LocStats.NumParam);
-  printLocationStats(OS, "#params", LocStats.ParamLocStats);
-  printLocationStats(OS, "#params - entry values",
+  printDatum(J, "#params processed by location statistics", LocStats.NumParam);
+  printLocationStats(J, "#params", LocStats.ParamLocStats);
+  printLocationStats(J, "#params - entry values",
                      LocStats.ParamNonEntryValLocStats);
 
   // Print the location statistics for local variables.
-  printDatum(OS, "#local vars processed by location statistics",
+  printDatum(J, "#local vars processed by location statistics",
              LocStats.NumVar);
-  printLocationStats(OS, "#local vars", LocStats.LocalVarLocStats);
-  printLocationStats(OS, "#local vars - entry values",
+  printLocationStats(J, "#local vars", LocStats.LocalVarLocStats);
+  printLocationStats(J, "#local vars - entry values",
                      LocStats.LocalVarNonEntryValLocStats);
-  OS << "}\n";
+  J.objectEnd();
+  OS << '\n';
   LLVM_DEBUG(
       llvm::dbgs() << "Total Availability: "
                    << (int)std::round((VarParamWithLoc * 100.0) / VarParamTotal)


        


More information about the llvm-commits mailing list