ruby-prof 1.4.3 → 1.4.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d823139ee13d55c54104dd034274b61316a525b54ac3802b90dcb111d8ccb3d2
4
- data.tar.gz: c9ae3a108bbe1f9559848df06a943c4d42e10e4b62a450f8e0278d796ed90f80
3
+ metadata.gz: fb77381e6fdb509ca6b243a57dd21e4f7eceaeaeb658cbfa13c5660d94320657
4
+ data.tar.gz: d9de35cbf400aad32c6f451af75e4e8e549712f55e89b35e4036ec2eaecd3ce8
5
5
  SHA512:
6
- metadata.gz: 505e983efedd32bed3cdadff2256e4c9c875551caba829999ec2dd87a36052024612eec9e70ebe586b05b3ee70b95d8c3dba3bd5b14bd01ca1243317a5336313
7
- data.tar.gz: 9e3430bd9af49f2a045485bc9322f2deabe23bd43575ae00e0718316829d1468492db17476b7a428f6592f7d5fc65ad3f96e68de97a084ff606971ef89d5e14b
6
+ metadata.gz: fdd4b10b506be935b8ae272722b95745646c6ad2a1d1997a2869c7c9a8425c5d498dec449246c7cb3c1fc728ea2c2be92cfffa4e806a3ff8363fe075f71e385b
7
+ data.tar.gz: ff9453f7f7a7cd37e36303d92ccff7697f167776a578351efe8d778e9f92c0f6d4cd144d6792ea18afe93cae8b47a6099264304ec39759334d0b3e61c9ee688f
data/CHANGES CHANGED
@@ -1,15 +1,36 @@
1
- 1.4.3 (2021-02-15)
1
+ 1.4.5 (2022-12-27)
2
+ =====================
3
+ * Look for ruby_prof extension built on install in the lib directory (Charlie Savage)
4
+ * Added Ruby 3.2.0 build for mingw-urct
5
+
6
+ 1.4.4 (2022-12-11)
7
+ =====================
8
+ * Update tests for Ruby 3.1 (Charlie Savage)
9
+ * When tracing allocations always use the RUBY_INTERNAL_EVENT_NEWOBJ trace event. Previously GC stats could also be used, but that includes the creation of internal T_IMEMO objects makes reviewing results confusing (Charlie Savage)
10
+ * Remove :profile option that lets a user set the prefix on callgrind output files since KCacheGrind will not automatically show these files in its open dialog. Fixes #313. (Charlie Savage)
11
+ * Don't expose threads to Ruby that don't have a call tree. This can happen when a user is profiling memory usage and then sends a signint to the profiled process. New objects will be created in a new thread, but no method enter/exit trace events are generated by Ruby. Thus the thread has no call tree. Fixes #312 (Charlie Savage)
12
+ * Update github Actions - change 3.0 to '3.0', add Windows mswin (MSP-Greg)
13
+ * Add Ruby 3.1 to test matrix (Charlie Savage)
14
+ * Use normal weight text instead of bold in call strack printer output. Fixes #297 (Charlie Savage)
15
+ * Update VC project to Ruby 3.1 and Visual Studio 2022 (Charlie Savage)
16
+ * Fix marshaling of profile measure. Fixes #315 (Charlie Savage)
17
+ * CI: Omit duplicate 'bundle install'. PR #309 (Olle Jonsson)
18
+ * Fix typo. s/perecent/percent/ (Paarth Madan)
19
+ * Remove support for Ruby 2.5 and 2.6 which are now end of life (Charlie Savage)
20
+
21
+ 1.4.3 (2021-02-16)
2
22
  =====================
3
23
  * Remove trailing spaces (sergioro)
4
- * Enable loading ruby_prof.so from ext directory for development purposes (sergioro)
5
- * Create temp directory for test output (sergioro)
24
+ * Load "ruby-prof.so" with require_relative (sergioro)
25
+ * Use same file permissions for all test files (sergioro)
26
+ * Create tmp directory for test output (sergioro)
27
+ * Update git-ignore to add mkmf log (sergioro)
6
28
  * Fix minitest warning about using MT_CPU instead of N (sergioro)
