ruby-prof 0.17.0 → 0.18.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.
- checksums.yaml +5 -5
- data/CHANGES +500 -482
- data/LICENSE +24 -24
- data/README.rdoc +487 -485
- data/Rakefile +113 -113
- data/bin/ruby-prof +345 -345
- data/bin/ruby-prof-check-trace +45 -45
- data/examples/flat.txt +50 -50
- data/examples/graph.dot +84 -84
- data/examples/graph.html +823 -823
- data/examples/graph.txt +139 -139
- data/examples/multi.flat.txt +23 -23
- data/examples/multi.graph.html +760 -760
- data/examples/multi.grind.dat +114 -114
- data/examples/multi.stack.html +547 -547
- data/examples/stack.html +547 -547
- data/ext/ruby_prof/extconf.rb +68 -68
- data/ext/ruby_prof/rp_call_info.c +425 -425
- data/ext/ruby_prof/rp_call_info.h +53 -53
- data/ext/ruby_prof/rp_measure.c +40 -40
- data/ext/ruby_prof/rp_measure.h +45 -45
- data/ext/ruby_prof/rp_measure_allocations.c +76 -76
- data/ext/ruby_prof/rp_measure_cpu_time.c +136 -136
- data/ext/ruby_prof/rp_measure_gc_runs.c +73 -73
- data/ext/ruby_prof/rp_measure_gc_time.c +60 -60
- data/ext/ruby_prof/rp_measure_memory.c +77 -77
- data/ext/ruby_prof/rp_measure_process_time.c +71 -71
- data/ext/ruby_prof/rp_measure_wall_time.c +45 -45
- data/ext/ruby_prof/rp_method.c +630 -636
- data/ext/ruby_prof/rp_method.h +75 -75
- data/ext/ruby_prof/rp_stack.c +173 -173
- data/ext/ruby_prof/rp_stack.h +63 -63
- data/ext/ruby_prof/rp_thread.c +277 -276
- data/ext/ruby_prof/rp_thread.h +27 -27
- data/ext/ruby_prof/ruby_prof.c +794 -774
- data/ext/ruby_prof/ruby_prof.h +60 -59
- data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
- data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +31 -0
- data/lib/ruby-prof.rb +68 -68
- data/lib/ruby-prof/aggregate_call_info.rb +76 -76
- data/lib/ruby-prof/assets/call_stack_printer.css.html +116 -116
- data/lib/ruby-prof/assets/call_stack_printer.js.html +384 -384
- data/lib/ruby-prof/call_info.rb +115 -115
- data/lib/ruby-prof/call_info_visitor.rb +40 -40
- data/lib/ruby-prof/compatibility.rb +179 -178
- data/lib/ruby-prof/method_info.rb +121 -121
- data/lib/ruby-prof/printers/abstract_printer.rb +104 -103
- data/lib/ruby-prof/printers/call_info_printer.rb +41 -41
- data/lib/ruby-prof/printers/call_stack_printer.rb +265 -265
- data/lib/ruby-prof/printers/call_tree_printer.rb +143 -143
- data/lib/ruby-prof/printers/dot_printer.rb +132 -132
- data/lib/ruby-prof/printers/flat_printer.rb +70 -70
- data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +83 -83
- data/lib/ruby-prof/printers/graph_html_printer.rb +249 -249
- data/lib/ruby-prof/printers/graph_printer.rb +116 -116
- data/lib/ruby-prof/printers/multi_printer.rb +84 -84
- data/lib/ruby-prof/profile.rb +26 -26
- data/lib/ruby-prof/profile/exclude_common_methods.rb +207 -201
- data/lib/ruby-prof/profile/legacy_method_elimination.rb +50 -49
- data/lib/ruby-prof/rack.rb +174 -174
- data/lib/ruby-prof/task.rb +147 -147
- data/lib/ruby-prof/thread.rb +35 -35
- data/lib/ruby-prof/version.rb +3 -3
- data/lib/unprof.rb +10 -10
- data/ruby-prof.gemspec +58 -58
- data/test/abstract_printer_test.rb +53 -0
- data/test/aggregate_test.rb +136 -136
- data/test/basic_test.rb +128 -128
- data/test/block_test.rb +74 -74
- data/test/call_info_test.rb +78 -78
- data/test/call_info_visitor_test.rb +31 -31
- data/test/duplicate_names_test.rb +32 -32
- data/test/dynamic_method_test.rb +55 -55
- data/test/enumerable_test.rb +21 -21
- data/test/exceptions_test.rb +24 -16
- data/test/exclude_methods_test.rb +146 -146
- data/test/exclude_threads_test.rb +53 -53
- data/test/fiber_test.rb +79 -79
- data/test/issue137_test.rb +63 -63
- data/test/line_number_test.rb +80 -80
- data/test/measure_allocations_test.rb +26 -26
- data/test/measure_cpu_time_test.rb +212 -213
- data/test/measure_gc_runs_test.rb +32 -32
- data/test/measure_gc_time_test.rb +36 -36
- data/test/measure_memory_test.rb +33 -33
- data/test/measure_process_time_test.rb +61 -63
- data/test/measure_wall_time_test.rb +255 -255
- data/test/method_elimination_test.rb +84 -84
- data/test/module_test.rb +45 -45
- data/test/multi_printer_test.rb +104 -104
- data/test/no_method_class_test.rb +15 -15
- data/test/pause_resume_test.rb +166 -166
- data/test/prime.rb +54 -54
- data/test/printers_test.rb +275 -275
- data/test/printing_recursive_graph_test.rb +127 -127
- data/test/rack_test.rb +157 -157
- data/test/recursive_test.rb +215 -215
- data/test/singleton_test.rb +38 -38
- data/test/stack_printer_test.rb +77 -78
- data/test/stack_test.rb +138 -138
- data/test/start_stop_test.rb +112 -112
- data/test/test_helper.rb +267 -275
- data/test/thread_test.rb +187 -187
- data/test/unique_call_path_test.rb +202 -202
- data/test/yarv_test.rb +55 -55
- metadata +17 -96
- data/doc/LICENSE.html +0 -115
- data/doc/README_rdoc.html +0 -637
- data/doc/Rack.html +0 -96
- data/doc/Rack/RubyProf.html +0 -233
- data/doc/Rack/RubyProf/RackProfiler.html +0 -343
- data/doc/RubyProf.html +0 -974
- data/doc/RubyProf/AbstractPrinter.html +0 -625
- data/doc/RubyProf/AggregateCallInfo.html +0 -552
- data/doc/RubyProf/CallInfo.html +0 -579
- data/doc/RubyProf/CallInfoPrinter.html +0 -121
- data/doc/RubyProf/CallInfoVisitor.html +0 -199
- data/doc/RubyProf/CallStackPrinter.html +0 -1127
- data/doc/RubyProf/CallTreePrinter.html +0 -725
- data/doc/RubyProf/Cmd.html +0 -637
- data/doc/RubyProf/DeprecationWarnings.html +0 -148
- data/doc/RubyProf/DotPrinter.html +0 -258
- data/doc/RubyProf/FlatPrinter.html +0 -164
- data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -210
- data/doc/RubyProf/GraphHtmlPrinter.html +0 -558
- data/doc/RubyProf/GraphPrinter.html +0 -140
- data/doc/RubyProf/MethodInfo.html +0 -676
- data/doc/RubyProf/MultiPrinter.html +0 -574
- data/doc/RubyProf/Profile.html +0 -908
- data/doc/RubyProf/Profile/ExcludeCommonMethods.html +0 -411
- data/doc/RubyProf/Profile/LegacyMethodElimination.html +0 -158
- data/doc/RubyProf/ProfileTask.html +0 -491
- data/doc/RubyProf/Thread.html +0 -275
- data/doc/created.rid +0 -33
- data/doc/css/fonts.css +0 -167
- data/doc/css/rdoc.css +0 -590
- data/doc/examples/flat_txt.html +0 -139
- data/doc/examples/graph_html.html +0 -910
- data/doc/examples/graph_txt.html +0 -248
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -666
- data/doc/js/darkfish.js +0 -161
- data/doc/js/jquery.js +0 -4
- data/doc/js/navigation.js +0 -142
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +0 -229
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +0 -1052
- data/examples/cachegrind.out.1 +0 -114
- data/examples/cachegrind.out.1.32313213 +0 -114
- data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
- data/ext/ruby_prof/vc/ruby_prof_19.vcxproj +0 -110
data/ext/ruby_prof/ruby_prof.h
CHANGED
@@ -1,59 +1,60 @@
|
|
1
|
-
/* Copyright (C) 2005-
|
2
|
-
Please see the LICENSE file for copyright and distribution information */
|
3
|
-
|
4
|
-
#ifndef __RUBY_PROF_H__
|
5
|
-
#define __RUBY_PROF_H__
|
6
|
-
|
7
|
-
#include <ruby.h>
|
8
|
-
#include <stdio.h>
|
9
|
-
|
10
|
-
#if RUBY_PROF_RUBY_VERSION == 10806
|
11
|
-
# error 1.8.6 is not supported. Please upgrade to 1.9.3 or higher.
|
12
|
-
#endif
|
13
|
-
|
14
|
-
#if RUBY_PROF_RUBY_VERSION == 10807
|
15
|
-
# error 1.8.7 is not supported. Please upgrade to 1.9.3 or higher.
|
16
|
-
#endif
|
17
|
-
|
18
|
-
#if RUBY_PROF_RUBY_VERSION == 10900
|
19
|
-
# error 1.9.0 is not supported. Please upgrade to 1.9.3 or higher.
|
20
|
-
#endif
|
21
|
-
|
22
|
-
#if RUBY_PROF_RUBY_VERSION == 10901
|
23
|
-
# error 1.9.1 is not supported. Please upgrade to 1.9.3 or higher.
|
24
|
-
#endif
|
25
|
-
|
26
|
-
#if RUBY_PROF_RUBY_VERSION == 10902
|
27
|
-
# error 1.9.2 is not supported. Please upgrade to 1.9.3 or higher.
|
28
|
-
#endif
|
29
|
-
|
30
|
-
#include "rp_measure.h"
|
31
|
-
#include "rp_method.h"
|
32
|
-
#include "rp_call_info.h"
|
33
|
-
#include "rp_stack.h"
|
34
|
-
#include "rp_thread.h"
|
35
|
-
|
36
|
-
extern VALUE mProf;
|
37
|
-
extern VALUE cProfile;
|
38
|
-
|
39
|
-
void method_key(prof_method_key_t* key, VALUE klass, ID mid);
|
40
|
-
|
41
|
-
typedef struct
|
42
|
-
{
|
43
|
-
VALUE running;
|
44
|
-
VALUE paused;
|
45
|
-
|
46
|
-
prof_measurer_t* measurer;
|
47
|
-
VALUE threads;
|
48
|
-
|
49
|
-
st_table* threads_tbl;
|
50
|
-
st_table* exclude_threads_tbl;
|
51
|
-
st_table* include_threads_tbl;
|
52
|
-
st_table* exclude_methods_tbl;
|
53
|
-
thread_data_t* last_thread_data;
|
54
|
-
double measurement_at_pause_resume;
|
55
|
-
int merge_fibers;
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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 __RUBY_PROF_H__
|
5
|
+
#define __RUBY_PROF_H__
|
6
|
+
|
7
|
+
#include <ruby.h>
|
8
|
+
#include <stdio.h>
|
9
|
+
|
10
|
+
#if RUBY_PROF_RUBY_VERSION == 10806
|
11
|
+
# error 1.8.6 is not supported. Please upgrade to 1.9.3 or higher.
|
12
|
+
#endif
|
13
|
+
|
14
|
+
#if RUBY_PROF_RUBY_VERSION == 10807
|
15
|
+
# error 1.8.7 is not supported. Please upgrade to 1.9.3 or higher.
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#if RUBY_PROF_RUBY_VERSION == 10900
|
19
|
+
# error 1.9.0 is not supported. Please upgrade to 1.9.3 or higher.
|
20
|
+
#endif
|
21
|
+
|
22
|
+
#if RUBY_PROF_RUBY_VERSION == 10901
|
23
|
+
# error 1.9.1 is not supported. Please upgrade to 1.9.3 or higher.
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#if RUBY_PROF_RUBY_VERSION == 10902
|
27
|
+
# error 1.9.2 is not supported. Please upgrade to 1.9.3 or higher.
|
28
|
+
#endif
|
29
|
+
|
30
|
+
#include "rp_measure.h"
|
31
|
+
#include "rp_method.h"
|
32
|
+
#include "rp_call_info.h"
|
33
|
+
#include "rp_stack.h"
|
34
|
+
#include "rp_thread.h"
|
35
|
+
|
36
|
+
extern VALUE mProf;
|
37
|
+
extern VALUE cProfile;
|
38
|
+
|
39
|
+
void method_key(prof_method_key_t* key, VALUE klass, ID mid);
|
40
|
+
|
41
|
+
typedef struct
|
42
|
+
{
|
43
|
+
VALUE running;
|
44
|
+
VALUE paused;
|
45
|
+
|
46
|
+
prof_measurer_t* measurer;
|
47
|
+
VALUE threads;
|
48
|
+
|
49
|
+
st_table* threads_tbl;
|
50
|
+
st_table* exclude_threads_tbl;
|
51
|
+
st_table* include_threads_tbl;
|
52
|
+
st_table* exclude_methods_tbl;
|
53
|
+
thread_data_t* last_thread_data;
|
54
|
+
double measurement_at_pause_resume;
|
55
|
+
int merge_fibers;
|
56
|
+
int allow_exceptions;
|
57
|
+
} prof_profile_t;
|
58
|
+
|
59
|
+
|
60
|
+
#endif //__RUBY_PROF_H__
|
@@ -1,32 +1,31 @@
|
|
1
1
|
|
2
|
-
Microsoft Visual Studio Solution File, Format Version
|
3
|
-
# Visual Studio
|
4
|
-
|
5
|
-
|
6
|
-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "
|
7
|
-
EndProject
|
8
|
-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ruby_prof_20", "ruby_prof_20.vcxproj", "{6B4978F4-3B5F-4D38-81A8-069EC28CC069}"
|
2
|
+
Microsoft Visual Studio Solution File, Format Version 12.00
|
3
|
+
# Visual Studio Version 16
|
4
|
+
VisualStudioVersion = 16.0.28803.452
|
5
|
+
MinimumVisualStudioVersion = 10.0.40219.1
|
6
|
+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ruby_prof", "ruby_prof.vcxproj", "{6B4978F4-3B5F-4D38-81A8-069EC28CC069}"
|
9
7
|
EndProject
|
10
8
|
Global
|
11
9
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
12
|
-
Debug|
|
13
|
-
|
10
|
+
Debug|x64 = Debug|x64
|
11
|
+
Debug|x86 = Debug|x86
|
12
|
+
Release|x64 = Release|x64
|
13
|
+
Release|x86 = Release|x86
|
14
14
|
EndGlobalSection
|
15
15
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
16
|
-
{
|
17
|
-
{
|
18
|
-
{
|
19
|
-
{
|
20
|
-
{
|
21
|
-
{
|
22
|
-
{
|
23
|
-
{
|
24
|
-
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|Win32.ActiveCfg = Debug|Win32
|
25
|
-
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|Win32.Build.0 = Debug|Win32
|
26
|
-
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|Win32.ActiveCfg = Release|Win32
|
27
|
-
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|Win32.Build.0 = Release|Win32
|
16
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|x64.ActiveCfg = Debug|x64
|
17
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|x64.Build.0 = Debug|x64
|
18
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|x86.ActiveCfg = Debug|Win32
|
19
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Debug|x86.Build.0 = Debug|Win32
|
20
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|x64.ActiveCfg = Release|x64
|
21
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|x64.Build.0 = Release|x64
|
22
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|x86.ActiveCfg = Release|Win32
|
23
|
+
{6B4978F4-3B5F-4D38-81A8-069EC28CC069}.Release|x86.Build.0 = Release|Win32
|
28
24
|
EndGlobalSection
|
29
25
|
GlobalSection(SolutionProperties) = preSolution
|
30
26
|
HideSolutionNode = FALSE
|
31
27
|
EndGlobalSection
|
28
|
+
GlobalSection(ExtensibilityGlobals) = postSolution
|
29
|
+
SolutionGuid = {9E7746F2-2467-4738-9746-4472B5CBF1DA}
|
30
|
+
EndGlobalSection
|
32
31
|
EndGlobal
|
@@ -5,15 +5,24 @@
|
|
5
5
|
<Configuration>Debug</Configuration>
|
6
6
|
<Platform>Win32</Platform>
|
7
7
|
</ProjectConfiguration>
|
8
|
+
<ProjectConfiguration Include="Debug|x64">
|
9
|
+
<Configuration>Debug</Configuration>
|
10
|
+
<Platform>x64</Platform>
|
11
|
+
</ProjectConfiguration>
|
8
12
|
<ProjectConfiguration Include="Release|Win32">
|
9
13
|
<Configuration>Release</Configuration>
|
10
14
|
<Platform>Win32</Platform>
|
11
15
|
</ProjectConfiguration>
|
16
|
+
<ProjectConfiguration Include="Release|x64">
|
17
|
+
<Configuration>Release</Configuration>
|
18
|
+
<Platform>x64</Platform>
|
19
|
+
</ProjectConfiguration>
|
12
20
|
</ItemGroup>
|
13
21
|
<PropertyGroup Label="Globals">
|
14
22
|
<ProjectGuid>{6B4978F4-3B5F-4D38-81A8-069EC28CC069}</ProjectGuid>
|
15
23
|
<Keyword>Win32Proj</Keyword>
|
16
24
|
<RootNamespace>ruby_prof</RootNamespace>
|
25
|
+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
17
26
|
</PropertyGroup>
|
18
27
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
19
28
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
@@ -27,6 +36,13 @@
|
|
27
36
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
28
37
|
<CharacterSet>Unicode</CharacterSet>
|
29
38
|
</PropertyGroup>
|
39
|
+
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
40
|
+
<PlatformToolset>v142</PlatformToolset>
|
41
|
+
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
42
|
+
</PropertyGroup>
|
43
|
+
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
44
|
+
<PlatformToolset>v142</PlatformToolset>
|
45
|
+
</PropertyGroup>
|
30
46
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
31
47
|
<ImportGroup Label="ExtensionSettings">
|
32
48
|
</ImportGroup>
|
@@ -46,6 +62,10 @@
|
|
46
62
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
47
63
|
<LinkIncremental>false</LinkIncremental>
|
48
64
|
</PropertyGroup>
|
65
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
66
|
+
<TargetExt>.so</TargetExt>
|
67
|
+
<OutDir>..</OutDir>
|
68
|
+
</PropertyGroup>
|
49
69
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
50
70
|
<ClCompile>
|
51
71
|
<PrecompiledHeader>
|
@@ -80,6 +100,17 @@
|
|
80
100
|
<OptimizeReferences>true</OptimizeReferences>
|
81
101
|
</Link>
|
82
102
|
</ItemDefinitionGroup>
|
103
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
104
|
+
<ClCompile>
|
105
|
+
<AdditionalIncludeDirectories>C:\msys64\usr\local\ruby263vc\include\ruby-2.6.0\x64-mswin64_140;C:\msys64\usr\local\ruby263vc\include\ruby-2.6.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
106
|
+
<Optimization>Disabled</Optimization>
|
107
|
+
</ClCompile>
|
108
|
+
<Link>
|
109
|
+
<AdditionalLibraryDirectories>C:\msys64\usr\local\ruby263vc\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
110
|
+
<AdditionalDependencies>x64-vcruntime140-ruby260.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
111
|
+
<ModuleDefinitionFile>ruby_prof.def</ModuleDefinitionFile>
|
112
|
+
</Link>
|
113
|
+
</ItemDefinitionGroup>
|
83
114
|
<ItemGroup>
|
84
115
|
<ClInclude Include="..\rp_call_info.h" />
|
85
116
|
<ClInclude Include="..\rp_measure.h" />
|
data/lib/ruby-prof.rb
CHANGED
@@ -1,68 +1,68 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# Load the C-based binding.
|
4
|
-
begin
|
5
|
-
RUBY_VERSION =~ /(\d+\.\d+\.\d+)/
|
6
|
-
require "#{$1}/ruby_prof.so"
|
7
|
-
rescue LoadError
|
8
|
-
require "ruby_prof.so"
|
9
|
-
end
|
10
|
-
|
11
|
-
module RubyProf
|
12
|
-
module DeprecationWarnings
|
13
|
-
def deprecation_warning(feature, recommendation = nil)
|
14
|
-
$stderr.puts "DEPRECATION WARNING: #{feature}"
|
15
|
-
$stderr.puts recommendation unless recommendation.nil?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
extend DeprecationWarnings
|
19
|
-
end
|
20
|
-
|
21
|
-
require 'ruby-prof/version'
|
22
|
-
require 'ruby-prof/call_info'
|
23
|
-
require 'ruby-prof/compatibility'
|
24
|
-
require 'ruby-prof/method_info'
|
25
|
-
require 'ruby-prof/profile'
|
26
|
-
require 'ruby-prof/rack'
|
27
|
-
require 'ruby-prof/thread'
|
28
|
-
|
29
|
-
module RubyProf
|
30
|
-
autoload :AggregateCallInfo, 'ruby-prof/aggregate_call_info'
|
31
|
-
autoload :CallInfoVisitor, 'ruby-prof/call_info_visitor'
|
32
|
-
|
33
|
-
autoload :AbstractPrinter, 'ruby-prof/printers/abstract_printer'
|
34
|
-
autoload :CallInfoPrinter, 'ruby-prof/printers/call_info_printer'
|
35
|
-
autoload :CallStackPrinter, 'ruby-prof/printers/call_stack_printer'
|
36
|
-
autoload :CallTreePrinter, 'ruby-prof/printers/call_tree_printer'
|
37
|
-
autoload :DotPrinter, 'ruby-prof/printers/dot_printer'
|
38
|
-
autoload :FlatPrinter, 'ruby-prof/printers/flat_printer'
|
39
|
-
autoload :FlatPrinterWithLineNumbers, 'ruby-prof/printers/flat_printer_with_line_numbers'
|
40
|
-
autoload :GraphHtmlPrinter, 'ruby-prof/printers/graph_html_printer'
|
41
|
-
autoload :GraphPrinter, 'ruby-prof/printers/graph_printer'
|
42
|
-
autoload :MultiPrinter, 'ruby-prof/printers/multi_printer'
|
43
|
-
|
44
|
-
# Checks if the user specified the clock mode via
|
45
|
-
# the RUBY_PROF_MEASURE_MODE environment variable
|
46
|
-
def self.figure_measure_mode
|
47
|
-
case ENV["RUBY_PROF_MEASURE_MODE"]
|
48
|
-
when "wall", "wall_time"
|
49
|
-
RubyProf.measure_mode = RubyProf::WALL_TIME
|
50
|
-
when "cpu", "cpu_time"
|
51
|
-
RubyProf.measure_mode = RubyProf::CPU_TIME
|
52
|
-
when "allocations"
|
53
|
-
RubyProf.measure_mode = RubyProf::ALLOCATIONS
|
54
|
-
when "memory"
|
55
|
-
RubyProf.measure_mode = RubyProf::MEMORY
|
56
|
-
when "process", "process_time"
|
57
|
-
RubyProf.measure_mode = RubyProf::PROCESS_TIME
|
58
|
-
when "gc_time"
|
59
|
-
RubyProf.measure_mode = RubyProf::GC_TIME
|
60
|
-
when "gc_runs"
|
61
|
-
RubyProf.measure_mode = RubyProf::GC_RUNS
|
62
|
-
else
|
63
|
-
# the default is defined in the measure_mode reader
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
RubyProf::figure_measure_mode
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Load the C-based binding.
|
4
|
+
begin
|
5
|
+
RUBY_VERSION =~ /(\d+\.\d+\.\d+)/
|
6
|
+
require "#{$1}/ruby_prof.so"
|
7
|
+
rescue LoadError
|
8
|
+
require "ruby_prof.so"
|
9
|
+
end
|
10
|
+
|
11
|
+
module RubyProf
|
12
|
+
module DeprecationWarnings
|
13
|
+
def deprecation_warning(feature, recommendation = nil)
|
14
|
+
$stderr.puts "DEPRECATION WARNING: #{feature}"
|
15
|
+
$stderr.puts recommendation unless recommendation.nil?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
extend DeprecationWarnings
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'ruby-prof/version'
|
22
|
+
require 'ruby-prof/call_info'
|
23
|
+
require 'ruby-prof/compatibility'
|
24
|
+
require 'ruby-prof/method_info'
|
25
|
+
require 'ruby-prof/profile'
|
26
|
+
require 'ruby-prof/rack'
|
27
|
+
require 'ruby-prof/thread'
|
28
|
+
|
29
|
+
module RubyProf
|
30
|
+
autoload :AggregateCallInfo, 'ruby-prof/aggregate_call_info'
|
31
|
+
autoload :CallInfoVisitor, 'ruby-prof/call_info_visitor'
|
32
|
+
|
33
|
+
autoload :AbstractPrinter, 'ruby-prof/printers/abstract_printer'
|
34
|
+
autoload :CallInfoPrinter, 'ruby-prof/printers/call_info_printer'
|
35
|
+
autoload :CallStackPrinter, 'ruby-prof/printers/call_stack_printer'
|
36
|
+
autoload :CallTreePrinter, 'ruby-prof/printers/call_tree_printer'
|
37
|
+
autoload :DotPrinter, 'ruby-prof/printers/dot_printer'
|
38
|
+
autoload :FlatPrinter, 'ruby-prof/printers/flat_printer'
|
39
|
+
autoload :FlatPrinterWithLineNumbers, 'ruby-prof/printers/flat_printer_with_line_numbers'
|
40
|
+
autoload :GraphHtmlPrinter, 'ruby-prof/printers/graph_html_printer'
|
41
|
+
autoload :GraphPrinter, 'ruby-prof/printers/graph_printer'
|
42
|
+
autoload :MultiPrinter, 'ruby-prof/printers/multi_printer'
|
43
|
+
|
44
|
+
# Checks if the user specified the clock mode via
|
45
|
+
# the RUBY_PROF_MEASURE_MODE environment variable
|
46
|
+
def self.figure_measure_mode
|
47
|
+
case ENV["RUBY_PROF_MEASURE_MODE"]
|
48
|
+
when "wall", "wall_time"
|
49
|
+
RubyProf.measure_mode = RubyProf::WALL_TIME
|
50
|
+
when "cpu", "cpu_time"
|
51
|
+
RubyProf.measure_mode = RubyProf::CPU_TIME
|
52
|
+
when "allocations"
|
53
|
+
RubyProf.measure_mode = RubyProf::ALLOCATIONS
|
54
|
+
when "memory"
|
55
|
+
RubyProf.measure_mode = RubyProf::MEMORY
|
56
|
+
when "process", "process_time"
|
57
|
+
RubyProf.measure_mode = RubyProf::PROCESS_TIME
|
58
|
+
when "gc_time"
|
59
|
+
RubyProf.measure_mode = RubyProf::GC_TIME
|
60
|
+
when "gc_runs"
|
61
|
+
RubyProf.measure_mode = RubyProf::GC_RUNS
|
62
|
+
else
|
63
|
+
# the default is defined in the measure_mode reader
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
RubyProf::figure_measure_mode
|
@@ -1,76 +1,76 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module RubyProf
|
4
|
-
class AggregateCallInfo
|
5
|
-
attr_reader :call_infos, :method_info
|
6
|
-
|
7
|
-
def initialize(call_infos, method_info)
|
8
|
-
if call_infos.length == 0
|
9
|
-
raise(ArgumentError, "Must specify at least one call info.")
|
10
|
-
end
|
11
|
-
@call_infos = call_infos
|
12
|
-
@method_info = method_info
|
13
|
-
end
|
14
|
-
|
15
|
-
def target
|
16
|
-
call_infos.first.target
|
17
|
-
end
|
18
|
-
|
19
|
-
def parent
|
20
|
-
call_infos.first.parent
|
21
|
-
end
|
22
|
-
|
23
|
-
def line
|
24
|
-
call_infos.first.line
|
25
|
-
end
|
26
|
-
|
27
|
-
def children
|
28
|
-
call_infos.inject(Array.new) do |result, call_info|
|
29
|
-
result.concat(call_info.children)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def total_time
|
34
|
-
aggregate_roots(:total_time)
|
35
|
-
end
|
36
|
-
|
37
|
-
def self_time
|
38
|
-
aggregate_roots(:self_time)
|
39
|
-
end
|
40
|
-
|
41
|
-
def wait_time
|
42
|
-
aggregate_roots(:wait_time)
|
43
|
-
end
|
44
|
-
|
45
|
-
def children_time
|
46
|
-
aggregate_roots(:children_time)
|
47
|
-
end
|
48
|
-
|
49
|
-
def called
|
50
|
-
aggregate_all(:called)
|
51
|
-
end
|
52
|
-
|
53
|
-
def to_s
|
54
|
-
"#{call_infos.first.target.full_name}"
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
# return all call_infos which are not (grand) children of any other node in the list of given call_infos
|
60
|
-
def roots
|
61
|
-
@roots ||= method_info.recursive? ? CallInfo.roots_of(call_infos) : call_infos
|
62
|
-
end
|
63
|
-
|
64
|
-
def aggregate_all(method_name)
|
65
|
-
call_infos.inject(0) do |sum, call_info|
|
66
|
-
sum + call_info.send(method_name)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def aggregate_roots(method_name)
|
71
|
-
roots.inject(0) do |sum, call_info|
|
72
|
-
sum + call_info.send(method_name)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RubyProf
|
4
|
+
class AggregateCallInfo
|
5
|
+
attr_reader :call_infos, :method_info
|
6
|
+
|
7
|
+
def initialize(call_infos, method_info)
|
8
|
+
if call_infos.length == 0
|
9
|
+
raise(ArgumentError, "Must specify at least one call info.")
|
10
|
+
end
|
11
|
+
@call_infos = call_infos
|
12
|
+
@method_info = method_info
|
13
|
+
end
|
14
|
+
|
15
|
+
def target
|
16
|
+
call_infos.first.target
|
17
|
+
end
|
18
|
+
|
19
|
+
def parent
|
20
|
+
call_infos.first.parent
|
21
|
+
end
|
22
|
+
|
23
|
+
def line
|
24
|
+
call_infos.first.line
|
25
|
+
end
|
26
|
+
|
27
|
+
def children
|
28
|
+
call_infos.inject(Array.new) do |result, call_info|
|
29
|
+
result.concat(call_info.children)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def total_time
|
34
|
+
aggregate_roots(:total_time)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self_time
|
38
|
+
aggregate_roots(:self_time)
|
39
|
+
end
|
40
|
+
|
41
|
+
def wait_time
|
42
|
+
aggregate_roots(:wait_time)
|
43
|
+
end
|
44
|
+
|
45
|
+
def children_time
|
46
|
+
aggregate_roots(:children_time)
|
47
|
+
end
|
48
|
+
|
49
|
+
def called
|
50
|
+
aggregate_all(:called)
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
"#{call_infos.first.target.full_name}"
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# return all call_infos which are not (grand) children of any other node in the list of given call_infos
|
60
|
+
def roots
|
61
|
+
@roots ||= method_info.recursive? ? CallInfo.roots_of(call_infos) : call_infos
|
62
|
+
end
|
63
|
+
|
64
|
+
def aggregate_all(method_name)
|
65
|
+
call_infos.inject(0) do |sum, call_info|
|
66
|
+
sum + call_info.send(method_name)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def aggregate_roots(method_name)
|
71
|
+
roots.inject(0) do |sum, call_info|
|
72
|
+
sum + call_info.send(method_name)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|