flameboyant 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: bfa186aaa2c0e8800643b18f17fc63c94a49d4e9
4
- data.tar.gz: af5b86c5869e4d4198ec6dd752b9d26f0fa4a207
3
+ metadata.gz: 5cdf0814212e66528f188fd7291cd0a4f26e1708
4
+ data.tar.gz: 096c42ed6c136de874d4bba088a2fdd12024cf69
5
5
  SHA512:
6
- metadata.gz: 8b5e058e0ab44ef61882a7ca8d21f5babb5764662d8d4447fd8723b32c27dff60401c769ed14ab47495d57739e58a1566684a6754b58304cc077ab2518e39a80
7
- data.tar.gz: 582544d45dbc969bd99acea64bbf2d08d607e891879c559151d9bc75f1280901b1817a4896cd8a7ea473a6f2fbf67f7ce4098ce11b249bf630fae1ebd2488629
6
+ metadata.gz: 6687511ebd6e140045c3dd39d7335476c05162dee7dcbb1a37415451dac6fafa5c0b43caa424fde0b9e3643fca4be4532d90e79e82413f3386a13e2d432b27ff
7
+ data.tar.gz: a55d206938b89414b1e01dd05b4cdc48a3ef5c0cf586442426626cfe7e477a63f7452a7b0deadd7e7955925931956738681f41051c0bc522ea569f80d2f0a553
data/README.md CHANGED
@@ -27,14 +27,29 @@ Flameboyant.profile do
27
27
  end
28
28
  ```
29
29
 
30
+ If you're profiling in development mode, we recommend turning on `cache_classes`
31
+ and `eager_load` in `RAILS_ROOT/config/environments/development.rb`.
32
+
33
+ ```ruby
34
+ config.cache_classes = true
35
+ config.eager_load = true
36
+ ```
37
+
30
38
  ## `profile` Options
31
39
  + name (String, optional) :: The output file will be prefixed with this name.
32
40
  + width (Integer, optional) :: defaults to 1920.
33
41
 
34
- When running with Rails SVG files are written to `Rails.root/tmp/flames`
42
+ When running under Rails, SVG files are written to `Rails.root/tmp/flames`
35
43
 
36
44
  ## Installation
37
45
 
46
+ *Requires Perl!* This Rubygem requires Perl. Data is recorded via Ruby and
47
+ sent to a Perl script to generate the CSV. One day, maybe we'll convert the Perl
48
+ script into a Ruby or Crystal script. Until then make sure you have Perl
49
+ installed in your system. OSX already has Perl installed. If you're on another
50
+ operating system, please search online for "install Perl on YOUR_OS" to get further
51
+ instructions.
52
+
38
53
  Add this line to your application's Gemfile:
39
54
 
40
55
  ```ruby
@@ -1,5 +1,6 @@
1
1
  require 'flameboyant/version'
2
2
  require 'ruby-prof-flamegraph'
3
+ require 'uri'
3
4
 
4
5
  # rubocop:disable all
5
6
  module Flameboyant
@@ -9,9 +10,7 @@ module Flameboyant
9
10
  GRAPHER = File.join(__dir__, 'flamegraph.pl')
10
11
 
11
12
  def profile(name: nil, width: 1920, &block)
12
- name = "#{name}_#{timestamp}"
13
-
14
- RubyProf::FlameGraphPrinter
13
+ base_name = "#{name}_#{timestamp}"
15
14
 
16
15
  block_result = nil
17
16
  log 'starting profile'
@@ -24,8 +23,9 @@ module Flameboyant
24
23
 
25
24
  FileUtils.mkdir_p(dest_dir)
26
25
 
27
- dst_data = dest_dir.join("#{name}.txt")
28
- dst_svg = dest_dir.join("#{name}.svg")
26
+ dst_data = dest_dir.join("#{base_name}.txt")
27
+ dst_svg = dest_dir.join("#{base_name}.svg")
28
+ dst_html = dest_dir.join("#{base_name}.html")
29
29
 
30
30
  log "writing: #{dst_data}"
31
31
  File.open(dst_data, 'w') do |f|
@@ -38,9 +38,43 @@ module Flameboyant
38
38
  log "removing: #{dst_data}"
39
39
  FileUtils.rm(dst_data)
40
40
  end
41
+ # write html contents
42
+ File.open(dst_html, 'w') {|f| f << create_html_page(dst_svg)}
43
+ log "created: #{dst_html} <⌘ - Click> to open in your browser."
44
+
45
+ # return original results
41
46
  block_result
42
47
  end
43
48
 
49
+ def create_html_page(dst_svg)
50
+ basename = File.basename(dst_svg)
51
+ <<-HTML
52
+ <!DOCTYPE html>
53
+ <html>
54
+ <head>
55
+ <meta name="viewport" content="initial-scale=1">
56
+ <title>Flame: #{basename}</title>
57
+
58
+ <style type="text/css">
59
+ html, body {
60
+ padding: 0;
61
+ margin: 0;
62
+ }
63
+
64
+ .full-width {
65
+ max-width: 100%;
66
+ width: 100%;
67
+ height: auto;
68
+ }
69
+ </style>
70
+ </head>
71
+ <body>
72
+ <object class="full-width" type="image/svg+xml" data="#{URI.encode(basename)}">Your browser does not support SVGs</object>
73
+ </body>
74
+ </html>
75
+ HTML
76
+ end
77
+
44
78
  def dest_dir
45
79
  if defined? Rails
46
80
  Rails.root.join('tmp', 'flames')
@@ -1,3 +1,3 @@
1
1
  module Flameboyant
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flameboyant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Pierce