diff --git a/src/HLL/Compiler.nqp b/src/HLL/Compiler.nqp index a1f8040ec8..eceab803dd 100644 --- a/src/HLL/Compiler.nqp +++ b/src/HLL/Compiler.nqp @@ -20,7 +20,7 @@ class HLL::Compiler does HLL::Backend::Default { @!stages := nqp::split(' ', 'start parse ast ' ~ $!backend.stages()); # Command options and usage. - @!cmdoptions := nqp::split(' ', 'e=s help|h target=s trace|t=s encoding=s output|o=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile profile-compile'); + @!cmdoptions := nqp::split(' ', 'e=s help|h target=s trace|t=s encoding=s output|o=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile profile-compile profile-filename=s'); %!config := nqp::hash(); } @@ -148,7 +148,7 @@ class HLL::Compiler does HLL::Backend::Default { } if (%adverbs) { - $output := $!backend.run_profiled({ $output(|@args) }); + $output := $!backend.run_profiled({ $output(|@args) }, %adverbs); } elsif %adverbs { $output := $!backend.run_traced(%adverbs, { $output(|@args) }); diff --git a/src/vm/moar/HLL/Backend.nqp b/src/vm/moar/HLL/Backend.nqp index f1962501e8..d8043702ee 100644 --- a/src/vm/moar/HLL/Backend.nqp +++ b/src/vm/moar/HLL/Backend.nqp @@ -37,7 +37,7 @@ class HLL::Backend::MoarVM { ))))); } } - method run_profiled($what) { + method run_profiled($what, $filename) { my @END := nqp::gethllsym('perl6', '@END_PHASERS'); @END.push: -> { self.dump_profile_data($prof_end_sub()) } if nqp::defined(@END); self.ensure_prof_routines(); @@ -45,11 +45,11 @@ class HLL::Backend::MoarVM { my $res := $what(); unless nqp::defined(@END) { my $data := $prof_end_sub(); - self.dump_profile_data($data); + self.dump_profile_data($data, $filename); } $res; } - method dump_profile_data($data) { + method dump_profile_data($data, $filename) { my @pieces := nqp::list_s(); sub post_process_call_graph_node($node) { @@ -137,9 +137,14 @@ class HLL::Backend::MoarVM { $template := slurp(nqp::backendconfig() ~ '/languages/nqp/lib/profiler/template.html'); } my $results := subst($template, /'{{{PROFIELR_OUTPUT}}}'/, $json); - my $filename := 'profile-' ~ nqp::time_n() ~ '.html'; - spew($filename, $results); - nqp::sayfh(nqp::getstderr(), "Wrote profiler output to $filename"); + if nqp::defined($filename) { + spew($filename, $results); + } + else { + my $filename := 'profile-' ~ nqp::time_n() ~ '.html'; + spew($filename, $results); + nqp::sayfh(nqp::getstderr(), "Wrote profiler output to $filename"); + } } method run_traced($level, $what) {