ruby-prof 1.7.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +112 -178
  3. data/README.md +5 -5
  4. data/bin/ruby-prof +1 -4
  5. data/docs/advanced-usage.md +132 -0
  6. data/docs/alternatives.md +98 -0
  7. data/docs/architecture.md +122 -0
  8. data/docs/best-practices.md +27 -0
  9. data/docs/getting-started.md +130 -0
  10. data/docs/history.md +11 -0
  11. data/docs/index.md +45 -0
  12. data/docs/profiling-rails.md +64 -0
  13. data/docs/public/examples/example.rb +33 -0
  14. data/docs/public/examples/generate_reports.rb +92 -0
  15. data/docs/public/examples/reports/call_info.txt +27 -0
  16. data/docs/public/examples/reports/call_stack.html +835 -0
  17. data/docs/public/examples/reports/callgrind.out +150 -0
  18. data/docs/public/examples/reports/flame_graph.html +408 -0
  19. data/docs/public/examples/reports/flat.txt +45 -0
  20. data/docs/public/examples/reports/graph.dot +129 -0
  21. data/docs/public/examples/reports/graph.html +1319 -0
  22. data/docs/public/examples/reports/graph.txt +100 -0
  23. data/docs/public/examples/reports/graphviz_viewer.html +1 -0
  24. data/docs/public/images/call_stack.png +0 -0
  25. data/docs/public/images/class_diagram.png +0 -0
  26. data/docs/public/images/dot_printer.png +0 -0
  27. data/docs/public/images/flame_graph.png +0 -0
  28. data/docs/public/images/flat.png +0 -0
  29. data/docs/public/images/graph.png +0 -0
  30. data/docs/public/images/graph_html.png +0 -0
  31. data/docs/public/images/ruby-prof-logo.svg +1 -0
  32. data/docs/reports.md +150 -0
  33. data/docs/stylesheets/extra.css +80 -0
  34. data/ext/ruby_prof/rp_allocation.c +0 -15
  35. data/ext/ruby_prof/rp_allocation.h +29 -33
  36. data/ext/ruby_prof/rp_call_tree.c +3 -0
  37. data/ext/ruby_prof/rp_call_tree.h +1 -4
  38. data/ext/ruby_prof/rp_call_trees.h +1 -4
  39. data/ext/ruby_prof/rp_measurement.c +0 -5
  40. data/ext/ruby_prof/rp_measurement.h +49 -53
  41. data/ext/ruby_prof/rp_method.c +3 -0
  42. data/ext/ruby_prof/rp_method.h +1 -4
  43. data/ext/ruby_prof/rp_profile.c +1 -1
  44. data/ext/ruby_prof/rp_profile.h +1 -5
  45. data/ext/ruby_prof/rp_stack.h +50 -53
  46. data/ext/ruby_prof/rp_thread.h +1 -4
  47. data/ext/ruby_prof/ruby_prof.h +1 -4
  48. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  49. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  50. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  51. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  52. data/lib/ruby-prof/call_tree.rb +57 -57
  53. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  54. data/lib/ruby-prof/measurement.rb +17 -17
  55. data/lib/ruby-prof/printers/abstract_printer.rb +19 -33
  56. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  57. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  58. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  59. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  60. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  61. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  62. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  63. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  64. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  65. data/lib/ruby-prof/profile.rb +13 -0
  66. data/lib/ruby-prof/rack.rb +114 -105
  67. data/lib/ruby-prof/task.rb +147 -147
  68. data/lib/ruby-prof/thread.rb +20 -20
  69. data/lib/ruby-prof/version.rb +1 -1
  70. data/lib/ruby-prof.rb +50 -52
  71. data/lib/unprof.rb +10 -10
  72. data/ruby-prof.gemspec +5 -5
  73. data/test/abstract_printer_test.rb +25 -27
  74. data/test/alias_test.rb +203 -117
  75. data/test/call_tree_builder.rb +126 -126
  76. data/test/call_tree_visitor_test.rb +27 -27
  77. data/test/call_trees_test.rb +66 -66
  78. data/test/duplicate_names_test.rb +32 -32
  79. data/test/dynamic_method_test.rb +50 -50
  80. data/test/exceptions_test.rb +24 -24
  81. data/test/exclude_threads_test.rb +48 -48
  82. data/test/fiber_test.rb +72 -72
  83. data/test/inverse_call_tree_test.rb +174 -174
  84. data/test/line_number_test.rb +138 -1
  85. data/test/marshal_test.rb +144 -145
  86. data/test/measure_allocations.rb +26 -26
  87. data/test/measure_allocations_test.rb +340 -1
  88. data/test/measure_process_time_test.rb +3098 -3142
  89. data/test/measure_times.rb +56 -56
  90. data/test/measure_wall_time_test.rb +511 -372
  91. data/test/measurement_test.rb +82 -82
  92. data/test/merge_test.rb +48 -48
  93. data/test/multi_printer_test.rb +52 -66
  94. data/test/no_method_class_test.rb +15 -15
  95. data/test/pause_resume_test.rb +171 -171
  96. data/test/prime.rb +54 -54
  97. data/test/prime_script.rb +5 -5
  98. data/test/printer_call_stack_test.rb +28 -27
  99. data/test/printer_call_tree_test.rb +30 -30
  100. data/test/printer_flame_graph_test.rb +82 -0
  101. data/test/printer_flat_test.rb +99 -99
  102. data/test/printer_graph_html_test.rb +62 -59
  103. data/test/printer_graph_test.rb +42 -40
  104. data/test/printers_test.rb +28 -44
  105. data/test/printing_recursive_graph_test.rb +81 -81
  106. data/test/profile_test.rb +101 -101
  107. data/test/rack_test.rb +103 -93
  108. data/test/recursive_test.rb +139 -139
  109. data/test/scheduler.rb +4 -0
  110. data/test/singleton_test.rb +39 -38
  111. data/test/stack_printer_test.rb +61 -61
  112. data/test/start_stop_test.rb +106 -106
  113. data/test/test_helper.rb +4 -0
  114. data/test/thread_test.rb +29 -29
  115. data/test/unique_call_path_test.rb +123 -123
  116. data/test/yarv_test.rb +56 -56
  117. metadata +53 -11
  118. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  119. data/lib/ruby-prof/compatibility.rb +0 -113
  120. data/test/compatibility_test.rb +0 -49
  121. data/test/measure_memory_test.rb +0 -1193
