Reviewers: Mads Ager, iposva,

Description:
Tag Mac OS X VM regions allocated by V8. This has no effect other than  
making it
possible to identify V8 allocations in the vmmap(1) memory profiling tool,  
to
get a better idea of Chrome's memory usage.
BUG=23455
TEST=Tested by running vmmap(1) and looking for "Memory tag=255" and "Memory
tag=254" in the output.

Please review this at http://codereview.chromium.org/251047

SVN Base: http://v8.googlecode.com/svn/tags/1.3.12/

Affected files:
   M     src/platform-macos.cc


Index: src/platform-macos.cc
===================================================================
--- src/platform-macos.cc       (revision 2953)
+++ src/platform-macos.cc       (working copy)
@@ -42,6 +42,7 @@
  #include <mach/mach.h>
  #include <mach/semaphore.h>
  #include <mach/task.h>
+#include <mach/vm_statistics.h>
  #include <sys/time.h>
  #include <sys/resource.h>
  #include <sys/types.h>
@@ -128,7 +129,12 @@
                     bool is_executable) {
    const size_t msize = RoundUp(requested, getpagesize());
    int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
-  void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
+  // Use the fd parameter to pass vm_alloc flags to tag the region with the
+  // user-defined tag 255. This helps identify V8-allocated regions in  
memory
+  // analysis tools like vmmap(1).
+  void* mbase = mmap(NULL, msize, prot,
+                     MAP_PRIVATE | MAP_ANON,
+                     VM_MAKE_TAG(255), 0);
    if (mbase == MAP_FAILED) {
      LOG(StringEvent("OS::Allocate", "mmap failed"));
      return NULL;
@@ -195,8 +201,9 @@
    FILE* file = fopen(name, "w+");
    if (file == NULL) return NULL;
    fwrite(initial, size, 1, file);
-  void* memory =
-      mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(file), 0);
+  void* memory = mmap(0, size, PROT_READ | PROT_WRITE,
+                      MAP_SHARED,
+                      fileno(file), 0);
    return new PosixMemoryMappedFile(file, memory, size);
  }

@@ -280,14 +287,18 @@
  }


-// Constants used for mmap.
-static const int kMmapFd = -1;
+// Constants used for mmap calls by the VirtualMemory class.
+// kMmapFd is used to pass vm_alloc flags to tag the region with the user
+// defined tag 254. This helps identify V8-allocated regions in memory  
analysis
+// tools like vmmap(1).
+static const int kMmapFlags = MAP_PRIVATE | MAP_ANON;
+static const int kMmapFd = VM_MAKE_TAG(254);
  static const int kMmapFdOffset = 0;


  VirtualMemory::VirtualMemory(size_t size) {
    address_ = mmap(NULL, size, PROT_NONE,
-                  MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
+                  kMmapFlags | MAP_NORESERVE,
                    kMmapFd, kMmapFdOffset);
    size_ = size;
  }
@@ -308,7 +319,7 @@
  bool VirtualMemory::Commit(void* address, size_t size, bool is_executable)  
{
    int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
    if (MAP_FAILED == mmap(address, size, prot,
-                         MAP_PRIVATE | MAP_ANON | MAP_FIXED,
+                         kMmapFlags | MAP_FIXED,
                           kMmapFd, kMmapFdOffset)) {
      return false;
    }
@@ -320,7 +331,7 @@

  bool VirtualMemory::Uncommit(void* address, size_t size) {
    return mmap(address, size, PROT_NONE,
-              MAP_PRIVATE | MAP_ANON | MAP_NORESERVE | MAP_FIXED,
+              kMmapFlags | MAP_NORESERVE | MAP_FIXED,
                kMmapFd, kMmapFdOffset) != MAP_FAILED;
  }




--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to