7
- * Fix minitest warning "Use assert_nil if expecting nil" (sergioro)
8
- * Fix file permissions (sergioro)
9
- * Fix failing test by forcing GC to run (Charlie Savage)
10
- * Switch to GitHub actions (Charlie Savage)
11
- * Switch to C11 (Charlie Savage)
12
- * Greatly slim down library size by removing symbols on GCC (Charlie Savage)
29
+ * Fix minitest warning "Use assert_nil if expecting nil (sergioro)
30
+ * Add xcode project (Charlie Savage)
31
+ * Update test for Ruby 3.0 (Charlie Savage)
32
+ * Remove Ruby 2.4 support since it is no longer maintained (Charlie Savage)
33
+ * Replace travis status badge with github status badge (Charlie Savage)
13
34
 
14
35
  1.4.2 (2020-11-3)
15
36
  =====================
@@ -1,5 +1,5 @@
1
- = ruby-prof
1
+ # ruby-prof
2
2
 
3
3
  ![ruby-prof](https://github.com/ruby-prof/ruby-prof/workflows/ruby-prof/badge.svg)
4
4
 
5
- For an overview of ruby-prof please see https://ruby-prof.github.io
5
+ For an overview of ruby-prof please see https://ruby-prof.github.io
data/Rakefile CHANGED
@@ -42,7 +42,7 @@ end
42
42
  Rake::Task[:package].enhance [:rdoc]
43
43
 
44
44
  # Setup Windows Gem
45
- if RUBY_PLATFORM.match(/win32|mingw32/)
45
+ if RUBY_PLATFORM.match(/mswin|mingw/)
46
46
  # Windows specification
47
47
  win_spec = default_spec.clone
48
48
  win_spec.platform = Gem::Platform::CURRENT
@@ -65,13 +65,13 @@ RDoc::Task.new("rdoc") do |rdoc|
65
65
  # Show source inline with line numbers
66
66
  rdoc.options << "--line-numbers"
67
67
  # Make the readme file the start page for the generated html
68
- rdoc.options << '--main' << 'README.rdoc'
68
+ rdoc.options << '--main' << 'README.md'
69
69
  rdoc.rdoc_files.include('bin/*',
70
70
  'doc/*.rdoc',
71
71
  'lib/**/*.rb',
72
72
  'ext/ruby_prof/*.c',
73
73
  'ext/ruby_prof/*.h',
74
- 'README.rdoc',
74
+ 'README.md',
75
75
  'LICENSE')
76
76
  end
77
77
 
@@ -3,8 +3,6 @@
3
3
 
4
4
  #include "rp_call_tree.h"
5
5
 
6
- #define INITIAL_CALL_TREES_SIZE 2
7
-
8
6
  VALUE cRpCallTree;
9
7
 
10
8
  /* ======= prof_call_tree_t ========*/
@@ -38,6 +38,6 @@ uint32_t prof_call_figure_depth(prof_call_tree_t* call_tree_data);
38
38
  prof_call_tree_t* prof_get_call_tree(VALUE self);
39
39
  VALUE prof_call_tree_wrap(prof_call_tree_t* call_tree);
40
40
  void prof_call_tree_free(prof_call_tree_t* call_tree);
41
- void rp_init_call_tree(void);
41
+ void rp_init_call_tree();
42
42
 
43
43
  #endif //__RP_CALL_TREE_H__
@@ -8,20 +8,20 @@
8
8
  static VALUE cMeasureAllocations;
9
9
  VALUE total_allocated_objects_key;
10
10
 
11
- static double measure_allocations_via_gc_stats(rb_trace_arg_t* trace_arg)
12
- {
13
- return (double)rb_gc_stat(total_allocated_objects_key);
14
- }
15
-
16
- static double measure_allocations_via_tracing(rb_trace_arg_t* trace_arg)
11
+ static double measure_allocations(rb_trace_arg_t* trace_arg)
17
12
  {
18
13
  static double result = 0;
19
14
 
20
15
  if (trace_arg)
21
16
  {
17
+ // Only process creation of new objects
22
18
  rb_event_flag_t event = rb_tracearg_event_flag(trace_arg);
23
- if (event == RUBY_INTERNAL_EVENT_NEWOBJ)
24
- result++;
19
+ if (event == RUBY_INTERNAL_EVENT_NEWOBJ) {
20
+ // Don't count allocations of internal IMemo objects
21
+ VALUE object = rb_tracearg_object(trace_arg);
22
+ if (BUILTIN_TYPE(object) != T_IMEMO)
23
+ result++;
24
+ }
25
25
  }
26
26
  return result;
27
27
  }
@@ -30,14 +30,11 @@ prof_measurer_t* prof_measurer_allocations(bool track_allocations)
30
30
  {
31
31
  prof_measurer_t* measure = ALLOC(prof_measurer_t);
32
32
  measure->mode = MEASURE_ALLOCATIONS;
33
+ measure->measure = measure_allocations;
33
34
  measure->multiplier = 1;
35
+ // Need to track allocations to get RUBY_INTERNAL_EVENT_NEWOBJ event
34
36
  measure->track_allocations = track_allocations;
35
37
 
36
- if (track_allocations)
37
- measure->measure = measure_allocations_via_tracing;
38
- else
39
- measure->measure = measure_allocations_via_gc_stats;
40
-
41
38
  return measure;
42
39
  }
43
40
 
@@ -7,20 +7,23 @@
7
7
 
8
8
  static VALUE cMeasureMemory;
9
9
 
10
- static double
11
- measure_memory_via_tracing(rb_trace_arg_t* trace_arg)
10
+ static double measure_memory(rb_trace_arg_t* trace_arg)
12
11
  {
13
12
  static double result = 0;
14
13
 
15
14
  if (trace_arg)
16
15
  {
16
+ // Only process creation of new objects
17
17
  rb_event_flag_t event = rb_tracearg_event_flag(trace_arg);
18
18
  if (event == RUBY_INTERNAL_EVENT_NEWOBJ)
19
19
  {
20
+ // Don't count allocations of internal IMemo objects
20
21
  VALUE object = rb_tracearg_object(trace_arg);
21
- result += rb_obj_memsize_of(object);
22
+ if (BUILTIN_TYPE(object) != T_IMEMO)
23
+ result += rb_obj_memsize_of(object);
22
24
  }
23
25
  }
26
+
24
27
  return result;
25
28
  }
26
29
 
@@ -28,8 +31,9 @@ prof_measurer_t* prof_measurer_memory(bool track_allocations)
28
31
  {
29
32
  prof_measurer_t* measure = ALLOC(prof_measurer_t);
30
33
  measure->mode = MEASURE_MEMORY;
31
- measure->measure = measure_memory_via_tracing;
34
+ measure->measure = measure_memory;
32
35
  measure->multiplier = 1;
36
+ // Need to track allocations to get RUBY_INTERNAL_EVENT_NEWOBJ event
33
37
  measure->track_allocations = true;
34
38
  return measure;
35
39
  }
@@ -11,21 +11,22 @@ static double measure_process_time(rb_trace_arg_t* trace_arg)
11
11
  #if defined(_WIN32)
12
12
  FILETIME createTime;
13
13
  FILETIME exitTime;
14
- FILETIME sysTime;
14
+ FILETIME kernelTime;
15
15
  FILETIME userTime;
16
16
 
17
- ULARGE_INTEGER sysTimeInt;
17
+ ULARGE_INTEGER kernelTimeInt;
18
18
  ULARGE_INTEGER userTimeInt;
19
19
 
20
- GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &sysTime, &userTime);
20
+ GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime);
21
21
 
