summaryrefslogtreecommitdiff
path: root/Zend/zend_alloc.c
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-12-27 16:42:59 +0000
committerZeev Suraski <zeev@php.net>1999-12-27 16:42:59 +0000
commitebd4445ba252eca168aba4cf82dae069e2c193bf (patch)
treeb3e52eb24887ce36430461b6189ee29660624764 /Zend/zend_alloc.c
parent8eb145a3be9b43f3ace8fcc05174f35ff009b372 (diff)
downloadphp-git-ebd4445ba252eca168aba4cf82dae069e2c193bf.tar.gz
Add cache statistics support
Diffstat (limited to 'Zend/zend_alloc.c')
-rw-r--r--Zend/zend_alloc.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 55a2dec123..e941703191 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -116,11 +116,17 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
+ AG(cache_stats)[size][1]++;
#endif
p->persistent = 0;
p->cached = 0;
return (void *)((char *)p + sizeof(zend_mem_header) + PLATFORM_PADDING);
} else {
+#if ZEND_DEBUG
+ if (size<MAX_CACHED_MEMORY) {
+ AG(cache_stats)[size][0]++;
+ }
+#endif
p = (zend_mem_header *) malloc(sizeof(zend_mem_header) + size + PLATFORM_PADDING + END_ALIGNMENT(size) + END_MAGIC_SIZE);
}
@@ -323,6 +329,10 @@ ZEND_API void start_memory_manager(ALS_D)
AG(memory_exhausted)=0;
#endif
+#if ZEND_DEBUG
+ memset(AG(cache_stats), 0, sizeof(AG(cache_stats)));
+ memset(AG(zval_cache_stats), 0, sizeof(AG(zval_cache_stats)));
+#endif
memset(AG(cache_count),0,MAX_CACHED_MEMORY*sizeof(unsigned char));
}
@@ -381,6 +391,38 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
t = t->pNext;
}
}
+
+#if ZEND_DEBUG
+ do {
+ zval display_memory_cache_stats;
+ int i, j;
+
+ if (zend_get_ini_entry("display_memory_cache_stats", sizeof("display_memory_cache_stats"), &display_memory_cache_stats)==FAILURE) {
+ break;
+ }
+ if (!atoi(display_memory_cache_stats.value.str.val)) {
+ break;
+ }
+ fprintf(stderr, "Memory cache statistics\n"
+ "-----------------------\n\n"
+ "[zval, %2d]\t\t%d / %d (%.2f%%)\n",
+ sizeof(zval),
+ AG(zval_cache_stats)[1], AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1],
+ ((double) AG(zval_cache_stats)[1] / (AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1]))*100);
+
+
+ for (i=0; i<MAX_CACHED_MEMORY; i+=2) {
+ fprintf(stderr, "[%2d, %2d]\t\t", i+1, i+2);
+ for (j=0; j<2; j++) {
+ fprintf(stderr, "%d / %d (%.2f%%)\t\t",
+ AG(cache_stats)[i+j][1], AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1],
+ ((double) AG(cache_stats)[i+j][1] / (AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1]))*100);
+ }
+ fprintf(stderr, "\n");
+ }
+
+ } while (0);
+#endif
}