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

ruby-changes:6977

From: nobu <ko1@a...>
Date: Mon, 11 Aug 2008 20:11:45 +0900 (JST)
Subject: [ruby-changes:6977] Ruby:r18495 (trunk): * gc.c (getrusage_time): works only if RUSAGE_SELF is defined right

nobu	2008-08-11 20:11:27 +0900 (Mon, 11 Aug 2008)

  New Revision: 18495

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18495

  Log:
    * gc.c (getrusage_time): works only if RUSAGE_SELF is defined right
      now.
    
    * gc.c (gc_profile_result): C99.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18494)
+++ ChangeLog	(revision 18495)
@@ -1,3 +1,10 @@
+Mon Aug 11 20:11:21 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* gc.c (getrusage_time): works only if RUSAGE_SELF is defined right
+	  now.
+
+	* gc.c (gc_profile_result): C99.
+
 Mon Aug 11 18:57:38 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* array.c (rb_ary_sample): rename #choice to #sample.  in
Index: gc.c
===================================================================
--- gc.c	(revision 18494)
+++ gc.c	(revision 18495)
@@ -113,11 +113,15 @@
 static double
 getrusage_time(void)
 {
+#ifdef RUSAGE_SELF
     struct rusage usage;
     struct timeval time;
     getrusage(RUSAGE_SELF, &usage);
     time = usage.ru_utime;
     return time.tv_sec + time.tv_usec * 1e-6;
+#else
+    return 0.0;
+#endif
 }
 
 #define GC_PROF_TIMER_START do {\
@@ -142,7 +146,7 @@
 #define GC_PROF_TIMER_STOP do {\
 	if (objspace->profile.run) {\
 	    gc_time = getrusage_time() - gc_time;\
-	    if(gc_time < 0) gc_time = 0;\
+	    if (gc_time < 0) gc_time = 0;\
 	    objspace->profile.record[count].gc_time = gc_time;\
 	    objspace->profile.count++;\
 	}\
@@ -2705,43 +2709,40 @@
 {
     rb_objspace_t *objspace = &rb_objspace;
     VALUE record = gc_profile_record_get();
-    VALUE result = rb_str_new2("");
+    VALUE result;
     int i;
-    char buf[1024];
     
-    if(objspace->profile.run && objspace->profile.count) {
-	sprintf(buf, "GC %1$d invokes.\n", NUM2INT(gc_count(0)));
-	rb_str_concat(result, rb_str_new2(buf));
-	rb_str_concat(result, rb_str_new2("Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)\n"));
-	for(i = 0; i < (int)RARRAY_LEN(record); i++) {
-	    memset(buf, 0, 1024);
+    if (objspace->profile.run && objspace->profile.count) {
+	result = rb_sprintf("GC %1$d invokes.\n", NUM2INT(gc_count(0)));
+	rb_str_cat2(result, "Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)\n");
+	for (i = 0; i < (int)RARRAY_LEN(record); i++) {
 	    VALUE r = RARRAY_PTR(record)[i];
-	    sprintf(buf, "%1$5d %2$19.3f %3$20d %4$20d %5$20d %6$30.20f\n",
-		    i+1, NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_INVOKE_TIME")))),
-		    NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_USE_SIZE")))),
-		    NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_TOTAL_SIZE")))),
-		    NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_TOTAL_OBJECTS")))),
-		    NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_TIME"))))*100);
-	    rb_str_concat(result, rb_str_new2(buf));
+	    rb_str_catf(result, "%1$5d %2$19.3f %3$20d %4$20d %5$20d %6$30.20f\n",
+			i+1, NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_INVOKE_TIME")))),
+			NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_USE_SIZE")))),
+			NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_TOTAL_SIZE")))),
+			NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_TOTAL_OBJECTS")))),
+			NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_TIME"))))*100);
 	}
 #if GC_PROFILE_MORE_DETAIL
 	rb_str_concat(result, rb_str_new2("\n\n"));
 	rb_str_concat(result, rb_str_new2("More detail.\n"));
 	rb_str_concat(result, rb_str_new2("Index Allocate Increase    Allocate Limit  Use Slot  Have Finalize             Mark Time(ms)            Sweep Time(ms)\n"));
-	for(i = 0; i < (int)RARRAY_LEN(record); i++) {
-	    memset(buf, 0, 1024);
+	for (i = 0; i < (int)RARRAY_LEN(record); i++) {
 	    VALUE r = RARRAY_PTR(record)[i];
-	    sprintf(buf, "%1$5d %2$17d %3$17d %4$9d %5$14s %6$25.20f %7$25.20f\n",
-		    i+1, NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("ALLOCATE_INCREASE")))),
-		    NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("ALLOCATE_LIMIT")))),
-		    NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_USE_SLOTS")))),
-		    rb_hash_aref(r, ID2SYM(rb_intern("HAVE_FINALIZE")))? "true" : "false",
-		    NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_MARK_TIME"))))*100,
-		    NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_SWEEP_TIME"))))*100);
-	    rb_str_concat(result, rb_str_new2(buf));
+	    rb_str_catf(result, "%1$5d %2$17d %3$17d %4$9d %5$14s %6$25.20f %7$25.20f\n",
+			i+1, NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("ALLOCATE_INCREASE")))),
+			NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("ALLOCATE_LIMIT")))),
+			NUM2INT(rb_hash_aref(r, ID2SYM(rb_intern("HEAP_USE_SLOTS")))),
+			rb_hash_aref(r, ID2SYM(rb_intern("HAVE_FINALIZE")))? "true" : "false",
+			NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_MARK_TIME"))))*100,
+			NUM2DBL(rb_hash_aref(r, ID2SYM(rb_intern("GC_SWEEP_TIME"))))*100);
 	}
 #endif
     }
+    else {
+	result = rb_str_new2("");
+    }
     return result;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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