qprof 1.0.1 → 3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 327742d10634cd1a5fe27eec465dbe7edd7d64fb48983a898a00c32c2cb09dfd
4
- data.tar.gz: 4c60c8563bb095496825124e73845ba2289c586dd275ea709cd91f079a6bacd6
3
+ metadata.gz: 2f4aa6886ff4e9e26d187f7fb25cfd12c981cdbe8c2c635903a73069a65d1478
4
+ data.tar.gz: 8ab18751feddb098e7e20b87b222cb5ac72a21a0f44438ba05ee662c5c9f9e31
5
5
  SHA512:
6
- metadata.gz: 36105475ebb5fd15282b7af5896709904f1a68ac106483f7a90b7c656fc0d243bf7c640d57d02b14c5e12d79524a8d81fdeee950e5ee4a9225ff8c2c6314be4a
7
- data.tar.gz: 136a82998d683bd7c33172b13f595c587a9aa009de0c47857a6e1049800cb349918efb5b7b432bcd0cb964100dbc05006c0329c281325acc4f148a84fd81df54
6
+ metadata.gz: d001f15b9e92978bc201de55f6291cf3ab45ee4f1c59aa1e13f850127e9977ec9837c8d785cd3a47cb5ca66a297a04ef79846d8c760732d4cdd40a3a4f6eea3c
7
+ data.tar.gz: ca532e645bb7f075a8bd9fd99e4d15889d3f9d9e263b06e6d32de2a87541b11732590ba3a2807a37ca5f599860ee8f0b588f2b7347e9b0ffe12925bfaed65b3a
data/lib/qprof/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QProf
4
- VERSION = '1.0.1'
4
+ VERSION = '3.0.0'
5
5
  end
data/lib/qprof.rb CHANGED
@@ -1,36 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'securerandom'
4
- require 'benchmark'
5
-
6
- require 'ruby-prof'
7
- require 'ruby-prof-flamegraph'
4
+ require 'stackprof'
8
5
  require 'launchy'
9
6
 
10
7
  module QProf
11
8
  class << self
12
- def call(title = 'Flame Graph')
9
+ def call(title = '')
13
10
  FileUtils.mkdir_p('/tmp/qprof')
14
11
  run = "#{Time.now.to_i}-#{SecureRandom.hex(4)}"
15
- run_txt_path = "/tmp/qprof/#{run}.txt"
16
- run_svg_path = "/tmp/qprof/#{run}.svg"
17
- flamegraph_pl_path = '/tmp/qprof/FlameGraph/flamegraph.pl'
18
-
19
- `git clone https://github.com/brendangregg/FlameGraph.git #{File.dirname(flamegraph_pl_path)}` unless File.exist?(flamegraph_pl_path)
12
+ dump_path = "/tmp/qprof/#{run}.dump"
13
+ graph_path = "/tmp/qprof/#{run}.html"
20
14
 
21
- @benchmark = Benchmark.measure do
22
- @result = RubyProf.profile do
23
- yield
24
- end
15
+ StackProf.run(mode: :cpu, interval: 2, raw: true, out: dump_path) do
16
+ @value = yield
25
17
  end
26
18
 
27
- subtitle = %i[utime stime real]
28
- .map { |x| "#{x} = #{@benchmark.send(x).round(4)}s" }
29
- .join('; ')
30
- printer = RubyProf::FlameGraphPrinter.new(@result)
31
- File.open(run_txt_path, 'w') { |file| printer.print(file) }
32
- `cat #{run_txt_path} | #{flamegraph_pl_path} --title \"#{title}\" --subtitle \"#{subtitle}\" > #{run_svg_path}`
33
- Launchy.open(run_svg_path)
19
+ flame_io = StringIO.new # hotman
20
+ StackProf::Report.from_file(dump_path).print_d3_flamegraph(flame_io)
21
+ File.write(graph_path, flame_io.string)
22
+ Launchy.open(graph_path)
23
+
24
+ @value
34
25
  end
35
26
  end
36
27
  end
data/qprof.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.version = QProf::VERSION
8
8
  spec.platform = Gem::Platform::RUBY
9
9
  spec.author = 'graham otte'
10
- spec.email = 'go@grahamotte.com'
10
+ spec.email = 'qprof@graham.lol'
11
11
  spec.description = 'quick and dirty ruby flamegraphs'
12
12
  spec.summary = spec.description
13
13
  spec.homepage = 'https://github.com/grahamotte/qprof'
@@ -15,8 +15,6 @@ Gem::Specification.new do |spec|
15
15
  spec.files = Dir['**/*'].select { |f| f[%r{^(lib/|.*gemspec)}] }
16
16
  spec.require_paths = ['lib']
17
17
  spec.add_dependency('securerandom')
18
- spec.add_dependency('benchmark')
19
- spec.add_dependency('ruby-prof')
20
- spec.add_dependency('ruby-prof-flamegraph')
18
+ spec.add_dependency('stackprof')
21
19
  spec.add_dependency('launchy')
22
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qprof
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - graham otte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-21 00:00:00.000000000 Z
11
+ date: 2025-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: securerandom
@@ -25,35 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: benchmark
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: ruby-prof
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: ruby-prof-flamegraph
28
+ name: stackprof
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - ">="
@@ -81,7 +53,7 @@ dependencies:
81
53
  - !ruby/object:Gem::Version
82
54
  version: '0'
83
55
  description: quick and dirty ruby flamegraphs
84
- email: go@grahamotte.com
56
+ email: qprof@graham.lol
85
57
  executables: []
86
58
  extensions: []
87
59
  extra_rdoc_files: []
@@ -108,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
80
  - !ruby/object:Gem::Version
109
81
  version: '0'
110
82
  requirements: []
111
- rubygems_version: 3.2.3
83
+ rubygems_version: 3.4.1
112
84
  signing_key:
113
85
  specification_version: 4
114
86
  summary: quick and dirty ruby flamegraphs