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()); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits