[bmalloc] Bmalloc DebugHeap should have dump and scavenge features
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2019 21:49:41 +0000 (21:49 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2019 21:49:41 +0000 (21:49 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195305

Reviewed by Saam Barati.

As the same to bmalloc, bmalloc::DebugHeap should have scavenge feature to make it scavengable if we want.
We also add DebugHeap::dump feature which dumps system malloc data in the WebKit Malloc zone.

* bmalloc/DebugHeap.cpp:
(bmalloc::DebugHeap::scavenge):
(bmalloc::DebugHeap::dump):
* bmalloc/DebugHeap.h:
* bmalloc/bmalloc.cpp:
(bmalloc::api::scavenge):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242507 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/DebugHeap.cpp
Source/bmalloc/bmalloc/DebugHeap.h
Source/bmalloc/bmalloc/bmalloc.cpp

index b6ac14d..951ecd5 100644 (file)
@@ -1,3 +1,20 @@
+2019-03-05  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [bmalloc] Bmalloc DebugHeap should have dump and scavenge features
+        https://bugs.webkit.org/show_bug.cgi?id=195305
+
+        Reviewed by Saam Barati.
+
+        As the same to bmalloc, bmalloc::DebugHeap should have scavenge feature to make it scavengable if we want.
+        We also add DebugHeap::dump feature which dumps system malloc data in the WebKit Malloc zone.
+
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::scavenge):
+        (bmalloc::DebugHeap::dump):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::scavenge):
+
 2019-02-23  Keith Miller  <keith_miller@apple.com>
 
         Add new mac target numbers
index 5bcc2a0..cd5609e 100644 (file)
@@ -74,6 +74,19 @@ void DebugHeap::free(void* object)
     malloc_zone_free(m_zone, object);
 }
 
+void DebugHeap::scavenge()
+{
+    // Currently |goal| does not affect on the behavior of malloc_zone_pressure_relief if (1) we only scavenge one zone and (2) it is not nanomalloc.
+    constexpr size_t goal = 0;
+    malloc_zone_pressure_relief(m_zone, goal);
+}
+
+void DebugHeap::dump()
+{
+    constexpr bool verbose = true;
+    malloc_zone_print(m_zone, verbose);
+}
+
 #else
 
 DebugHeap::DebugHeap(std::lock_guard<Mutex>&)
@@ -112,7 +125,15 @@ void DebugHeap::free(void* object)
 {
     ::free(object);
 }
-    
+
+void DebugHeap::scavenge()
+{
+}
+
+void DebugHeap::dump()
+{
+}
+
 #endif
 
 // FIXME: This looks an awful lot like the code in wtf/Gigacage.cpp for large allocation.
index 293e7e2..77a2658 100644 (file)
@@ -49,6 +49,9 @@ public:
     void* memalignLarge(size_t alignment, size_t);
     void freeLarge(void* base);
 
+    void scavenge();
+    void dump();
+
     static DebugHeap* tryGet();
 
 private:
index 1edf29e..cccb594 100644 (file)
@@ -92,7 +92,9 @@ void scavenge()
 {
     scavengeThisThread();
 
-    if (!DebugHeap::tryGet())
+    if (DebugHeap* debugHeap = DebugHeap::tryGet())
+        debugHeap->scavenge();
+    else
         PerProcess<Scavenger>::get()->scavenge();
 }