qprof 1.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 (5) hide show
  1. checksums.yaml +7 -0
  2. data/lib/qprof/version.rb +5 -0
  3. data/lib/qprof.rb +36 -0
  4. data/qprof.gemspec +22 -0
  5. metadata +115 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eba13a9e8805624a466be10b5946b5950027b7286ccbfca3a1fab8c2404d4d69
4
+ data.tar.gz: 7d8f976ac93bf6b6eacf2a3704be13bb99023c86f1da32777dfb5feb0d509cad
5
+ SHA512:
6
+ metadata.gz: de01a49071899ffa76a4382122b79bcfec6d5fe47610079dc69060247cf6ff8dee222382992ca56900694dbe054f141e812a1bf56ed052e3e55a43960804fd65
7
+ data.tar.gz: d5b92d65c04f3ffbb1f7791928e0714cb3de2ce29eeb4cc79dd76e70c4af2d0aaa36e34cf5d5e54a2a2373ec759e3346bf356ff2f00a296b3afc7c40895ae022
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QProf
4
+ VERSION = '1.0.0'
5
+ end
data/lib/qprof.rb ADDED
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'benchmark'
5
+
6
+ require 'ruby-prof'
7
+ require 'ruby-prof-flamegraph'
8
+ require 'launchy'
9
+
10
+ module QProf
11
+ class << self
12
+ def call(title = 'Flame Graph')
13
+ FileUtils.mkdir_p('/tmp/qprof')
14
+ 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)
20
+
21
+ result = RubyProf.profile do
22
+ @benchmark = Benchmark.measure do
23
+ yield
24
+ end
25
+ end
26
+
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)
34
+ end
35
+ end
36
+ end
data/qprof.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/qprof/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'qprof'
7
+ spec.version = QProf::VERSION
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.author = 'graham otte'
10
+ spec.email = 'go@grahamotte.com'
11
+ spec.description = 'quick and dirty ruby flamegraphs'
12
+ spec.summary = spec.description
13
+ spec.homepage = 'https://github.com/grahamotte/qprof'
14
+ spec.license = 'MIT'
15
+ spec.files = Dir['**/*'].select { |f| f[%r{^(lib/|.*gemspec)}] }
16
+ spec.require_paths = ['lib']
17
+ spec.add_dependency('securerandom')
18
+ spec.add_dependency('benchmark')
19
+ spec.add_dependency('ruby-prof')
20
+ spec.add_dependency('ruby-prof-flamegraph')
21
+ spec.add_dependency('launchy')
22
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qprof
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - graham otte
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-04-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: securerandom
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
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
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: launchy
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: quick and dirty ruby flamegraphs
84
+ email: go@grahamotte.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/qprof.rb
90
+ - lib/qprof/version.rb
91
+ - qprof.gemspec
92
+ homepage: https://github.com/grahamotte/qprof
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubygems_version: 3.2.3
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: quick and dirty ruby flamegraphs
115
+ test_files: []