@@ -1,53 +1,49 @@
1
- /* Copyright (C) 2005-2019 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
- Please see the LICENSE file for copyright and distribution information */
3
-
4
- #ifndef __rp_measurementMENT_H__
5
- #define __rp_measurementMENT_H__
6
-
7
- #include "ruby_prof.h"
8
-
9
- extern VALUE mMeasure;
10
-
11
- typedef double (*get_measurement)(rb_trace_arg_t* trace_arg);
12
-
13
- typedef enum
14
- {
15
- MEASURE_WALL_TIME,
16
- MEASURE_PROCESS_TIME,
17
- MEASURE_ALLOCATIONS,
18
- MEASURE_MEMORY
19
- } prof_measure_mode_t;
20
-
21
- typedef struct prof_measurer_t
22
- {
23
- get_measurement measure;
24
- prof_measure_mode_t mode;
25
- double multiplier;
26
- bool track_allocations;
27
- } prof_measurer_t;
28
-
29
- /* Callers and callee information for a method. */
30
- typedef struct prof_measurement_t
31
- {
32
- prof_owner_t owner;
33
- double total_time;
34
- double self_time;
35
- double wait_time;
36
- int called;
37
- VALUE object;
38
- } prof_measurement_t;
39
-
40
- prof_measurer_t* prof_measurer_create(prof_measure_mode_t measure, bool track_allocations);
41
- double prof_measure(prof_measurer_t* measurer, rb_trace_arg_t* trace_arg);
42
-
43
- prof_measurement_t* prof_measurement_create(void);
44
- prof_measurement_t* prof_measurement_copy(prof_measurement_t* other);
45
- void prof_measurement_free(prof_measurement_t* measurement);
46
- VALUE prof_measurement_wrap(prof_measurement_t* measurement);
47
- prof_measurement_t* prof_get_measurement(VALUE self);
48
- void prof_measurement_mark(void* data);
49
- void prof_measurement_merge_internal(prof_measurement_t* destination, prof_measurement_t* other);
50
-
51
- void rp_init_measure(void);
52
-
53
- #endif //__rp_measurementMENT_H__
1
+ /* Copyright (C) 2005-2019 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
+ Please see the LICENSE file for copyright and distribution information */
3
+
4
+ #pragma once
5
+
6
+ #include "ruby_prof.h"
7
+
8
+ extern VALUE mMeasure;
9
+
10
+ typedef double (*get_measurement)(rb_trace_arg_t* trace_arg);
11
+
12
+ typedef enum
13
+ {
14
+ MEASURE_WALL_TIME,
15
+ MEASURE_PROCESS_TIME,
16
+ MEASURE_ALLOCATIONS
17
+ } prof_measure_mode_t;
18
+
19
+ typedef struct prof_measurer_t
20
+ {
21
+ get_measurement measure;
22
+ prof_measure_mode_t mode;
23
+ double multiplier;
24
+ bool track_allocations;
25
+ } prof_measurer_t;
26
+
27
+ /* Callers and callee information for a method. */
28
+ typedef struct prof_measurement_t
29
+ {
30
+ prof_owner_t owner;
31
+ double total_time;
32
+ double self_time;
33
+ double wait_time;
34
+ int called;
35
+ VALUE object;
36
+ } prof_measurement_t;
37
+
38
+ prof_measurer_t* prof_measurer_create(prof_measure_mode_t measure, bool track_allocations);
39
+ double prof_measure(prof_measurer_t* measurer, rb_trace_arg_t* trace_arg);
40
+
41
+ prof_measurement_t* prof_measurement_create(void);
42
+ prof_measurement_t* prof_measurement_copy(prof_measurement_t* other);
43
+ void prof_measurement_free(prof_measurement_t* measurement);
44
+ VALUE prof_measurement_wrap(prof_measurement_t* measurement);
45
+ prof_measurement_t* prof_get_measurement(VALUE self);
46
+ void prof_measurement_mark(void* data);
47
+ void prof_measurement_merge_internal(prof_measurement_t* destination, prof_measurement_t* other);
48
+
49
+ void rp_init_measure(void);
@@ -157,6 +157,9 @@ prof_method_t* prof_method_create(struct prof_profile_t* profile, VALUE klass, V
157
157
  prof_method_t* prof_method_copy(prof_method_t* other)
158
158
  {
159
159
  prof_method_t* result = prof_method_create(other->profile, other->klass, other->method_name, other->source_file, other->source_line);
160
+
161
+ // Free the measurement created by prof_method_create before replacing it with the copy
162
+ prof_measurement_free(result->measurement);
160
163
  result->measurement = prof_measurement_copy(other->measurement);
161
164
 
162
165
  return result;
@@ -1,8 +1,7 @@
1
1
  /* Copyright (C) 2005-2019 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
- #ifndef __RP_METHOD_INFO__
5
- #define __RP_METHOD_INFO__
4
+ #pragma once
6
5
 
7
6
  #include "ruby_prof.h"
8
7
  #include "rp_measurement.h"
@@ -62,5 +61,3 @@ void prof_method_mark(void* data);
62
61
 
63
62
  VALUE resolve_klass(VALUE klass, unsigned int* klass_flags);
64
63
  VALUE resolve_klass_name(VALUE klass, unsigned int* klass_flags);
65
-
66
- #endif //__RP_METHOD_INFO__
@@ -186,7 +186,7 @@ static void prof_trace(prof_profile_t* profile, rb_trace_arg_t* trace_arg, doubl
186
186
  const char* source_file_char = (source_file != Qnil ? StringValuePtr(source_file) : "");
187
187
 
188
188
  fprintf(trace_file, "%2lu:%2f %-8s %s#%s %s:%2d\n",
189
- FIX2ULONG(fiber), (double)measurement,
189
+ NUM2ULONG(rb_obj_id(fiber)), (double)measurement,
190
190
  event_name, class_name, method_name_char, source_file_char, source_line);
191
191
  fflush(trace_file);
192
192
  last_fiber = fiber;
@@ -1,8 +1,7 @@
1
1
  /* Copyright (C) 2005-2019 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
- #ifndef __RP_PROFILE_H__
5
- #define __RP_PROFILE_H__
4
+ #pragma once
6
5
 
7
6
  #include "ruby_prof.h"
8
7
  #include "rp_measurement.h"
@@ -31,6 +30,3 @@ typedef struct prof_profile_t
31
30
 
32
31
  void rp_init_profile(void);
33
32
  prof_profile_t* prof_get_profile(VALUE self);
34
-
35
-
36
- #endif //__RP_PROFILE_H__
@@ -1,53 +1,50 @@
1
- /* Copyright (C) 2005-2019 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
- Please see the LICENSE file for copyright and distribution information */
3
-
4
- #ifndef __RP_STACK__
5
- #define __RP_STACK__
6
-
7
- #include "ruby_prof.h"
8
- #include "rp_call_tree.h"
9
-
10
- /* Temporary object that maintains profiling information
11
- for active methods. They are created and destroyed
12
- as the program moves up and down its stack. */
13
- typedef struct prof_frame_t
14
- {
15
- /* Caching prof_method_t values significantly
16
- increases performance. */
17
- prof_call_tree_t* call_tree;
18
-
19
- VALUE source_file;
20
- unsigned int source_line;
21
-
22
- double start_time;
23
- double switch_time; /* Time at switch to different thread */
24
- double wait_time;
25
- double child_time;
26
- double pause_time; // Time pause() was initiated
27
- double dead_time; // Time to ignore (i.e. total amount of time between pause/resume blocks)
28
- } prof_frame_t;
29
-
30
- #define prof_frame_is_paused(f) (f->pause_time >= 0)
31
- #define prof_frame_is_unpaused(f) (f->pause_time < 0)
32
-
33
- void prof_frame_pause(prof_frame_t*, double current_measurement);
34
- void prof_frame_unpause(prof_frame_t*, double current_measurement);
35
-
36
- /* Current stack of active methods.*/
37
- typedef struct prof_stack_t
38
- {
39
- prof_frame_t* start;
40
- prof_frame_t* end;
41
- prof_frame_t* ptr;
42
- } prof_stack_t;
43
-
44
- prof_stack_t* prof_stack_create(void);
45
- void prof_stack_free(prof_stack_t* stack);
46
-
47
- prof_frame_t* prof_frame_current(prof_stack_t* stack);
48
- prof_frame_t* prof_frame_push(prof_stack_t* stack, prof_call_tree_t* call_tree, double measurement, bool paused);
49
- prof_frame_t* prof_frame_unshift(prof_stack_t* stack, prof_call_tree_t* parent_call_tree, prof_call_tree_t* call_tree, double measurement);
50
- prof_frame_t* prof_frame_pop(prof_stack_t* stack, double measurement);
51
- prof_method_t* prof_find_method(prof_stack_t* stack, VALUE source_file, int source_line);
52
-
53
- #endif //__RP_STACK__
1
+ /* Copyright (C) 2005-2019 Shugo Maeda <shugo@ruby-lang.org> and Charlie Savage <cfis@savagexi.com>
2
+ Please see the LICENSE file for copyright and distribution information */
3
+
4
+ #pragma once
5
+
6
+ #include "ruby_prof.h"
7
+ #include "rp_call_tree.h"
8
+
9
+ /* Temporary object that maintains profiling information
10
+ for active methods. They are created and destroyed
11
+ as the program moves up and down its stack. */
12
+ typedef struct prof_frame_t
13
+ {
14
+ /* Caching prof_method_t values significantly
15
+ increases performance. */
16
+ prof_call_tree_t* call_tree;
17
+
18
+ VALUE source_file;
19
+ unsigned int source_line;
20
+
21
+ double start_time;
22
+ double switch_time; /* Time at switch to different thread */
23
+ double wait_time;
24
+ double child_time;
25
+ double pause_time; // Time pause() was initiated
26
+ double dead_time; // Time to ignore (i.e. total amount of time between pause/resume blocks)
27
+ } prof_frame_t;
28
+
29
+ static inline bool prof_frame_is_paused(prof_frame_t* f) { return f->pause_time >= 0; }
30
+ static inline bool prof_frame_is_unpaused(prof_frame_t* f) { return f->pause_time < 0; }
31
+
32
+ void prof_frame_pause(prof_frame_t*, double current_measurement);
33
+ void prof_frame_unpause(prof_frame_t*, double current_measurement);
34
+
35
+ /* Current stack of active methods.*/
36
+ typedef struct prof_stack_t
37
+ {
38
+ prof_frame_t* start;
39
+ prof_frame_t* end;
40
+ prof_frame_t* ptr;
41
+ } prof_stack_t;
42
+
43
+ prof_stack_t* prof_stack_create(void);
44
+ void prof_stack_free(prof_stack_t* stack);
45
+
46
+ prof_frame_t* prof_frame_current(prof_stack_t* stack);
47
+ prof_frame_t* prof_frame_push(prof_stack_t* stack, prof_call_tree_t* call_tree, double measurement, bool paused);
48
+ prof_frame_t* prof_frame_unshift(prof_stack_t* stack, prof_call_tree_t* parent_call_tree, prof_call_tree_t* call_tree, double measurement);
49
+ prof_frame_t* prof_frame_pop(prof_stack_t* stack, double measurement);
50
+ prof_method_t* prof_find_method(prof_stack_t* stack, VALUE source_file, int source_line);
@@ -1,8 +1,7 @@
1
1
  /* Copyright (C) 2005-2019 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
- #ifndef __RP_THREAD__
5
- #define __RP_THREAD__
4
+ #pragma once
6
5
 
7
6
  #include "ruby_prof.h"
8
7
  #include "rp_stack.h"
@@ -35,5 +34,3 @@ void prof_thread_mark(void* data);
35
34
  void switch_thread(void* profile, thread_data_t* thread_data, double measurement);
36
35
  int pause_thread(st_data_t key, st_data_t value, st_data_t data);
37
36
  int unpause_thread(st_data_t key, st_data_t value, st_data_t data);
38
-
39
- #endif //__RP_THREAD__
@@ -1,8 +1,7 @@
1
1
  /* Copyright (C) 2005-2019 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
- #ifndef __RUBY_PROF_H__
5
- #define __RUBY_PROF_H__
4
+ #pragma once
6
5
 
7
6
  #include <stdio.h>
8
7
  #include <stdbool.h>
@@ -31,5 +30,3 @@ typedef enum
31
30
  OWNER_C = 2
32
31
  } prof_owner_t;
33
32
 
34
-
35
- #endif //__RUBY_PROF_H__
@@ -29,21 +29,21 @@
29
29
  <ConfigurationType>DynamicLibrary</ConfigurationType>
30
30
  <UseDebugLibraries>true</UseDebugLibraries>
31
31
  <CharacterSet>Unicode</CharacterSet>
32
- <PlatformToolset>v143</PlatformToolset>
32
+ <PlatformToolset>v145</PlatformToolset>
33
33
  </PropertyGroup>
34
34
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
35
35
  <ConfigurationType>DynamicLibrary</ConfigurationType>
36
36
  <UseDebugLibraries>false</UseDebugLibraries>
37
37
  <WholeProgramOptimization>true</WholeProgramOptimization>
38
38
  <CharacterSet>Unicode</CharacterSet>
39
- <PlatformToolset>v143</PlatformToolset>
39
+ <PlatformToolset>v145</PlatformToolset>
40
40
  </PropertyGroup>
41
41
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
42
- <PlatformToolset>v143</PlatformToolset>
42
+ <PlatformToolset>v145</PlatformToolset>
43
43
  <ConfigurationType>DynamicLibrary</ConfigurationType>
44
44
  </PropertyGroup>
45
45
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
46
- <PlatformToolset>v143</PlatformToolset>
46
+ <PlatformToolset>v145</PlatformToolset>
47
47
  </PropertyGroup>
48
48
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
49
49
  <ImportGroup Label="ExtensionSettings">
@@ -104,14 +104,14 @@
104
104
  </ItemDefinitionGroup>
105
105
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
106
106
  <ClCompile>
107
- <AdditionalIncludeDirectories>C:\msys64\usr\local\ruby-3.4.3-mswin\include\ruby-3.4.0\x64-mswin64_140;C:\msys64\usr\local\ruby-3.4.3-mswin\include\ruby-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
107
+ <AdditionalIncludeDirectories>C:\msys64\usr\local\ruby-4.0.1-mswin\include\ruby-4.0.0\x64-mswin64_140;C:\msys64\usr\local\ruby-4.0.1-mswin\include\ruby-4.0.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108
108
  <Optimization>Disabled</Optimization>
109
109
  <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
110
110
  <WarningLevel>Level3</WarningLevel>
111
111
  </ClCompile>
112
112
  <Link>
113
- <AdditionalLibraryDirectories>C:\msys64\usr\local\ruby-3.4.3-mswin\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
114
- <AdditionalDependencies>x64-vcruntime140-ruby340.lib;%(AdditionalDependencies)</AdditionalDependencies>
113
+ <AdditionalLibraryDirectories>C:\msys64\usr\local\ruby-4.0.1-mswin\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
114
+ <AdditionalDependencies>x64-vcruntime140-ruby400.lib;%(AdditionalDependencies)</AdditionalDependencies>
115
115
  <ModuleDefinitionFile>ruby_prof.def</ModuleDefinitionFile>
116
116
  <SubSystem>Console</SubSystem>
117
117
  </Link>
@@ -144,7 +144,6 @@
144
144
  <ClCompile Include="..\rp_call_trees.c" />
145
145
  <ClCompile Include="..\rp_measurement.c" />
146
146
  <ClCompile Include="..\rp_measure_allocations.c" />
147
- <ClCompile Include="..\rp_measure_memory.c" />
148
147
  <ClCompile Include="..\rp_measure_process_time.c" />
149
148
  <ClCompile Include="..\rp_measure_wall_time.c" />
150
149
  <ClCompile Include="..\rp_method.c" />