22
- sysTimeInt.LowPart = sysTime.dwLowDateTime;
23
- sysTimeInt.HighPart = sysTime.dwHighDateTime;
22
+ kernelTimeInt.LowPart = kernelTime.dwLowDateTime;
23
+ kernelTimeInt.HighPart = kernelTime.dwHighDateTime;
24
24
  userTimeInt.LowPart = userTime.dwLowDateTime;
25
25
  userTimeInt.HighPart = userTime.dwHighDateTime;
26
26
 
27
- return (double)(sysTimeInt.QuadPart + userTimeInt.QuadPart);
27
+ return (double)(kernelTimeInt.QuadPart + userTimeInt.QuadPart);
28
28
  #elif !defined(CLOCK_PROCESS_CPUTIME_ID)
29
+ #include <sys/resource.h>
29
30
  struct rusage usage;
30
31
  getrusage(RUSAGE_SELF, &usage);
31
32
  return usage.ru_stime.tv_sec + usage.ru_utime.tv_sec + ((usage.ru_stime.tv_usec + usage.ru_utime.tv_usec) / 1000000.0);
@@ -16,7 +16,7 @@ void rp_init_measure_memory(void);
16
16
  void rp_init_measure_process_time(void);
17
17
  void rp_init_measure_wall_time(void);
