[Lldb-commits] [lldb] r330165 - [Commands] Expose statistics through the SBAPI.

Davide Italiano via lldb-commits lldb-commits at lists.llvm.org
Mon Apr 16 15:55:34 PDT 2018


Author: davide
Date: Mon Apr 16 15:55:34 2018
New Revision: 330165

URL: http://llvm.org/viewvc/llvm-project?rev=330165&view=rev
Log:
[Commands] Expose statistics through the SBAPI.

The API is `SBStructuredData GetStatistics()`. This allows
the command to be used in scripts.

<rdar://problem/36555975>

Added:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/Makefile
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/TestStatisticsAPI.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/main.c
Modified:
    lldb/trunk/include/lldb/API/SBStructuredData.h
    lldb/trunk/include/lldb/API/SBTarget.h
    lldb/trunk/scripts/interface/SBTarget.i
    lldb/trunk/source/API/SBTarget.cpp

Modified: lldb/trunk/include/lldb/API/SBStructuredData.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBStructuredData.h?rev=330165&r1=330164&r2=330165&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBStructuredData.h (original)
+++ lldb/trunk/include/lldb/API/SBStructuredData.h Mon Apr 16 15:55:34 2018
@@ -99,6 +99,7 @@ public:
 protected:
   friend class SBTraceOptions;
   friend class SBDebugger;
+  friend class SBTarget;
 
   StructuredDataImplUP m_impl_up;
 };

Modified: lldb/trunk/include/lldb/API/SBTarget.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBTarget.h?rev=330165&r1=330164&r2=330165&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBTarget.h (original)
+++ lldb/trunk/include/lldb/API/SBTarget.h Mon Apr 16 15:55:34 2018
@@ -75,6 +75,8 @@ public:
 
   lldb::SBProcess GetProcess();
 
+  lldb::SBStructuredData GetStatistics();
+
   //------------------------------------------------------------------
   /// Return the platform object associated with the target.
   ///

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/Makefile?rev=330165&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/Makefile (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/Makefile Mon Apr 16 15:55:34 2018
@@ -0,0 +1,3 @@
+LEVEL = ../../make
+C_SOURCES := main.c
+include $(LEVEL)/Makefile.rules

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/TestStatisticsAPI.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/TestStatisticsAPI.py?rev=330165&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/TestStatisticsAPI.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/TestStatisticsAPI.py Mon Apr 16 15:55:34 2018
@@ -0,0 +1,28 @@
+# Test the SBAPI for GetStatistics()
+
+import json
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestStatsAPI(TestBase):
+    mydir = TestBase.compute_mydir(__file__)
+
+    def setUp(self):
+        TestBase.setUp(self)
+
+    def test_stats_api(self):
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+        target = self.dbg.CreateTarget(exe)
+        stats = target.GetStatistics()
+        stream = lldb.SBStream()
+        res = stats.GetAsJSON(stream)
+        stats_json = sorted(json.loads(stream.GetData()))
+        self.assertEqual(len(stats_json), 4)
+        self.assertEqual(stats_json[0], "Number of expr evaluation failures")
+        self.assertEqual(stats_json[1], "Number of expr evaluation successes")
+        self.assertEqual(stats_json[2], "Number of frame var failures")
+        self.assertEqual(stats_json[3], "Number of frame var successes")

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/main.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/main.c?rev=330165&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/main.c (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/stats_api/main.c Mon Apr 16 15:55:34 2018
@@ -0,0 +1,3 @@
+int main(void) {
+  return 0;
+}

Modified: lldb/trunk/scripts/interface/SBTarget.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBTarget.i?rev=330165&r1=330164&r2=330165&view=diff
==============================================================================
--- lldb/trunk/scripts/interface/SBTarget.i (original)
+++ lldb/trunk/scripts/interface/SBTarget.i Mon Apr 16 15:55:34 2018
@@ -915,6 +915,8 @@ public:
     void
     SetLaunchInfo (const lldb::SBLaunchInfo &launch_info);
 
+    lldb::SBStructuredData GetStatistics();
+
     bool
     operator == (const lldb::SBTarget &rhs) const;
 

Modified: lldb/trunk/source/API/SBTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTarget.cpp?rev=330165&r1=330164&r2=330165&view=diff
==============================================================================
--- lldb/trunk/source/API/SBTarget.cpp (original)
+++ lldb/trunk/source/API/SBTarget.cpp Mon Apr 16 15:55:34 2018
@@ -23,6 +23,7 @@
 #include "lldb/API/SBSourceManager.h"
 #include "lldb/API/SBStream.h"
 #include "lldb/API/SBStringList.h"
+#include "lldb/API/SBStructuredData.h"
 #include "lldb/API/SBSymbolContextList.h"
 #include "lldb/Breakpoint/BreakpointID.h"
 #include "lldb/Breakpoint/BreakpointIDList.h"
@@ -38,6 +39,7 @@
 #include "lldb/Core/STLUtils.h"
 #include "lldb/Core/SearchFilter.h"
 #include "lldb/Core/Section.h"
+#include "lldb/Core/StructuredDataImpl.h"
 #include "lldb/Core/ValueObjectConstResult.h"
 #include "lldb/Core/ValueObjectList.h"
 #include "lldb/Core/ValueObjectVariable.h"
@@ -181,6 +183,25 @@ SBDebugger SBTarget::GetDebugger() const
   return debugger;
 }
 
+SBStructuredData SBTarget::GetStatistics() {
+  SBStructuredData data;
+  TargetSP target_sp(GetSP());
+  if (!target_sp)
+    return data;
+
+  auto stats_up = llvm::make_unique<StructuredData::Dictionary>();
+  int i = 0;
+  for (auto &Entry : target_sp->GetStatistics()) {
+    std::string Desc = lldb_private::GetStatDescription(
+        static_cast<lldb_private::StatisticKind>(i));
+    stats_up->AddIntegerItem(Desc, Entry);
+    i += 1;
+  }
+
+  data.m_impl_up->SetObjectSP(std::move(stats_up));
+  return data;
+}
+
 SBProcess SBTarget::LoadCore(const char *core_file) {
   SBProcess sb_process;
   TargetSP target_sp(GetSP());




More information about the lldb-commits mailing list