[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]