[SVN-Commit] r1425 - in trunk: mail/thunderbird/files www/firefox/files www/libxul/files www/seamonkey/files

svn-freebsd-gecko at chruetertee.ch svn-freebsd-gecko at chruetertee.ch
Tue Dec 3 11:44:09 UTC 2013


Author: jbeich
Date: Tue Dec  3 11:44:02 2013
New Revision: 1425

Log:
expose private reporter in about:memory

It's implemented as a sum of PRES field in procstat(1) e.g.,

  $ procstat -v $(pgrep firefox) |
    awk '{ rss+=$5; prss+=$6 }
           END { printf "private  % 8d Kb\nresident % 8d Kb\n",
                        prss*4096/1024, rss*4096/1024 }'
  private     31080 Kb
  resident   491600 Kb

The value may be slightly different from how ki_rssize calculates
resident pages.

Added:
   trunk/mail/thunderbird/files/patch-bug945046
   trunk/www/firefox/files/patch-bug945046
   trunk/www/libxul/files/patch-bug945046
   trunk/www/seamonkey/files/patch-bug945046

Added: trunk/mail/thunderbird/files/patch-bug945046
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/mail/thunderbird/files/patch-bug945046	Tue Dec  3 11:44:02 2013	(r1425)
@@ -0,0 +1,130 @@
+diff --git config/system-headers config/system-headers
+index 432cba6..18a9627 100644
+--- mozilla/config/system-headers
++++ mozilla/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git js/src/config/system-headers js/src/config/system-headers
+index 432cba6..18a9627 100644
+--- mozilla/js/src/config/system-headers
++++ mozilla/js/src/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+index 9975621..b4b037d 100644
+--- mozilla/toolkit/library/Makefile.in
++++ mozilla/toolkit/library/Makefile.in
+@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
+ EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
+ endif
+ 
++ifeq ($(OS_ARCH),FreeBSD)
++OS_LIBS += $(call EXPAND_LIBNAME,util)
++endif
++
+ ifeq ($(OS_ARCH),WINNT)
+ OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
+ ifdef ACCESSIBILITY
+diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
+index b8147c8..0ffb34e 100644
+--- mozilla/xpcom/base/nsMemoryReporterManager.cpp
++++ mozilla/xpcom/base/nsMemoryReporterManager.cpp
+@@ -153,6 +153,43 @@ static nsresult GetResidentFast(int64_t 
+     return GetResident(n);
+ }
+ 
++#ifdef __FreeBSD__
++#include <libutil.h>
++
++static nsresult
++GetKinfoVmentrySelf(int64_t* prss)
++{
++    int cnt;
++    struct kinfo_vmentry *vmmap, *kve;
++    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
++        return NS_ERROR_FAILURE;
++
++    if (prss)
++        *prss = 0;
++
++    for (int i = 0; i < cnt; i++) {
++        kve = &vmmap[i];
++        if (prss)
++            *prss += kve->kve_private_resident;
++    }
++
++    free(vmmap);
++    return NS_OK;
++}
++
++#define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    int64_t priv;
++    nsresult rv = GetKinfoVmentrySelf(&priv);
++    if (NS_SUCCEEDED(rv))
++        *aN = priv * getpagesize();
++
++    return NS_OK;
++}
++#endif // FreeBSD
++
+ #elif defined(SOLARIS)
+ 
+ #include <procfs.h>
+@@ -327,6 +364,24 @@ static nsresult GetResidentFast(int64_t 
+ }
+ 
+ #define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    PROCESS_MEMORY_COUNTERS_EX pmcex;
++    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
++
++    if (!GetProcessMemoryInfo(
++            GetCurrentProcess(),
++            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
++        return NS_ERROR_FAILURE;
++    }
++
++    *aN = pmcex.PrivateUsage;
++    return NS_OK;
++}
++#endif  // XP_<PLATFORM>
++
++#ifdef HAVE_PRIVATE_REPORTER
+ class PrivateReporter MOZ_FINAL : public MemoryReporterBase
+ {
+ public:
+@@ -339,21 +394,10 @@ public:
+ 
+     NS_IMETHOD GetAmount(int64_t *aAmount)
+     {
+-        PROCESS_MEMORY_COUNTERS_EX pmcex;
+-        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+-
+-        if (!GetProcessMemoryInfo(
+-                GetCurrentProcess(),
+-                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+-            return NS_ERROR_FAILURE;
+-        }
+-
+-        *aAmount = pmcex.PrivateUsage;
+-        return NS_OK;
++        return GetPrivate(aAmount);
+     }
+ };
+-
+-#endif  // XP_<PLATFORM>
++#endif
+ 
+ #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
+ class VsizeReporter MOZ_FINAL : public MemoryReporterBase

Added: trunk/www/firefox/files/patch-bug945046
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/www/firefox/files/patch-bug945046	Tue Dec  3 11:44:02 2013	(r1425)
@@ -0,0 +1,130 @@
+diff --git config/system-headers config/system-headers
+index 432cba6..18a9627 100644
+--- config/system-headers
++++ config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git js/src/config/system-headers js/src/config/system-headers
+index 432cba6..18a9627 100644
+--- js/src/config/system-headers
++++ js/src/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+index 9975621..b4b037d 100644
+--- toolkit/library/Makefile.in
++++ toolkit/library/Makefile.in
+@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
+ EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
+ endif
+ 
++ifeq ($(OS_ARCH),FreeBSD)
++OS_LIBS += $(call EXPAND_LIBNAME,util)
++endif
++
+ ifeq ($(OS_ARCH),WINNT)
+ OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
+ ifdef ACCESSIBILITY
+diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
+index b8147c8..0ffb34e 100644
+--- xpcom/base/nsMemoryReporterManager.cpp
++++ xpcom/base/nsMemoryReporterManager.cpp
+@@ -196,6 +196,43 @@ static nsresult GetResidentFast(int64_t*
+     return GetResident(aN);
+ }
+ 
++#ifdef __FreeBSD__
++#include <libutil.h>
++
++static nsresult
++GetKinfoVmentrySelf(int64_t* prss)
++{
++    int cnt;
++    struct kinfo_vmentry *vmmap, *kve;
++    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
++        return NS_ERROR_FAILURE;
++
++    if (prss)
++        *prss = 0;
++
++    for (int i = 0; i < cnt; i++) {
++        kve = &vmmap[i];
++        if (prss)
++            *prss += kve->kve_private_resident;
++    }
++
++    free(vmmap);
++    return NS_OK;
++}
++
++#define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    int64_t priv;
++    nsresult rv = GetKinfoVmentrySelf(&priv);
++    if (NS_SUCCEEDED(rv))
++        *aN = priv * getpagesize();
++
++    return NS_OK;
++}
++#endif // FreeBSD
++
+ #elif defined(SOLARIS)
+ 
+ #include <procfs.h>
+@@ -370,6 +407,24 @@ static nsresult GetResidentFast(int64_t*
+ }
+ 
+ #define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    PROCESS_MEMORY_COUNTERS_EX pmcex;
++    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
++
++    if (!GetProcessMemoryInfo(
++            GetCurrentProcess(),
++            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
++        return NS_ERROR_FAILURE;
++    }
++
++    *aN = pmcex.PrivateUsage;
++    return NS_OK;
++}
++#endif  // XP_<PLATFORM>
++
++#ifdef HAVE_PRIVATE_REPORTER
+ class PrivateReporter MOZ_FINAL : public MemoryUniReporter
+ {
+ public:
+@@ -382,21 +437,10 @@ public:
+ 
+     NS_IMETHOD GetAmount(int64_t* aAmount)
+     {
+-        PROCESS_MEMORY_COUNTERS_EX pmcex;
+-        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+-
+-        if (!GetProcessMemoryInfo(
+-                GetCurrentProcess(),
+-                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+-            return NS_ERROR_FAILURE;
+-        }
+-
+-        *aAmount = pmcex.PrivateUsage;
+-        return NS_OK;
++        return GetPrivate(aAmount);
+     }
+ };
+-
+-#endif  // XP_<PLATFORM>
++#endif
+ 
+ #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
+ class VsizeReporter MOZ_FINAL : public MemoryUniReporter

Added: trunk/www/libxul/files/patch-bug945046
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/www/libxul/files/patch-bug945046	Tue Dec  3 11:44:02 2013	(r1425)
@@ -0,0 +1,130 @@
+diff --git config/system-headers config/system-headers
+index 432cba6..18a9627 100644
+--- config/system-headers
++++ config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git js/src/config/system-headers js/src/config/system-headers
+index 432cba6..18a9627 100644
+--- js/src/config/system-headers
++++ js/src/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+index 9975621..b4b037d 100644
+--- toolkit/library/Makefile.in
++++ toolkit/library/Makefile.in
+@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
+ EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
+ endif
+ 
++ifeq ($(OS_ARCH),FreeBSD)
++OS_LIBS += $(call EXPAND_LIBNAME,util)
++endif
++
+ ifeq ($(OS_ARCH),WINNT)
+ OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
+ ifdef ACCESSIBILITY
+diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
+index b8147c8..0ffb34e 100644
+--- xpcom/base/nsMemoryReporterManager.cpp
++++ xpcom/base/nsMemoryReporterManager.cpp
+@@ -153,6 +153,43 @@ static nsresult GetResidentFast(int64_t 
+     return GetResident(n);
+ }
+ 
++#ifdef __FreeBSD__
++#include <libutil.h>
++
++static nsresult
++GetKinfoVmentrySelf(int64_t* prss)
++{
++    int cnt;
++    struct kinfo_vmentry *vmmap, *kve;
++    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
++        return NS_ERROR_FAILURE;
++
++    if (prss)
++        *prss = 0;
++
++    for (int i = 0; i < cnt; i++) {
++        kve = &vmmap[i];
++        if (prss)
++            *prss += kve->kve_private_resident;
++    }
++
++    free(vmmap);
++    return NS_OK;
++}
++
++#define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    int64_t priv;
++    nsresult rv = GetKinfoVmentrySelf(&priv);
++    if (NS_SUCCEEDED(rv))
++        *aN = priv * getpagesize();
++
++    return NS_OK;
++}
++#endif // FreeBSD
++
+ #elif defined(SOLARIS)
+ 
+ #include <procfs.h>
+@@ -327,6 +364,24 @@ static nsresult GetResidentFast(int64_t 
+ }
+ 
+ #define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    PROCESS_MEMORY_COUNTERS_EX pmcex;
++    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
++
++    if (!GetProcessMemoryInfo(
++            GetCurrentProcess(),
++            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
++        return NS_ERROR_FAILURE;
++    }
++
++    *aN = pmcex.PrivateUsage;
++    return NS_OK;
++}
++#endif  // XP_<PLATFORM>
++
++#ifdef HAVE_PRIVATE_REPORTER
+ class PrivateReporter MOZ_FINAL : public MemoryReporterBase
+ {
+ public:
+@@ -339,21 +394,10 @@ public:
+ 
+     NS_IMETHOD GetAmount(int64_t *aAmount)
+     {
+-        PROCESS_MEMORY_COUNTERS_EX pmcex;
+-        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+-
+-        if (!GetProcessMemoryInfo(
+-                GetCurrentProcess(),
+-                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+-            return NS_ERROR_FAILURE;
+-        }
+-
+-        *aAmount = pmcex.PrivateUsage;
+-        return NS_OK;
++        return GetPrivate(aAmount);
+     }
+ };
+-
+-#endif  // XP_<PLATFORM>
++#endif
+ 
+ #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
+ class VsizeReporter MOZ_FINAL : public MemoryReporterBase

Added: trunk/www/seamonkey/files/patch-bug945046
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/www/seamonkey/files/patch-bug945046	Tue Dec  3 11:44:02 2013	(r1425)
@@ -0,0 +1,130 @@
+diff --git config/system-headers config/system-headers
+index 432cba6..18a9627 100644
+--- mozilla/config/system-headers
++++ mozilla/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git js/src/config/system-headers js/src/config/system-headers
+index 432cba6..18a9627 100644
+--- mozilla/js/src/config/system-headers
++++ mozilla/js/src/config/system-headers
+@@ -1131,3 +1131,4 @@ unicode/unum.h
+ unicode/ustring.h
+ unicode/utypes.h
+ #endif
++libutil.h
+diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+index 9975621..b4b037d 100644
+--- mozilla/toolkit/library/Makefile.in
++++ mozilla/toolkit/library/Makefile.in
+@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
+ EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
+ endif
+ 
++ifeq ($(OS_ARCH),FreeBSD)
++OS_LIBS += $(call EXPAND_LIBNAME,util)
++endif
++
+ ifeq ($(OS_ARCH),WINNT)
+ OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
+ ifdef ACCESSIBILITY
+diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
+index b8147c8..0ffb34e 100644
+--- mozilla/xpcom/base/nsMemoryReporterManager.cpp
++++ mozilla/xpcom/base/nsMemoryReporterManager.cpp
+@@ -153,6 +153,43 @@ static nsresult GetResidentFast(int64_t 
+     return GetResident(n);
+ }
+ 
++#ifdef __FreeBSD__
++#include <libutil.h>
++
++static nsresult
++GetKinfoVmentrySelf(int64_t* prss)
++{
++    int cnt;
++    struct kinfo_vmentry *vmmap, *kve;
++    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
++        return NS_ERROR_FAILURE;
++
++    if (prss)
++        *prss = 0;
++
++    for (int i = 0; i < cnt; i++) {
++        kve = &vmmap[i];
++        if (prss)
++            *prss += kve->kve_private_resident;
++    }
++
++    free(vmmap);
++    return NS_OK;
++}
++
++#define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    int64_t priv;
++    nsresult rv = GetKinfoVmentrySelf(&priv);
++    if (NS_SUCCEEDED(rv))
++        *aN = priv * getpagesize();
++
++    return NS_OK;
++}
++#endif // FreeBSD
++
+ #elif defined(SOLARIS)
+ 
+ #include <procfs.h>
+@@ -327,6 +364,24 @@ static nsresult GetResidentFast(int64_t 
+ }
+ 
+ #define HAVE_PRIVATE_REPORTER
++static nsresult
++GetPrivate(int64_t* aN)
++{
++    PROCESS_MEMORY_COUNTERS_EX pmcex;
++    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
++
++    if (!GetProcessMemoryInfo(
++            GetCurrentProcess(),
++            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
++        return NS_ERROR_FAILURE;
++    }
++
++    *aN = pmcex.PrivateUsage;
++    return NS_OK;
++}
++#endif  // XP_<PLATFORM>
++
++#ifdef HAVE_PRIVATE_REPORTER
+ class PrivateReporter MOZ_FINAL : public MemoryReporterBase
+ {
+ public:
+@@ -339,21 +394,10 @@ public:
+ 
+     NS_IMETHOD GetAmount(int64_t *aAmount)
+     {
+-        PROCESS_MEMORY_COUNTERS_EX pmcex;
+-        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+-
+-        if (!GetProcessMemoryInfo(
+-                GetCurrentProcess(),
+-                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+-            return NS_ERROR_FAILURE;
+-        }
+-
+-        *aAmount = pmcex.PrivateUsage;
+-        return NS_OK;
++        return GetPrivate(aAmount);
+     }
+ };
+-
+-#endif  // XP_<PLATFORM>
++#endif
+ 
+ #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
+ class VsizeReporter MOZ_FINAL : public MemoryReporterBase


More information about the freebsd-gecko mailing list