Module: RubyProf
- Defined in:
- lib/ruby-prof.rb,
lib/ruby-prof/profiletask.rb,
lib/ruby-prof/flat_printer.rb,
lib/ruby-prof/graph_printer.rb,
lib/ruby-prof/graph_html_printer.rb,
ext/ruby_prof.c
Defined Under Namespace
Classes: CallInfo, FlatPrinter, GraphHtmlPrinter, GraphPrinter, MethodInfo, ProfileTask, Result
Constant Summary collapse
- VERSION =
rb_str_new2(PROF_VERSION)
- PROCESS_TIME =
INT2NUM(CLOCK_MODE_PROCESS)
- WALL_TIME =
INT2NUM(CLOCK_MODE_WALL)
- CPU_TIME =
INT2NUM(CLOCK_MODE_CPU)
Class Method Summary collapse
-
.clock_mode ⇒ Object
Returns the current clock mode.
-
.clock_mode= ⇒ Object
Specifies the method ruby-prof uses to measure time.
-
.cpu_frequency ⇒ Integer
Returns the cpu’s frequency.
-
.cpu_frequency= ⇒ Object
Sets the cpu’s frequency.
-
.figure_clock_mode ⇒ Object
See if the user specified the clock mode via the RUBY_PROF_CLOCK_MODE environment variable.
-
.profile { ... } ⇒ RubyProf::Result
Profiles the specified block and returns a RubyProf::Result object.
-
.start ⇒ Object
Starts recording profile data.
-
.stop ⇒ RubyProf::Result
Stops collecting profile data and returns a RubyProf::Result object.
Class Method Details
.clock_mode ⇒ Object
Returns the current clock mode. Valid values include: RubyProf::PROCESS_TIME - Measure process time. This is default. It is implemented using the clock function in the C Runtime library. RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and GetLocalTime on Windows RubyProf::CPU_TIME - Measure time using the CPU clock counter. This mode is only supported on Pentium or PowerPC platforms.
1246 1247 1248 1249 1250 |
# File 'ext/ruby_prof.c', line 1246 static VALUE prof_get_clock_mode(VALUE self) { return INT2NUM(clock_mode); } |
.clock_mode= ⇒ Object
Specifies the method ruby-prof uses to measure time. Valid values include: RubyProf::PROCESS_TIME - Measure process time. This is default. It is implemented using the clock function in the C Runtime library. RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and GetLocalTime on Windows RubyProf::CPU_TIME - Measure time using the CPU clock counter. This mode is only supported on Pentium or PowerPC platforms.
1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 |
# File 'ext/ruby_prof.c', line 1259 static VALUE prof_set_clock_mode(VALUE self, VALUE val) { int mode = NUM2INT(val); if (threads_tbl) { rb_raise(rb_eRuntimeError, "can't set clock_mode while profiling"); } switch (mode) { case CLOCK_MODE_PROCESS: get_clock = clock_get_clock; clock2sec = clock_clock2sec; break; case CLOCK_MODE_WALL: get_clock = gettimeofday_get_clock; clock2sec = gettimeofday_clock2sec; break; #ifdef CLOCK_MODE_CPU case CLOCK_MODE_CPU: if (cpu_frequency == 0) cpu_frequency = get_cpu_frequency(); get_clock = cpu_get_clock; clock2sec = cpu_clock2sec; break; #endif default: rb_raise(rb_eArgError, "invalid mode: %d", mode); break; } clock_mode = mode; return val; } |
.cpu_frequency ⇒ Integer
Returns the cpu’s frequency. This value is needed when using the cpu RubyProf::clock_mode.
228 229 230 231 232 |
# File 'ext/ruby_prof.c', line 228 static VALUE prof_get_cpu_frequency(VALUE self) { return rb_float_new(cpu_frequency); } |
.cpu_frequency= ⇒ Object
Sets the cpu’s frequency. This value is needed when using the cpu RubyProf::clock_mode.
239 240 241 242 243 244 |
# File 'ext/ruby_prof.c', line 239 static VALUE prof_set_cpu_freqeuncy(VALUE self, VALUE val) { cpu_frequency = NUM2DBL(val); return val; } |
.figure_clock_mode ⇒ Object
See if the user specified the clock mode via the RUBY_PROF_CLOCK_MODE environment variable
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ruby-prof.rb', line 10 def self.figure_clock_mode case ENV["RUBY_PROF_CLOCK_MODE"] when "wall" || "wall_time" RubyProf.clock_mode = RubyProf::WALL_TIME when "cpu" || "cpu_time" if ENV.key?("RUBY_PROF_CPU_FREQUENCY") RubyProf.cpu_frequency = ENV["RUBY_PROF_CPU_FREQUENCY"].to_f else begin open("/proc/cpuinfo") do |f| f.each_line do |line| s = line.slice(/cpu MHz\s*:\s*(.*)/, 1) if s RubyProf.cpu_frequency = s.to_f * 1000000 break end end end rescue Errno::ENOENT end end RubyProf.clock_mode = RubyProf::CPU_TIME else RubyProf.clock_mode = RubyProf::PROCESS_TIME end end |
.profile { ... } ⇒ RubyProf::Result
Profiles the specified block and returns a RubyProf::Result object.
1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 |
# File 'ext/ruby_prof.c', line 1360 static VALUE prof_profile(VALUE self) { if (!rb_block_given_p()) { rb_raise(rb_eArgError, "A block must be provided to the profile method."); } prof_start(self); rb_yield(Qnil); return prof_stop(self); } |
.start ⇒ Object
Starts recording profile data.
1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 |
# File 'ext/ruby_prof.c', line 1301 static VALUE prof_start(VALUE self) { toplevel_id = rb_intern("toplevel"); toplevel_key = method_key(Qnil, toplevel_id); if (threads_tbl != NULL) { rb_raise(rb_eRuntimeError, "RubyProf.start was already called"); } /* Setup globals */ class_tbl = rb_hash_new(); threads_tbl = threads_table_create(); rb_add_event_hook(prof_event_hook, RUBY_EVENT_CALL | RUBY_EVENT_RETURN | RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN); return Qnil; } |
.stop ⇒ RubyProf::Result
Stops collecting profile data and returns a RubyProf::Result object.
1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 |
# File 'ext/ruby_prof.c', line 1328 static VALUE prof_stop(VALUE self) { VALUE result = Qnil; if (threads_tbl == NULL) { rb_raise(rb_eRuntimeError, "RubyProf.start is not called yet"); } /* Now unregister from event */ rb_remove_event_hook(prof_event_hook); /* Create the result */ result = prof_result_new(); /* Free threads table */ free_threads(threads_tbl); threads_table_free(threads_tbl); threads_tbl = NULL; /* Free reference to class_tbl */ class_tbl = Qnil; return result; } |