[Mac] Always do a full GC when simulating memory pressure.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Apr 2014 20:26:54 +0000 (20:26 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Apr 2014 20:26:54 +0000 (20:26 +0000)
<https://webkit.org/b/129790>

To get more consistent accounting on automated memory testers,
add a synchronous GC as part of the simulated memory pressure event.

Reviewed by Geoffrey Garen.

* platform/mac/MemoryPressureHandlerMac.mm:
(WebCore::MemoryPressureHandler::install):

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

Source/WebCore/ChangeLog
Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm

index d976f1b..cd64fb5 100644 (file)
@@ -1,3 +1,16 @@
+2014-04-08  Andreas Kling  <akling@apple.com>
+
+        [Mac] Always do a full GC when simulating memory pressure.
+        <https://webkit.org/b/129790>
+
+        To get more consistent accounting on automated memory testers,
+        add a synchronous GC as part of the simulated memory pressure event.
+
+        Reviewed by Geoffrey Garen.
+
+        * platform/mac/MemoryPressureHandlerMac.mm:
+        (WebCore::MemoryPressureHandler::install):
+
 2014-04-08  Jer Noble  <jer.noble@apple.com>
 
         Unreviewed iOS build fix. Pass 0 instead of nil to setRate: when pausing.
index 8354d07..b28c356 100644 (file)
@@ -29,6 +29,7 @@
 #if !PLATFORM(IOS)
 
 #import "IOSurfacePool.h"
+#import "GCController.h"
 #import "LayerPool.h"
 #import "WebCoreSystemInterface.h"
 #import <malloc/malloc.h>
@@ -70,6 +71,11 @@ void MemoryPressureHandler::install()
 
     // Allow simulation of memory pressure with "notifyutil -p org.WebKit.lowMemory"
     notify_register_dispatch("org.WebKit.lowMemory", &_notifyToken, dispatch_get_main_queue(), ^(int) {
+
+        // We only do a synchronous GC when *simulating* memory pressure.
+        // This gives us a more consistent picture of live objects at the end of testing.
+        gcController().garbageCollectNow();
+
         memoryPressureHandler().respondToMemoryPressure();
         malloc_zone_pressure_relief(nullptr, 0);
     });