From 35b6abbca2cb419aae599d04e5855e33a97935dd Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 11 Aug 2008 11:11:27 +0000 Subject: * gc.c (getrusage_time): works only if RUSAGE_SELF is defined right now. * gc.c (gc_profile_result): C99. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 118c49ebd6..d97ecfbc45 100644 --- a/gc.c +++ b/gc.c @@ -113,11 +113,15 @@ typedef struct gc_profile_record { 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 @@ getrusage_time(void) #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 @@ gc_profile_result(void) { 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; } -- cgit v1.2.3