Title: [193757] trunk/Source/WebCore
Revision
193757
Author
akl...@apple.com
Date
2015-12-08 09:50:48 -0800 (Tue, 08 Dec 2015)

Log Message

[Cocoa] ResourceUsageOverlay should query kernel for VM page size.
<https://webkit.org/b/151920>

Reviewed by Andy Estes.

Read the vm.pagesize sysctl to find the correct page size for memory usage calculations.
This fixes broken math on systems that have different hw.pagesize and vm.pagesize.

* page/cocoa/ResourceUsageOverlayCocoa.mm:
(WebCore::vmPageSize):
(WebCore::pagesPerVMTag):
(WebCore::runSamplerThread):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (193756 => 193757)


--- trunk/Source/WebCore/ChangeLog	2015-12-08 17:39:46 UTC (rev 193756)
+++ trunk/Source/WebCore/ChangeLog	2015-12-08 17:50:48 UTC (rev 193757)
@@ -1,3 +1,18 @@
+2015-12-08  Andreas Kling  <akl...@apple.com>
+
+        [Cocoa] ResourceUsageOverlay should query kernel for VM page size.
+        <https://webkit.org/b/151920>
+
+        Reviewed by Andy Estes.
+
+        Read the vm.pagesize sysctl to find the correct page size for memory usage calculations.
+        This fixes broken math on systems that have different hw.pagesize and vm.pagesize.
+
+        * page/cocoa/ResourceUsageOverlayCocoa.mm:
+        (WebCore::vmPageSize):
+        (WebCore::pagesPerVMTag):
+        (WebCore::runSamplerThread):
+
 2015-12-08  Chris Dumez  <cdu...@apple.com>
 
         Add diagnostic logging to measure speculative revalidation accuracy

Modified: trunk/Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm (193756 => 193757)


--- trunk/Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm	2015-12-08 17:39:46 UTC (rev 193756)
+++ trunk/Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm	2015-12-08 17:50:48 UTC (rev 193757)
@@ -38,6 +38,7 @@
 #include <mach/mach.h>
 #include <mach/vm_statistics.h>
 #include <runtime/JSLock.h>
+#include <sys/sysctl.h>
 #include <thread>
 #include <wtf/MathExtras.h>
 #include <wtf/NeverDestroyed.h>
@@ -69,6 +70,19 @@
 
 namespace WebCore {
 
+static size_t vmPageSize()
+{
+    static size_t pageSize;
+    static std::once_flag onceFlag;
+    std::call_once(onceFlag, [&] {
+        size_t outputSize = sizeof(pageSize);
+        int status = sysctlbyname("vm.pagesize", &pageSize, &outputSize, nullptr, 0);
+        ASSERT_UNUSED(status, status != -1);
+        ASSERT(pageSize);
+    });
+    return pageSize;
+}
+
 template<typename T, size_t size = 70>
 class RingBuffer {
 public:
@@ -459,8 +473,7 @@
         }
 
         if (purgeableState == VM_PURGABLE_EMPTY) {
-            static size_t vmPageSize = getpagesize();
-            tags[info.user_tag].reclaimable += size / vmPageSize;
+            tags[info.user_tag].reclaimable += size / vmPageSize();
             continue;
         }
 
@@ -533,7 +546,6 @@
 
 NO_RETURN void runSamplerThread(void*)
 {
-    static size_t vmPageSize = getpagesize();
     auto& data = ""
     while (1) {
         float cpu = cpuUsage();
@@ -556,10 +568,10 @@
             for (auto& category : data.categories) {
                 if (category.isSubcategory) // Only do automatic tallying for top-level categories.
                     continue;
-                category.history.append(pagesPerCategory[category.type].dirty * vmPageSize);
-                category.reclaimableHistory.append(pagesPerCategory[category.type].reclaimable * vmPageSize);
+                category.history.append(pagesPerCategory[category.type].dirty * vmPageSize());
+                category.reclaimableHistory.append(pagesPerCategory[category.type].reclaimable * vmPageSize());
             }
-            data.totalDirty.append(totalDirtyPages * vmPageSize);
+            data.totalDirty.append(totalDirtyPages * vmPageSize());
 
             copyToVector(data.overlayLayers, layers);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to