ruby-changes:25726
From: nari <ko1@a...>
Date: Wed, 21 Nov 2012 22:15:26 +0900 (JST)
Subject: [ruby-changes:25726] nari:r37783 (trunk): * gc.c (gc_profile_clear): realloc profile records if its size is
nari 2012-11-21 22:15:10 +0900 (Wed, 21 Nov 2012) New Revision: 37783 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37783 Log: * gc.c (gc_profile_clear): realloc profile records if its size is higher than the threshold, GC_PROFILE_RECORD_DEFAULT_SIZE * 2. Modified files: trunk/ChangeLog trunk/gc.c trunk/test/ruby/test_gc.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 37782) +++ ChangeLog (revision 37783) @@ -1,3 +1,8 @@ +Wed Nov 21 22:08:48 2012 Narihiro Nakamura <authornari@g...> + + * gc.c (gc_profile_clear): realloc profile records if its size is + higher than the threshold, GC_PROFILE_RECORD_DEFAULT_SIZE * 2. + Wed Nov 21 21:53:29 2012 Tadayoshi Funaba <tadf@d...> * complex.c (nucomp_to_c): added. Index: gc.c =================================================================== --- gc.c (revision 37782) +++ gc.c (revision 37783) @@ -3822,6 +3822,7 @@ */ static inline void gc_prof_set_heap_info(rb_objspace_t *, gc_profile_record *); +#define GC_PROFILE_RECORD_DEFAULT_SIZE 100 static double getrusage_time(void) @@ -3866,7 +3867,7 @@ size_t count = objspace->profile.count; if (!objspace->profile.record) { - objspace->profile.size = 1000; + objspace->profile.size = GC_PROFILE_RECORD_DEFAULT_SIZE; objspace->profile.record = malloc(sizeof(gc_profile_record) * objspace->profile.size); } if (count >= objspace->profile.size) { @@ -4076,6 +4077,14 @@ gc_profile_clear(void) { rb_objspace_t *objspace = &rb_objspace; + + if (GC_PROFILE_RECORD_DEFAULT_SIZE * 2 < objspace->profile.size) { + objspace->profile.size = GC_PROFILE_RECORD_DEFAULT_SIZE * 2; + objspace->profile.record = realloc(objspace->profile.record, sizeof(gc_profile_record) * objspace->profile.size); + if (!objspace->profile.record) { + rb_memerror(); + } + } MEMZERO(objspace->profile.record, gc_profile_record, objspace->profile.size); objspace->profile.count = 0; return Qnil; Index: test/ruby/test_gc.rb =================================================================== --- test/ruby/test_gc.rb (revision 37782) +++ test/ruby/test_gc.rb (revision 37783) @@ -118,4 +118,20 @@ ensure GC::Profiler.disable end + + def test_profiler_clear + GC::Profiler.enable + + GC.start + assert_equal(1, GC::Profiler.raw_data.size) + GC.clear + assert_equal(0, GC::Profiler.raw_data.size) + + 200.times{ GC.start } + assert_equal(200, GC::Profiler.raw_data.size) + GC.clear + assert_equal(0, GC::Profiler.raw_data.size) + ensure + GC::Profiler.disable + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/