Commit 36890b3f authored by Thong Kuah's avatar Thong Kuah Committed by Marcia Ramos

Enable raw stackprof collection for flamegraphs

Also add documentation on how to generate flamegraphs.
parent fb650c46
...@@ -8,9 +8,10 @@ require 'spec_helper' ...@@ -8,9 +8,10 @@ require 'spec_helper'
filename = ARGV[0].split('/').last filename = ARGV[0].split('/').last
interval = ENV.fetch('INTERVAL', 1000).to_i interval = ENV.fetch('INTERVAL', 1000).to_i
limit = ENV.fetch('LIMIT', 20) limit = ENV.fetch('LIMIT', 20)
raw = ENV.fetch('RAW', false) == 'true'
output_file = "tmp/#{filename}.dump" output_file = "tmp/#{filename}.dump"
StackProf.run(mode: :wall, out: output_file, interval: interval) do StackProf.run(mode: :wall, out: output_file, interval: interval, raw: raw) do
RSpec::Core::Runner.run(ARGV, $stderr, $stdout) RSpec::Core::Runner.run(ARGV, $stderr, $stdout)
end end
......
...@@ -173,11 +173,30 @@ dot -Tsvg project_policy_spec.dot > project_policy_spec.svg ...@@ -173,11 +173,30 @@ dot -Tsvg project_policy_spec.dot > project_policy_spec.svg
To load the profile in [kcachegrind](https://kcachegrind.github.io/): To load the profile in [kcachegrind](https://kcachegrind.github.io/):
```shell ```shell
stackprof tmp/project_policy_spec.dump --callgrind > project_policy_spec.callgrind stackprof tmp/project_policy_spec.rb.dump --callgrind > project_policy_spec.callgrind
kcachegrind project_policy_spec.callgrind # Linux kcachegrind project_policy_spec.callgrind # Linux
qcachegrind project_policy_spec.callgrind # Mac qcachegrind project_policy_spec.callgrind # Mac
``` ```
For flamegraphs, enable raw collection first. Note that raw
collection can generate a very large file, so increase the `INTERVAL`, or
run on a smaller number of specs for smaller file size:
```shell
RAW=true bin/rspec-stackprof spec/policies/group_member_policy_spec.rb
```
You can then generate, and view the resultant flamegraph. It might take a
while to generate based on the output file size:
```shell
# Generate
stackprof --flamegraph tmp/group_member_policy_spec.rb.dump > group_member_policy_spec.flame
# View
stackprof --flamegraph-viewer=group_member_policy_spec.flame
```
It may be useful to zoom in on a specific method, for example: It may be useful to zoom in on a specific method, for example:
```shell ```shell
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment