[Lldb-commits] [PATCH] D83876: [lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after each test run

2020-08-17 Thread Raphael Isemann via Phabricator via lldb-commits
This revision was not accepted when it landed; it landed in state "Needs 
Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc2f9454a16e4: [lldb] Add 
SBModule::GarbageCollectAllocatedModules and clear modules after… (authored by 
teemperor).
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83876/new/

https://reviews.llvm.org/D83876

Files:
  lldb/bindings/interface/SBModule.i
  lldb/include/lldb/API/SBModule.h
  lldb/packages/Python/lldbsuite/test/lldbtest.py
  lldb/source/API/SBModule.cpp


Index: lldb/source/API/SBModule.cpp
===
--- lldb/source/API/SBModule.cpp
+++ lldb/source/API/SBModule.cpp
@@ -690,6 +690,13 @@
   return Module::GetNumberAllocatedModules();
 }
 
+void SBModule::GarbageCollectAllocatedModules() {
+  LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule,
+GarbageCollectAllocatedModules);
+  const bool mandatory = false;
+  ModuleList::RemoveOrphanSharedModules(mandatory);
+}
+
 namespace lldb_private {
 namespace repro {
 
Index: lldb/packages/Python/lldbsuite/test/lldbtest.py
===
--- lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1094,6 +1094,17 @@
 lldb.SBDebugger.Destroy(self.dbg)
 del self.dbg
 
+# All modules should be orphaned now so that they can be cleared from
+# the shared module cache.
+lldb.SBModule.GarbageCollectAllocatedModules()
+
+# Modules are not orphaned during reproducer replay because they're
+# leaked on purpose.
+if not configuration.is_reproducer():
+# Assert that the global module cache is empty.
+self.assertEqual(lldb.SBModule.GetNumberAllocatedModules(), 0)
+
+
 # =
 # Various callbacks to allow introspection of test progress
 # =
@@ -2068,13 +2079,9 @@
 for target in targets:
 self.dbg.DeleteTarget(target)
 
-# Modules are not orphaned during reproducer replay because they're
-# leaked on purpose.
 if not configuration.is_reproducer():
 # Assert that all targets are deleted.
-assert self.dbg.GetNumTargets() == 0
-# Assert that the global module cache is empty.
-assert lldb.SBModule.GetNumberAllocatedModules() == 0
+self.assertEqual(self.dbg.GetNumTargets(), 0)
 
 # Do this last, to make sure it's in reverse order from how we setup.
 Base.tearDown(self)
Index: lldb/include/lldb/API/SBModule.h
===
--- lldb/include/lldb/API/SBModule.h
+++ lldb/include/lldb/API/SBModule.h
@@ -291,6 +291,9 @@
   /// Get the number of global modules.
   static uint32_t GetNumberAllocatedModules();
 
+  /// Remove any global modules which are no longer needed.
+  static void GarbageCollectAllocatedModules();
+
 private:
   friend class SBAddress;
   friend class SBFrame;
Index: lldb/bindings/interface/SBModule.i
===
--- lldb/bindings/interface/SBModule.i
+++ lldb/bindings/interface/SBModule.i
@@ -353,6 +353,17 @@
 static uint32_t
 GetNumberAllocatedModules();
 
+%feature("docstring", "
+Removes all modules which are no longer needed by any part of LLDB from
+the module cache.
+
+This is an implementation detail exposed for testing and should not be
+relied upon. Use SBDebugger::MemoryPressureDetected instead to reduce
+LLDB's memory consumption during execution.
+") GarbageCollectAllocatedModules;
+static void
+GarbageCollectAllocatedModules();
+
 STRING_EXTENSION(SBModule)
 
 #ifdef SWIGPYTHON


Index: lldb/source/API/SBModule.cpp
===
--- lldb/source/API/SBModule.cpp
+++ lldb/source/API/SBModule.cpp
@@ -690,6 +690,13 @@
   return Module::GetNumberAllocatedModules();
 }
 
+void SBModule::GarbageCollectAllocatedModules() {
+  LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule,
+GarbageCollectAllocatedModules);
+  const bool mandatory = false;
+  ModuleList::RemoveOrphanSharedModules(mandatory);
+}
+
 namespace lldb_private {
 namespace repro {
 
Index: lldb/packages/Python/lldbsuite/test/lldbtest.py
===
--- lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1094,6 +1094,17 @@
 lldb.SBDebugger.Destroy(self.dbg)
 del self.dbg
 
+# All modules should be orphaned now so that th

[Lldb-commits] [PATCH] D83876: [lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after each test run

2020-08-17 Thread Raphael Isemann via Phabricator via lldb-commits
teemperor updated this revision to Diff 285938.
teemperor retitled this revision from "[lldb] Add SBModule::ClearCachedModules 
and clear modules after each test run" to "[lldb] Add 
SBModule::GarbageCollectAllocatedModules and clear modules after each test run".
teemperor edited the summary of this revision.
teemperor added a comment.

- Rename to GarbageCollectAllocatedModules


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83876/new/

https://reviews.llvm.org/D83876

Files:
  lldb/bindings/interface/SBModule.i
  lldb/include/lldb/API/SBModule.h
  lldb/packages/Python/lldbsuite/test/lldbtest.py
  lldb/source/API/SBModule.cpp


Index: lldb/source/API/SBModule.cpp
===
--- lldb/source/API/SBModule.cpp
+++ lldb/source/API/SBModule.cpp
@@ -690,6 +690,13 @@
   return Module::GetNumberAllocatedModules();
 }
 
+void SBModule::GarbageCollectAllocatedModules() {
+  LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule,
+GarbageCollectAllocatedModules);
+  const bool mandatory = false;
+  ModuleList::RemoveOrphanSharedModules(mandatory);
+}
+
 namespace lldb_private {
 namespace repro {
 
Index: lldb/packages/Python/lldbsuite/test/lldbtest.py
===
--- lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1094,6 +1094,17 @@
 lldb.SBDebugger.Destroy(self.dbg)
 del self.dbg
 
+# All modules should be orphaned now so that they can be cleared from
+# the shared module cache.
+lldb.SBModule.GarbageCollectAllocatedModules()
+
+# Modules are not orphaned during reproducer replay because they're
+# leaked on purpose.
+if not configuration.is_reproducer():
+# Assert that the global module cache is empty.
+self.assertEqual(lldb.SBModule.GetNumberAllocatedModules(), 0)
+
+
 # =
 # Various callbacks to allow introspection of test progress
 # =
@@ -2068,13 +2079,9 @@
 for target in targets:
 self.dbg.DeleteTarget(target)
 
-# Modules are not orphaned during reproducer replay because they're
-# leaked on purpose.
 if not configuration.is_reproducer():
 # Assert that all targets are deleted.
-assert self.dbg.GetNumTargets() == 0
-# Assert that the global module cache is empty.
-assert lldb.SBModule.GetNumberAllocatedModules() == 0
+self.assertEqual(self.dbg.GetNumTargets(), 0)
 
 # Do this last, to make sure it's in reverse order from how we setup.
 Base.tearDown(self)
Index: lldb/include/lldb/API/SBModule.h
===
--- lldb/include/lldb/API/SBModule.h
+++ lldb/include/lldb/API/SBModule.h
@@ -291,6 +291,9 @@
   /// Get the number of global modules.
   static uint32_t GetNumberAllocatedModules();
 
+  /// Remove any global modules which are no longer needed.
+  static void GarbageCollectAllocatedModules();
+
 private:
   friend class SBAddress;
   friend class SBFrame;
Index: lldb/bindings/interface/SBModule.i
===
--- lldb/bindings/interface/SBModule.i
+++ lldb/bindings/interface/SBModule.i
@@ -353,6 +353,17 @@
 static uint32_t
 GetNumberAllocatedModules();
 
+%feature("docstring", "
+Removes all modules which are no longer needed by any part of LLDB from
+the module cache.
+
+This is an implementation detail exposed for testing and should not be
+relied upon. Use SBDebugger::MemoryPressureDetected instead to reduce
+LLDB's memory consumption during execution.
+") GarbageCollectAllocatedModules;
+static void
+GarbageCollectAllocatedModules();
+
 STRING_EXTENSION(SBModule)
 
 #ifdef SWIGPYTHON


Index: lldb/source/API/SBModule.cpp
===
--- lldb/source/API/SBModule.cpp
+++ lldb/source/API/SBModule.cpp
@@ -690,6 +690,13 @@
   return Module::GetNumberAllocatedModules();
 }
 
+void SBModule::GarbageCollectAllocatedModules() {
+  LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule,
+GarbageCollectAllocatedModules);
+  const bool mandatory = false;
+  ModuleList::RemoveOrphanSharedModules(mandatory);
+}
+
 namespace lldb_private {
 namespace repro {
 
Index: lldb/packages/Python/lldbsuite/test/lldbtest.py
===
--- lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1094,6 +1094,17 @@
 lldb.SBDebugger.Destroy(self.dbg)
 del self.dbg
 
+# All modules should be orphaned now so that they can be cleared fro