ruby-prof 0.11.2-x86-mingw32 → 0.12.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CHANGES +27 -0
  2. data/README.rdoc +15 -15
  3. data/Rakefile +5 -0
  4. data/bin/ruby-prof +274 -265
  5. data/ext/ruby_prof/rp_call_info.c +33 -24
  6. data/ext/ruby_prof/rp_call_info.h +2 -1
  7. data/ext/ruby_prof/rp_measure.c +1 -1
  8. data/ext/ruby_prof/rp_measure.h +1 -1
  9. data/ext/ruby_prof/rp_measure_allocations.c +1 -1
  10. data/ext/ruby_prof/rp_measure_cpu_time.c +1 -1
  11. data/ext/ruby_prof/rp_measure_gc_runs.c +1 -1
  12. data/ext/ruby_prof/rp_measure_gc_time.c +1 -1
  13. data/ext/ruby_prof/rp_measure_memory.c +1 -1
  14. data/ext/ruby_prof/rp_measure_process_time.c +2 -2
  15. data/ext/ruby_prof/rp_measure_wall_time.c +2 -2
  16. data/ext/ruby_prof/rp_method.c +11 -24
  17. data/ext/ruby_prof/rp_method.h +2 -3
  18. data/ext/ruby_prof/rp_stack.c +55 -14
  19. data/ext/ruby_prof/rp_stack.h +10 -10
  20. data/ext/ruby_prof/rp_thread.c +30 -21
  21. data/ext/ruby_prof/rp_thread.h +3 -3
  22. data/ext/ruby_prof/ruby_prof.c +9 -88
  23. data/ext/ruby_prof/ruby_prof.h +1 -1
  24. data/ext/ruby_prof/vc/ruby_prof.sln +12 -6
  25. data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +2 -0
  26. data/ext/ruby_prof/vc/{ruby_prof.vcxproj → ruby_prof_19.vcxproj} +4 -1
  27. data/ext/ruby_prof/vc/ruby_prof_20.vcxproj +112 -0
  28. data/ext/ruby_prof/version.h +4 -4
  29. data/lib/1.8/ruby_prof.so +0 -0
  30. data/lib/1.9/ruby_prof.so +0 -0
  31. data/lib/2.0/ruby_prof.so +0 -0
  32. data/lib/ruby-prof.rb +1 -0
  33. data/lib/ruby-prof/call_info.rb +1 -1
  34. data/lib/ruby-prof/call_info_visitor.rb +4 -2
  35. data/lib/ruby-prof/compatibility.rb +13 -3
  36. data/lib/ruby-prof/method_info.rb +1 -1
  37. data/lib/ruby-prof/printers/call_info_printer.rb +1 -1
  38. data/lib/ruby-prof/printers/call_stack_printer.rb +3 -3
  39. data/lib/ruby-prof/printers/dot_printer.rb +2 -2
  40. data/lib/ruby-prof/printers/flat_printer.rb +4 -4
  41. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +2 -2
  42. data/lib/ruby-prof/printers/graph_html_printer.rb +3 -4
  43. data/lib/ruby-prof/printers/graph_printer.rb +15 -15
  44. data/lib/ruby-prof/profile.rb +1 -1
  45. data/lib/ruby-prof/rack.rb +0 -5
  46. data/lib/ruby-prof/thread.rb +22 -0
  47. data/ruby-prof.gemspec +2 -1
  48. data/test/basic_test.rb +77 -45
  49. data/test/call_info_test.rb +78 -0
  50. data/test/call_info_visitor_test.rb +1 -1
  51. data/test/dynamic_method_test.rb +14 -8
  52. data/test/measure_cpu_time_test.rb +23 -12
  53. data/test/measure_process_time_test.rb +21 -170
  54. data/test/measure_wall_time_test.rb +59 -13
  55. data/test/method_elimination_test.rb +30 -19
  56. data/test/pause_resume_test.rb +129 -22
  57. data/test/prime.rb +1 -2
  58. data/test/printers_test.rb +8 -17
  59. data/test/recursive_test.rb +6 -50
  60. data/test/test_helper.rb +30 -10
  61. data/test/test_suite.rb +1 -2
  62. metadata +23 -7
  63. data/test/bug_test.rb +0 -6
  64. data/test/gc_test.rb +0 -35
  65. data/test/pause_test.rb +0 -57
  66. data/test/prime_test.rb +0 -13
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "ruby_prof.h"
@@ -10,7 +10,6 @@ VALUE cCallInfo;
10
10
 
