summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-10 02:13:41 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-10 02:13:41 +0000
commit2d581d6c2a7d93965b6e4679bb4b8a867feef7d8 (patch)
tree22345bcd68adb8e8524d098ebe66cd40aee59de9 /gc.c
parent83f02b98b14afe116c12f2f90ca9565418c8ed05 (diff)
* gc.c (gc_stat_internal): support:
* total_allocated_pages * total_freed_pages ref: [Feature #9924] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 2244259eb9..4bba6ec7d8 100644
--- a/gc.c
+++ b/gc.c
@@ -557,6 +557,8 @@ typedef struct rb_objspace {
/* basic statistics */
size_t count;
size_t total_freed_objects;
+ size_t total_allocated_pages;
+ size_t total_freed_pages;
} profile;
struct gc_list *global_list;
@@ -1299,6 +1301,7 @@ static void
heap_page_free(rb_objspace_t *objspace, struct heap_page *page)
{
heap_allocated_pages--;
+ objspace->profile.total_freed_pages++;
aligned_free(page->body);
free(page);
}
@@ -1383,6 +1386,8 @@ heap_page_allocate(rb_objspace_t *objspace)
heap_pages_sorted[hi] = page;
heap_allocated_pages++;
+ objspace->profile.total_allocated_pages++;
+
if (RGENGC_CHECK_MODE) assert(heap_allocated_pages <= heap_pages_sorted_length);
/* adjust obj_limit (object number available in this page) */
@@ -6253,6 +6258,7 @@ gc_stat_internal(VALUE hash_or_sym)
static VALUE sym_heap_available_slots, sym_heap_live_slots, sym_heap_free_slots, sym_heap_final_slots;
static VALUE sym_heap_marked_slots, sym_heap_swept_slots;
static VALUE sym_heap_eden_pages, sym_heap_tomb_pages;
+ static VALUE sym_total_allocated_pages, sym_total_freed_pages;
static VALUE sym_total_allocated_objects, sym_total_freed_objects;
static VALUE sym_malloc_increase, sym_malloc_limit;
#if USE_RGENGC
@@ -6296,6 +6302,8 @@ gc_stat_internal(VALUE hash_or_sym)
S(heap_swept_slots);
S(heap_eden_pages);
S(heap_tomb_pages);
+ S(total_allocated_pages);
+ S(total_freed_pages);
S(total_allocated_objects);
S(total_freed_objects);
S(malloc_increase);
@@ -6343,6 +6351,8 @@ gc_stat_internal(VALUE hash_or_sym)
SET(heap_swept_slots, heap_pages_swept_slots);
SET(heap_eden_pages, heap_eden->page_length);
SET(heap_tomb_pages, heap_tomb->page_length);
+ SET(total_allocated_pages, objspace->profile.total_allocated_pages);
+ SET(total_freed_pages, objspace->profile.total_freed_pages);
SET(total_allocated_objects, objspace->total_allocated_objects);
SET(total_freed_objects, objspace->profile.total_freed_objects);
SET(malloc_increase, malloc_increase);