Forum: Ruby-dev Plan of set_trace_func

Posted by SASADA Koichi (Guest)
on 2012-07-04 10:43
(Received via mailing list)
$B!!$5$5$@$G$9!%(B

$B!!:G6a!$(B[ruby-core:45949] (*1) $B4XO"$G(B trace_func 
$B2s$j$N<BAu$r8+$F$$$k$N(B
$B$G$9$,!$?'!9$H@-G=E*$K$$$1$F$$$J$$5$$,$9$k$N$G!$%a%b$r=q$$$F$*$-$^$9!%(B

*1: [ruby-core:45949] Re: [ruby-trunk - Feature #6649] Add new
set_trace_func events "b-call", "b-return"

$B%Y%s%A%^!<%/!'(B
max = 10_000_000
require 'benchmark'
Benchmark.bm{|x|
  x.report{
    max.times{
      a = 1
      b = 2
    }
  }
  set_null_profiler
  x.report{
    max.times{
      a = 1
      b = 2
    }
  }
}

# C code
rb_define_global_function("set_null_profiler", set_null_profiler, 0);

static void
null_func(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE
klass)
{

}

static VALUE
set_null_profiler(VALUE self)
{
    rb_add_event_hook(null_func, RUBY_EVENT_LINE, 0);
    return Qnil;
}

$B7k2L!'(B

       user     system      total        real
   4.640000   0.140000   4.780000 (  4.788095)  #0) $B2?$bL5$7(B
  10.720000   0.020000  10.740000 ( 10.740693)  #1) null trace $B$"$j(B
   6.810000   0.000000   6.810000 (  6.816267)  #2) n/trace w/o setjmp
   6.260000   0.010000   6.270000 (  6.265966)  #3) w/o exec_event_hooks
   5.430000   0.000000   5.430000 (  5.426709)  #4) w/o thread_exec_e...

$B"((BVirtual box $B>e$N$F$-$H!<$JB,Dj$G$9!%(B


$B!!8=:_!$(Btrace $B$,Av$k$H$-!$(B

rb_threadptr_exec_event_hooks()
-> (a) thread_suppress_tracing()
-> (b) thread_exec_event_hooks()
-> (c) hooks $B$N?t$@$1(B exec_event_hooks() $B$r7+$jJV$7(B

$B$N=g$G<B9T$5$l$^$9!%(B

$B!!(B(a) $B$G$O!$(Btrace $BCf$K(B trace 
$B$,Av$i$J$$$h$&$K!$(Bth->tracing $B%U%i%0$r@_Dj(B
$B$7$F$$$^$9!%$=$N$?$a$K!$(BPUSH_TAG() 
$B$G<B9T$7$F$$$^$9!JNc30$,H/@8$7$?(B
$B$i!$(Bth->tracing $B%U%i%0$r85$KLa$7$FNc30$r>e$KEAHB!K!%(B

$B!!(B(b) $B$G$O!$$J$s$+$F$-$H!<$K%U%i%0$r%;%C%H$7$F!$I,MW$J(B hook 
$B4X?t$rA4It8F(B
$B$S=P$7$F$$$^$9!%$3$l$,(B (c) $B$G$9!%(B

$B!!Nc$($P!$%W%m%U%!%$%i$G$d$j$=$&$J!V%$%Y%s%H$K1~$8$?%+%&%s%?$rA}8:$9$k!W(B
$B$H$$$&=hM}$r$9$k>l9g$O!$:FF~$j$J$I$O$7$=$&$K$J$$$N$G!$(B(a) 
$B$G$N=hM}$OITMW(B
$B$G$9!%$^$?!$(B(b) 
$B$N!$$J$s$+$$$m$s$J%U%i%0$N=hM}$b!$B?J,ITMW$G$9!%$G!$$=$N(B
$BJU$rA4It:o$C$F!$$@$$$?$$$3$s$J$U$&$K$J$k$@$m$&$J!$$H7W;;$7$?$N$,(B (4) 
$B$K(B
$B$J$j$^$9!%(B(4) $B$N>l9g!$$=$b$=$b(B hook 
$B4X?t$r8F$s$G$$$J$$$N$G%U%'%"$8$c$J$$(B
$B$s$G$9$,!$$^$!!$M>7W$J=hM}$r$O$V$$$?$i!$$@$$$?$$$3$s$J$b$s$8$c$J$$$+$J$!(B
$B$H;W$C$F$$$^$9!%2?$b$7$J$$;~(B (0) 
$B$h$j$O!$$=$l$J$j$KCY$$$G$9$,!$8=>u$N;~(B
$B4V(B (1) $B$O(B 2 
$BG\0J>e;~4V$,$+$+$C$F$$$^$9$N$G!$$=$l$h$j$O%^%7$K$J$k$s$8$c$J(B
$B$$$+$H!%(B

$B!!$^$?!$(Bid $B$d$i(B klass 
$B$d$i$r!$$3$N%U%m!<$G;}$A2s$C$F$$$k$s$G$9$,!$<B$O(B
cfp 
$B$rEO$7$F$"$2$F!$I,MW$K$J$C$?$i$=$3$+$i7W;;$9$k!$$H$$$&$h$&$K$7$?$[$&(B
$B$,%H!<%?%k$N%3%9%H$ODc$$$s$8$c$J$$$+$J!$$H;W$C$F$$$^$9!%(B

$B!!$H$$$&$o$1$G!$Am9g$7$^$9$H!$(B

(1) $B:FF~$j$7$J$$$h$&$K$9$k=hM}$J$I$r>J$$$?%o%$%k%I$J(B hook 
$B$,EPO?$G$-$k$h(B
$B$&$K$9$k(B
(2) id, klass $B$J$I$OEO$5$:!$(Bcfp 
$B$rEO$7$F!$$=$3$+$i7W;;$9$k$h$&$K$9$k(B
(3) $B:FF~$j$J$I$r$9$k$h$&$J2aJ]8n$J(B hook $B$rEPO?$G$-$k$h$&$K$9$k(B
    $B$3$l$O!$(B(1) $B$N>e$K8_49@-$N$?$a$K:n$k!%(B
    $B8_49@-$N$?$a!$0z?t$J$I$b=>MhDL$jEO$5$l$k!%(B

$B$F$J$h$&$K!$<jD>$7$7$h$&$H;W$$$^$9!%(B2.0 $B$^$G$K!%(B

$B!!0U<1$N9b$$%W%m%U%!%$%i!&%G%P%C%,$J$I$O(B (1) 
$B$r;H$($k$h$&$K$G$-$k$h$&$K(B
$B$7$h$&$H;W$$$^$9!%(B
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.