18
18
 
19
- prof_measurer_t* prof_get_measurer(prof_measure_mode_t measure, bool track_allocations)
19
+ prof_measurer_t* prof_measurer_create(prof_measure_mode_t measure, bool track_allocations)
20
20
  {
21
21
  switch (measure)
22
22
  {
@@ -36,7 +36,7 @@ typedef struct prof_measurement_t
36
36
  VALUE object;
37
37
  } prof_measurement_t;
38
38
 
39
- prof_measurer_t* prof_get_measurer(prof_measure_mode_t measure, bool track_allocations);
39
+ prof_measurer_t* prof_measurer_create(prof_measure_mode_t measure, bool track_allocations);
40
40
  double prof_measure(prof_measurer_t* measurer, rb_trace_arg_t* trace_arg);
41
41
 
42
42
  prof_measurement_t* prof_measurement_create(void);
@@ -211,7 +211,7 @@ static void prof_event_hook(VALUE trace_point, void* data)
211
211
  }
212
212
 
213
213
  /* Special case - skip any methods from the mProf
214
- module since they clutter the results but aren't important to them results. */
214
+ module since they clutter the results but aren't important. */
215
215
  if (self == mProf)
216
216
  return;
217
217
 
@@ -226,6 +226,8 @@ static void prof_event_hook(VALUE trace_point, void* data)
226
226
  {
227
227
  prof_frame_t* frame = prof_frame_current(thread_data->stack);
228
228
 
229
+ /* If there is no frame then this is either the first method being profiled or we have climbed the
230
+ call stack higher than where we started. */
229
231
  if (!frame)
230
232
  {
231
233
  prof_method_t* method = check_method(profile, trace_arg, event, thread_data);
@@ -236,11 +238,13 @@ static void prof_event_hook(VALUE trace_point, void* data)
236
238
  prof_call_tree_t* call_tree = prof_call_tree_create(method, NULL, method->source_file, method->source_line);
237
239
  prof_add_call_tree(method->call_trees, call_tree);
238
240
 
241
+ // We have climbed higher in the stack then where we started
239
242
  if (thread_data->call_tree)
240
243
  {
241
244
  prof_call_tree_add_parent(thread_data->call_tree, call_tree);
242
245
  frame = prof_frame_unshift(thread_data->stack, call_tree, thread_data->call_tree, measurement);
243
246
  }
247
+ // This is the first method to be profiled
244
248
  else
245
249
  {
246
250
  frame = prof_frame_push(thread_data->stack, call_tree, measurement, RTEST(profile_t->paused));
@@ -374,7 +378,7 @@ prof_profile_t* prof_get_profile(VALUE self)
374
378
  static int collect_threads(st_data_t key, st_data_t value, st_data_t result)
375
379
  {
376
380
  thread_data_t* thread_data = (thread_data_t*)value;
377
- if (thread_data->trace)
381
+ if (thread_data->trace && thread_data->call_tree)
378
382
  {
379
383
  VALUE threads_array = (VALUE)result;
380
384
  rb_ary_push(threads_array, prof_thread_wrap(thread_data));
@@ -565,7 +569,7 @@ static VALUE prof_initialize(int argc, VALUE* argv, VALUE self)
565
569
  {
566
570
  Check_Type(mode, T_FIXNUM);
567
571
  }
568
- profile->measurer = prof_get_measurer(NUM2INT(mode), track_allocations == Qtrue);
572
+ profile->measurer = prof_measurer_create(NUM2INT(mode), track_allocations == Qtrue);
569
573
  profile->allow_exceptions = (allow_exceptions == Qtrue);
570
574
 
571
575
  if (exclude_threads != Qnil)
@@ -854,8 +858,14 @@ static VALUE prof_exclude_method(VALUE self, VALUE klass, VALUE msym)
854
858
  /* :nodoc: */
855
859
  VALUE prof_profile_dump(VALUE self)
856
860
  {
861
+ prof_profile_t* profile = prof_get_profile(self);
862
+
857
863
  VALUE result = rb_hash_new();
858
864
  rb_hash_aset(result, ID2SYM(rb_intern("threads")), prof_threads(self));
865
+ rb_hash_aset(result, ID2SYM(rb_intern("measurer_mode")), INT2NUM(profile->measurer->mode));
866
+ rb_hash_aset(result, ID2SYM(rb_intern("measurer_track_allocations")),
867
+ profile->measurer->track_allocations ? Qtrue : Qfalse);
868
+
859
869
  return result;
860
870
  }
861
871
 
@@ -864,6 +874,11 @@ VALUE prof_profile_load(VALUE self, VALUE data)
864
874
  {
865
875
  prof_profile_t* profile = prof_get_profile(self);
866
876
 
877
+ VALUE measurer_mode = rb_hash_aref(data, ID2SYM(rb_intern("measurer_mode")));
878
+ VALUE measurer_track_allocations = rb_hash_aref(data, ID2SYM(rb_intern("measurer_track_allocations")));
879
+ profile->measurer = prof_measurer_create((prof_measure_mode_t)(NUM2INT(measurer_mode)),
880
+ measurer_track_allocations == Qtrue ? true : false);
881
+
867
882
  VALUE threads = rb_hash_aref(data, ID2SYM(rb_intern("threads")));
868
883
  for (int i = 0; i < rb_array_len(threads); i++)
869
884
  {
@@ -29,19 +29,21 @@
29
29
  <ConfigurationType>DynamicLibrary</ConfigurationType>
30
30
  <UseDebugLibraries>true</UseDebugLibraries>
31
31
  <CharacterSet>Unicode</CharacterSet>
32
+ <PlatformToolset>v143</PlatformToolset>
32
33
  </PropertyGroup>
33
34
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
34
35
  <ConfigurationType>DynamicLibrary</ConfigurationType>
35
36
  <UseDebugLibraries>false</UseDebugLibraries>
36
37
  <WholeProgramOptimization>true</WholeProgramOptimization>
37
38
  <CharacterSet>Unicode</CharacterSet>
39
+ <PlatformToolset>v143</PlatformToolset>
38
40
  </PropertyGroup>
39
41
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
40
- <PlatformToolset>v142</PlatformToolset>
42
+ <PlatformToolset>v143</PlatformToolset>
41
43
  <ConfigurationType>DynamicLibrary</ConfigurationType>
42
44
  </PropertyGroup>
43
45
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
44
- <PlatformToolset>v142</PlatformToolset>
46
+ <PlatformToolset>v143</PlatformToolset>
45
47
  </PropertyGroup>
46
48
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
47
49
  <ImportGroup Label="ExtensionSettings">
@@ -64,7 +66,7 @@
64
66
  </PropertyGroup>
65
67
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
66
68
  <TargetExt>.so</TargetExt>
67
- <OutDir>..\..\..\lib\</OutDir>
69
+ <OutDir>$(SolutionDir)\..</OutDir>
68
70
  </PropertyGroup>
69
71
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
70
72
  <ClCompile>
@@ -102,14 +104,14 @@
102
104
  </ItemDefinitionGroup>
103
105
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
104
106
  <ClCompile>
105
- <AdditionalIncludeDirectories>C:\msys64\usr\local\ruby-2.7.2vc\include\ruby-2.7.0\x64-mswin64_140;C:\msys64\usr\local\ruby-2.7.2vc\include\ruby-2.7.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
107
+ <AdditionalIncludeDirectories>C:\msys64\usr\local\ruby-3.1.2-vc\include\ruby-3.1.0\x64-mswin64_140;C:\msys64\usr\local\ruby-3.1.2-vc\include\ruby-3.1.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
106
108
  <Optimization>Disabled</Optimization>
107
109
  <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
108
110
  <WarningLevel>Level3</WarningLevel>
109
111
  </ClCompile>
110
112
  <Link>
111
- <AdditionalLibraryDirectories>C:\msys64\usr\local\ruby-2.7.2vc\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
112
- <AdditionalDependencies>x64-vcruntime140-ruby270.lib;%(AdditionalDependencies)</AdditionalDependencies>
113
+ <AdditionalLibraryDirectories>C:\msys64\usr\local\ruby-3.1.2-vc\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
114
+ <AdditionalDependencies>x64-vcruntime140-ruby310.lib;%(AdditionalDependencies)</AdditionalDependencies>
113
115
  <ModuleDefinitionFile>ruby_prof.def</ModuleDefinitionFile>
114
116
  <SubSystem>Console</SubSystem>
115
117
  </Link>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
5
5
  <title>ruby-prof call tree</title>
6
- <style type="text/css">
6
+ <style>
7
7
  body {
8
8
  font-size: 70%;
9
9
  padding: 0;
@@ -19,6 +19,7 @@
19
19
  margin-bottom: 0px;
20
20
  padding-left: 0px;
21
21
  list-style-type: none;
22
+ font-weight: normal;
22
23
  }
23
24
 
24
25
  li {
@@ -100,21 +100,17 @@ module RubyProf
100
100
  true
101
101
  end
102
102
 
103
- def base_name
104
- @options[:profile] || "profile"
105
- end
106
-
107
103
  def remove_subsidiary_files_from_previous_profile_runs
108
- pattern = [base_name, "callgrind.out", $$, "*"].join(".")
104
+ pattern = ["callgrind.out", $$, "*"].join(".")
109
105
  files = Dir.glob(File.join(path, pattern))
110
106
  FileUtils.rm_f(files)
111
107
  end
112
108
 
113
109
  def file_name_for_thread(thread)
114
110
  if thread.fiber_id == Fiber.current.object_id
115
- [base_name, "callgrind.out", $$].join(".")
111
+ ["callgrind.out", $$].join(".")
116
112
  else
117
- [base_name, "callgrind.out", $$, thread.fiber_id].join(".")
113
+ ["callgrind.out", $$, thread.fiber_id].join(".")
118
114
  end
119
115
  end
120
116
 
@@ -29,7 +29,7 @@ module RubyProf
29
29
  end
30
30
 
31
31
  # Creates a link to a method. Note that we do not create
32
- # links to methods which are under the min_perecent
32
+ # links to methods which are under the min_percent
33
33
  # specified by the user, since they will not be
34
34
  # printed out.
35
35
  def create_link(thread, overall_time, method)
@@ -1,3 +1,3 @@
1
1
  module RubyProf
2
- VERSION = "1.4.3"
2
+ VERSION = "1.4.5"
3
3
  end
data/lib/ruby-prof.rb CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  version = Gem::Version.new(RUBY_VERSION)
7
7
  require "#{version.segments[0..1].join('.')}/ruby_prof.so"
8
8
  rescue LoadError
9
- require_relative "../ext/ruby_prof/ruby_prof.so"
9
+ require "ruby_prof.so"
10
10
  end
11
11
 
12
12
  require 'ruby-prof/version'
data/ruby-prof.gemspec CHANGED
@@ -36,7 +36,7 @@ EOF
36
36
  spec.files = Dir['CHANGES',
37
37
  'LICENSE',
38
38
  'Rakefile',
39
- 'README.rdoc',
39
+ 'README.md',
40
40
  'ruby-prof.gemspec',
41
41
  'bin/ruby-prof',
42
42
  'bin/ruby-prof-check-trace',
@@ -56,10 +56,9 @@ EOF
56
56
  'test/*.rb']
57
57
 
58
58
  spec.test_files = Dir["test/test_*.rb"]
59
- spec.required_ruby_version = '>= 2.5.0'
59
+ spec.required_ruby_version = '>= 2.7.0'
60
60
  spec.date = Time.now.strftime('%Y-%m-%d')
61
61
  spec.homepage = 'https://github.com/ruby-prof/ruby-prof'
62
62
  spec.add_development_dependency('minitest')
63
63
  spec.add_development_dependency('rake-compiler')
64
- spec.add_development_dependency('rdoc')
65
64
  end