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