mirror of
https://git.freebsd.org/ports.git
synced 2025-06-28 16:10:33 -04:00
clang 3.3 merge) PR: ports/179034 [1] Submitted by: Jan Beich <jbeich@tormail.org>, Nikolai Lifanov <lifanov@mail.lifanov.com> [1]
70 lines
2.3 KiB
Text
70 lines
2.3 KiB
Text
commit b44dc8e
|
|
Author: Jan Beich <jbeich@tormail.org>
|
|
Date: Fri Oct 12 18:49:59 2012 +0000
|
|
|
|
Bug 762445 - Add jemalloc3 glue for heap-committed, heap-dirty in about:memory.
|
|
---
|
|
memory/build/mozjemalloc_compat.c | 34 ++++++++++++++++++++++++++++------
|
|
1 file changed, 28 insertions(+), 6 deletions(-)
|
|
|
|
diff --git memory/build/mozjemalloc_compat.c memory/build/mozjemalloc_compat.c
|
|
index 94ad96e..7adfef5 100644
|
|
--- memory/build/mozjemalloc_compat.c
|
|
+++ memory/build/mozjemalloc_compat.c
|
|
@@ -11,15 +11,50 @@
|
|
#define wrap(a) je_ ## a
|
|
#endif
|
|
|
|
-extern MOZ_IMPORT_API(int)
|
|
+/*
|
|
+ * CTL_* macros are from memory/jemalloc/src/src/stats.c with changes:
|
|
+ * - drop `t' argument to avoid redundancy in calculating type size
|
|
+ * - require `i' argument for arena number explicitly
|
|
+ */
|
|
+
|
|
+#define CTL_GET(n, v) do { \
|
|
+ size_t sz = sizeof(v); \
|
|
+ wrap(mallctl)(n, &v, &sz, NULL, 0); \
|
|
+} while (0)
|
|
+
|
|
+#define CTL_I_GET(n, v, i) do { \
|
|
+ size_t mib[6]; \
|
|
+ size_t miblen = sizeof(mib) / sizeof(mib[0]); \
|
|
+ size_t sz = sizeof(v); \
|
|
+ wrap(mallctlnametomib)(n, mib, &miblen); \
|
|
+ mib[2] = i; \
|
|
+ wrap(mallctlbymib)(mib, miblen, &v, &sz, NULL, 0); \
|
|
+} while (0)
|
|
+
|
|
+MOZ_IMPORT_API(int)
|
|
wrap(mallctl)(const char*, void*, size_t*, void*, size_t);
|
|
+MOZ_IMPORT_API(int)
|
|
+wrap(mallctlnametomib)(const char *name, size_t *mibp, size_t *miblenp);
|
|
+MOZ_IMPORT_API(int)
|
|
+wrap(mallctlbymib)(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
|
|
|
|
MOZ_EXPORT_API(void)
|
|
jemalloc_stats(jemalloc_stats_t *stats)
|
|
{
|
|
- size_t size = sizeof(stats->mapped);
|
|
- wrap(mallctl)("stats.mapped", &stats->mapped, &size, NULL, 0);
|
|
- wrap(mallctl)("stats.allocated", &stats->allocated, &size, NULL, 0);
|
|
- stats->committed = -1;
|
|
- stats->dirty = -1;
|
|
+ unsigned narenas;
|
|
+ size_t active, allocated, mapped, page, pdirty;
|
|
+
|
|
+ CTL_GET("arenas.narenas", narenas);
|
|
+ CTL_GET("arenas.page", page);
|
|
+ CTL_GET("stats.active", active);
|
|
+ CTL_GET("stats.allocated", allocated);
|
|
+ CTL_GET("stats.mapped", mapped);
|
|
+
|
|
+ /* get the summation for all arenas, i == narenas */
|
|
+ CTL_I_GET("stats.arenas.0.pdirty", pdirty, narenas);
|
|
+
|
|
+ stats->allocated = allocated;
|
|
+ stats->mapped = mapped;
|
|
+ stats->dirty = pdirty * page;
|
|
+ stats->committed = active + stats->dirty;
|
|
}
|