11
11
  // Forward declarations
12
12
  st_table * call_info_table_create();
13
- void call_info_table_free(st_table *table);
14
13
 
15
14
 
16
15
  /* ======= prof_call_info_t ========*/
@@ -31,9 +30,8 @@ prof_call_info_create(prof_method_t* method, prof_call_info_t* parent)
31
30
  result->line = 0;
32
31
  return result;
33
32
  }
34
-
35
33
  static void
36
- prof_call_info_free(prof_call_info_t *call_info)
34
+ prof_call_info_ruby_gc_free(prof_call_info_t *call_info)
37
35
  {
38
36
  /* Has this thread object been accessed by Ruby? If
39
37
  yes clean it up so to avoid a segmentation fault. */
@@ -44,8 +42,13 @@ prof_call_info_free(prof_call_info_t *call_info)
44
42
  RDATA(call_info->object)->dmark = NULL;
45
43
  }
46
44
  call_info->object = Qnil;
45
+ }
47
46
 
48
- call_info_table_free(call_info->call_infos);
47
+ static void
48
+ prof_call_info_free(prof_call_info_t *call_info)
49
+ {
50
+ prof_call_info_ruby_gc_free(call_info);
51
+ xfree(call_info->call_infos);
49
52
  xfree(call_info);
50
53
  }
51
54
 
@@ -53,10 +56,13 @@ static void
53
56
  prof_call_info_mark(prof_call_info_t *call_info)
54
57
  {
55
58
  if (call_info->object)
56
- rb_gc_mark(call_info->children);
59
+ rb_gc_mark(call_info->object);
57
60
 
58
61
  if (call_info->children)
59
62
  rb_gc_mark(call_info->children);
63
+
64
+ /* We don't mark the call info child table since that will be done
65
+ via the appropriate method */
60
66
  }
61
67
 
62
68
  VALUE
@@ -64,7 +70,7 @@ prof_call_info_wrap(prof_call_info_t *call_info)
64
70
  {
65
71
  if (call_info->object == Qnil)
66
72
  {
67
- call_info->object = Data_Wrap_Struct(cCallInfo, prof_call_info_mark, prof_call_info_free, call_info);
73
+ call_info->object = Data_Wrap_Struct(cCallInfo, prof_call_info_mark, prof_call_info_ruby_gc_free, call_info);
68
74
  }
69
75
  return call_info->object;
70
76
  }
@@ -89,20 +95,6 @@ call_info_table_create()
89
95
  return st_init_table(&type_method_hash);
90
96
  }
91
97
 
92
- /*static int
93
- call_info_table_free_iterator(st_data_t key, st_data_t value, st_data_t dummy)
94
- {
95
- prof_call_info_free((prof_call_info_t*)value);
96
- return ST_CONTINUE;
97
- }*/
98
-
99
- void
100
- call_info_table_free(st_table *table)
101
- {
102
- //st_foreach(table, call_info_table_free_iterator, 0);
103
- st_free_table(table);
104
- }
105
-
106
98
  size_t
107
99
  call_info_table_insert(st_table *table, const prof_method_key_t *key, prof_call_info_t *val)
108
100
  {
@@ -337,11 +329,29 @@ prof_call_infos_create()
337
329
  return result;
338
330
  }
339
331
 
332
+ void
333
+ prof_call_infos_mark(prof_call_infos_t *call_infos)
334
+ {
335
+ prof_call_info_t **call_info;
336
+
337
+ if (call_infos->object)
338
+ rb_gc_mark(call_infos->object);
339
+
340
+ for(call_info=call_infos->start; call_info<call_infos->ptr; call_info++)
341
+ {
342
+ prof_call_info_mark(*call_info);
343
+ }
344
+ }
345
+
340
346
  void
341
347
  prof_call_infos_free(prof_call_infos_t *call_infos)
342
348
  {
343
- xfree(call_infos->start);
344
- xfree(call_infos);
349
+ prof_call_info_t **call_info;
350
+
351
+ for(call_info=call_infos->start; call_info<call_infos->ptr; call_info++)
352
+ {
353
+ prof_call_info_free(*call_info);
354
+ }
345
355
  }
