Index: dtrace/timestamps.d =================================================================== diff -u -rb14118b7068e3c1e903b9a516eef0c86101b24d9 -rcbd6b858b9324c125b8b6aad66c85d3482bb8bd4 --- dtrace/timestamps.d (.../timestamps.d) (revision b14118b7068e3c1e903b9a516eef0c86101b24d9) +++ dtrace/timestamps.d (.../timestamps.d) (revision cbd6b858b9324c125b8b6aad66c85d3482bb8bd4) @@ -1,11 +1,30 @@ -nsf*:::method-entry -{ +/* + * Measure time btween method-entry and method-returns + * + * Display execution flow between + * ::nsf::configure dtrace on + * and + * ::nsf::configure dtrace off + * + */ + +nsf*:::configure-probe /!self->tracing && copyinstr(arg0) == "dtrace" / { + self->tracing = (arg1 && copyinstr(arg1) == "on") ? 1 : 0; +} + +nsf*:::configure-probe /self->tracing && copyinstr(arg0) == "dtrace" / { + self->tracing = (arg1 && copyinstr(arg1) == "off") ? 0 : 1; +} + +nsf*:::method-entry /self->tracing/ { self->start = timestamp; } -nsf*:::method-return -/self->start/ -{ +nsf*:::method-return /self->tracing && self->start/ { @[copyinstr(arg0), copyinstr(arg1), copyinstr(arg2)] = avg(timestamp - self->start); self->start = 0; -} \ No newline at end of file +} + +END { + printa("\n%-35s %-35s %-40s = %@d", @); +}