346
356
 
347
357
  void
@@ -375,7 +385,6 @@ prof_call_infos_wrap(prof_call_infos_t *call_infos)
375
385
  return call_infos->object;
376
386
  }
377
387
 
378
-
379
388
  void rp_init_call_info()
380
389
  {
381
390
  /* CallInfo */
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #ifndef __RP_CALL_INFO_H__
@@ -37,6 +37,7 @@ typedef struct prof_call_infos_t
37
37
 
38
38
  void rp_init_call_info(void);
39
39
  prof_call_infos_t* prof_call_infos_create();
40
+ void prof_call_infos_mark(prof_call_infos_t *call_infos);
40
41
  void prof_call_infos_free(prof_call_infos_t *call_infos);
41
42
  void prof_add_call_info(prof_call_infos_t *call_infos, prof_call_info_t *call_info);
42
43
  VALUE prof_call_infos_wrap(prof_call_infos_t *call_infos);
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "ruby_prof.h"
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #ifndef __RP_MEASUREMENT_H__
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  /* :nodoc: */
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "ruby_prof.h"
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  /* :nodoc: */
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  /* :nodoc: */
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  /* :nodoc: */
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "ruby_prof.h"
@@ -12,7 +12,7 @@ measure_process_time()
12
12
  #if defined(__linux__)
13
13
  struct timespec clock;
14
14
  clock_gettime(CLOCK_PROCESS_CPUTIME_ID , &clock);
15
- return (clock.tv_sec * 1000000000 + clock.tv_nsec) / 1000000000.0;
15
+ return clock.tv_sec + (clock.tv_nsec/1000000000.0);
16
16
  #elif defined(_win32)
17
17
  FILETIME createTime;
18
18
  FILETIME exitTime;
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  /* :nodoc: */
@@ -11,7 +11,7 @@ measure_wall_time()
11
11
  {
12
12
  struct timeval tv;
13
13
  gettimeofday(&tv, NULL);
14
- return (tv.tv_sec * 1000000 + tv.tv_usec) / 1000000.0;
14
+ return tv.tv_sec + (tv.tv_usec/1000000.0);
15
15
  }
16
16
 
17
17
  prof_measurer_t* prof_measurer_wall_time()
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "ruby_prof.h"
@@ -98,10 +98,12 @@ method_name(ID mid)
98
98
  {
99
99
  VALUE result;
100
100
 
101
- if (mid == ID_ALLOCATOR)
102
- result = rb_str_new2("allocate");
103
- else if (mid == 0)
101
+ if (mid == 0)
104
102
  result = rb_str_new2("[No method]");
103
+ #ifdef ID_ALLOCATOR
104
+ else if (mid == ID_ALLOCATOR)
105
+ result = rb_str_new2("allocate");
106
+ #endif
105
107
  else
106
108
  result = rb_String(ID2SYM(mid));
107
109
 
@@ -139,7 +141,6 @@ prof_method_create(VALUE klass, ID mid, const char* source_file, int line)
139
141
  prof_method_t *result = ALLOC(prof_method_t);
140
142
  result->object = Qnil;
141
143
  result->call_infos = prof_call_infos_create();
142
- result->call_infos2 = Qnil;
143
144
 
144
145
  result->key = ALLOC(prof_method_key_t);
145
146
  method_key(result->key, klass, mid);
@@ -188,6 +189,7 @@ prof_method_free(prof_method_t* method)
188
189
  {
189
190
  prof_method_ruby_gc_free(method);
190
191
  prof_call_infos_free(method->call_infos);
192
+ xfree(method->call_infos);
191
193
 
192
194
  xfree(method->key);
193
195
  method->key = NULL;
@@ -195,28 +197,13 @@ prof_method_free(prof_method_t* method)
195
197
  xfree(method);
196
198
  }
197
199
 
198
- /*static int
199
- mark_call_infos(st_data_t key, st_data_t value, st_data_t result)
200
- {
201
- prof_call_info_t *call_info = (prof_call_info_t *) value;
202
- prof_call_info_mark(call_info);
203
- return ST_CONTINUE;
204
- }
205
- */
206
-
207
200
  void
208
201
  prof_method_mark(prof_method_t *method)
209
202
  {
210
203
  if (method->object)
211
204
  rb_gc_mark(method->object);
212
205
 
213
- if (method->call_infos2)
214
- rb_gc_mark(method->call_infos2);
215
-
216
- if (method->call_infos->object)
217
- rb_gc_mark(method->call_infos->object);
218
-
219
- //st_foreach(method->call_info_table, mark_call_infos, NULL);
206
+ prof_call_infos_mark(method->call_infos);
220
207
  }
221
208
 
222
209
  VALUE
@@ -409,11 +396,11 @@ static VALUE
409
396
  prof_method_call_infos(VALUE self)
410
397
  {
411
398
  prof_method_t *method = get_prof_method(self);
412
- if (method->call_infos2 == Qnil)
399
+ if (method->call_infos->object == Qnil)
413
400
  {
414
- method->call_infos2 = prof_call_infos_wrap(method->call_infos);
401
+ method->call_infos->object = prof_call_infos_wrap(method->call_infos);
415
402
  }
416
- return method->call_infos2;
403
+ return method->call_infos->object;
417
404
  }
418
405
 
419
406
  void rp_init_method_info()
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #ifndef __RP_METHOD_INFO__
@@ -31,9 +31,8 @@ typedef struct
31
31
  prof_method_key_t *key; /* Method key */
32
32
  const char *source_file; /* The method's source file */
33
33
  int line; /* The method's line number. */
34
- struct prof_call_infos_t *call_infos; /* Call info objects for this method */
34
+ struct prof_call_infos_t *call_infos; /* Call info objects for this method */
35
35
  VALUE object; /* Cached ruby object */
36
- VALUE call_infos2; /* Cached array of RubyProf::CallInfo */
37
36
  } prof_method_t;
38
37
 
39
38
  void rp_init_method_info(void);
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #include "rp_stack.h"
@@ -6,16 +6,16 @@
6
6
  #define INITIAL_STACK_SIZE 8
7
7
 
8
8
  void
9
- frame_pause(prof_frame_t *frame, double current_measurement)
9
+ prof_frame_pause(prof_frame_t *frame, double current_measurement)
10
10
  {
11
- if (frame && frame_is_unpaused(frame))
11
+ if (frame && prof_frame_is_unpaused(frame))
12
12
  frame->pause_time = current_measurement;
13
13
  }
14
14
 
15
15
  void
16
- frame_unpause(prof_frame_t *frame, double current_measurement)
16
+ prof_frame_unpause(prof_frame_t *frame, double current_measurement)
17
17
  {
18
- if (frame && frame_is_paused(frame)) {
18
+ if (frame && prof_frame_is_paused(frame)) {
19
19
  frame->dead_time += (current_measurement - frame->pause_time);
20
20
  frame->pause_time = -1;
21
21
  }
@@ -25,7 +25,7 @@ frame_unpause(prof_frame_t *frame, double current_measurement)
25
25
  /* Creates a stack of prof_frame_t to keep track
26
26
  of timings for active methods. */
27
27
  prof_stack_t *
28
- stack_create()
28
+ prof_stack_create()
29
29
  {
30
30
  prof_stack_t *stack = ALLOC(prof_stack_t);
31
31
  stack->start = ALLOC_N(prof_frame_t, INITIAL_STACK_SIZE);
@@ -36,14 +36,14 @@ stack_create()
36
36
  }
37
37
 
38
38
  void
39
- stack_free(prof_stack_t *stack)
39
+ prof_stack_free(prof_stack_t *stack)
40
40
  {
41
41
  xfree(stack->start);
42
42
  xfree(stack);
43
43
  }
44
44
 
45
45
  prof_frame_t *
46
- stack_push(prof_stack_t *stack)
46
+ prof_stack_push(prof_stack_t *stack, double measurement)
47
47
  {
48
48
  prof_frame_t* result = NULL;
49
49
 
@@ -64,7 +64,9 @@ stack_push(prof_stack_t *stack)
64
64
  result->child_time = 0;
65
65
  result->switch_time = 0;
66
66
  result->wait_time = 0;
67
+ result->dead_time = 0;
67
68
  result->depth = (int)(stack->ptr - stack->start); // shortening of 64 bit into 32
69
+ result->start_time = measurement;
68
70
 
69
71
  // Increment the stack ptr for next time
70
72
  stack->ptr++;
@@ -74,16 +76,55 @@ stack_push(prof_stack_t *stack)
74
76
  }
75
77
 
76
78
  prof_frame_t *
77
- stack_pop(prof_stack_t *stack)
79
+ prof_stack_pop(prof_stack_t *stack, double measurement)
78
80
  {
79
- if (stack->ptr == stack->start)
80
- return NULL;
81
- else
82
- return --stack->ptr;
81
+ prof_frame_t *frame = NULL;
82
+ prof_frame_t* parent_frame = NULL;
83
+ prof_call_info_t *call_info;
84
+
85
+ double total_time;
86
+ double self_time;
87
+ #ifdef _MSC_VER
88
+ BOOL frame_paused;
89
+ #else
90
+ _Bool frame_paused;
91
+ #endif
92
+
93
+ /* Frame can be null. This can happen if RubProf.start is called from
94
+ a method that exits. And it can happen if an exception is raised
95
+ in code that is being profiled and the stack unwinds (RubyProf is
96
+ not notified of that by the ruby runtime. */
97
+ if (stack->ptr == stack->start)
98
+ return NULL;
99
+
100
+ frame = --stack->ptr;
101
+
102
+ /* Calculate the total time this method took */
103
+ prof_frame_unpause(frame, measurement);
104
+ total_time = measurement - frame->start_time - frame->dead_time;
105
+ self_time = total_time - frame->child_time - frame->wait_time;
106
+
107
+ /* Update information about the current method */
108
+ call_info = frame->call_info;
109
+ call_info->called++;
110
+ call_info->total_time += total_time;
111
+ call_info->self_time += self_time;
112
+ call_info->wait_time += frame->wait_time;
113
+
114
+ parent_frame = prof_stack_peek(stack);
115
+ if (parent_frame)
116
+ {
117
+ parent_frame->child_time += total_time;
118
+ parent_frame->dead_time += frame->dead_time;
119
+
120
+ call_info->line = parent_frame->line;
121
+ }
122
+
123
+ return frame;
83
124
  }
84
125
 
85
126
  prof_frame_t *
86
- stack_peek(prof_stack_t *stack)
127
+ prof_stack_peek(prof_stack_t *stack)
87
128
  {
88
129
  if (stack->ptr == stack->start)
89
130
  return NULL;
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2005-2011 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
1
+ /* Copyright (C) 2005-2013 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
2
  Please see the LICENSE file for copyright and distribution information */
3
3
 
4
4
  #ifndef __RP_STACK__
@@ -28,10 +28,10 @@ typedef struct
28
28
  unsigned int line;
29
29
  } prof_frame_t;
30
30
 
31
- #define frame_is_paused(f) (f->pause_time >= 0)
32
- #define frame_is_unpaused(f) (f->pause_time < 0)
33
- void frame_pause(prof_frame_t*, double current_measurement);
34
- void frame_unpause(prof_frame_t*, double current_measurement);
31
+ #define prof_frame_is_paused(f) (f->pause_time >= 0)
32
+ #define prof_frame_is_unpaused(f) (f->pause_time < 0)
33
+ void prof_frame_pause(prof_frame_t*, double current_measurement);
34
+ void prof_frame_unpause(prof_frame_t*, double current_measurement);
35
35
 
36
36
 
37
37
  /* Current stack of active methods.*/
@@ -42,10 +42,10 @@ typedef struct
42
42
  prof_frame_t *ptr;
43
43
  } prof_stack_t;
44
44
 
45
- prof_stack_t * stack_create();
46
- void stack_free(prof_stack_t *stack);
47
- prof_frame_t * stack_push(prof_stack_t *stack);
48
- prof_frame_t * stack_pop(prof_stack_t *stack);
49
- prof_frame_t * stack_peek(prof_stack_t *stack);
45
+ prof_stack_t * prof_stack_create();
46
+ void prof_stack_free(prof_stack_t *stack);
47
+ prof_frame_t * prof_stack_push(prof_stack_t *stack, double measurement);
48
+ prof_frame_t * prof_stack_pop(prof_stack_t *stack, double measurement);
49
+ prof_frame_t * prof_stack_peek(prof_stack_t *stack);
50
50
 
51
51
  #endif //__RP_STACK__