Skip to content

Instantly share code, notes, and snippets.

@Xliff
Created August 31, 2019 11:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xliff/5bec8c5a2c30ef45f71d3e6a45d16e91 to your computer and use it in GitHub Desktop.
Save Xliff/5bec8c5a2c30ef45f71d3e6a45d16e91 to your computer and use it in GitHub Desktop.
On Parsing StageStats...

@timotimo did a good job on redoing stagestats to show all of the dependencies in a tree-like format. Here's a grammar that will parse it.

Note: It may need some massaging for your own use. This is from my p6-GtkProject.

my $ss = q:to/SS/;
=== Module ===
Stage start      :   0.000

    precomp ../p6-GtkPlus/lib/GTK/Compat/Pixbuf.pm6
    Stage start      :   0.000
    
        precomp ../p6-GtkPlus/lib/GTK/Compat/Raw/Pixbuf.pm6
        Stage start      :   0.000
        Stage parse      :   2.104
        Stage syntaxcheck:   0.000
        Stage ast        :   0.000
        Stage optimize   :   0.048
        Stage mast       :   0.171
        Stage mbc        :   0.005
    
        precomp ../p6-GtkPlus/lib/GTK/Compat/Pixbuf/Transforms.pm6
        Stage start      :   0.000
        
            precomp ../p6-GtkPlus/lib/GTK/Compat/Raw/Pixbuf/Transforms.pm6
            Stage start      :   0.000
            Stage parse      :   0.758
            Stage syntaxcheck:   0.000
            Stage ast        :   0.000
            Stage optimize   :   0.017
            Stage mast       :   0.053
            Stage mbc        :   0.003
        Stage parse      :   1.739
        Stage syntaxcheck:   0.000
        Stage ast        :   0.000
        Stage optimize   :   0.017
        Stage mast       :   0.054
        Stage mbc        :   0.002
    Stage parse      :   5.901
    Stage syntaxcheck:   0.000
    Stage ast        :   0.000
    Stage optimize   :   0.137
    Stage mast       :   0.167
    Stage mbc        :   0.005

    precomp ../p6-GtkPlus/lib/GTK/Compat/Raw/Cursor.pm6
    Stage start      :   0.000
    Stage parse      :   0.880
    Stage syntaxcheck:   0.000
    Stage ast        :   0.000
    Stage optimize   :   0.011
    Stage mast       :   0.058
    Stage mbc        :   0.003
Stage parse      :   8.468
Stage syntaxcheck:   0.000
Stage ast        :   0.000
Stage optimize   :   0.015
Stage mast       :   0.058
Stage mbc        :   0.002
SS

grammar ParseBuildResults {
  regex TOP {
    <top_section>?
    <section>*
    \v+
    <summary>*
  }
  regex top_section {
    ^^ 'Dependency Generation' \s+
    ^^ '=====================' \v+
    <summary>*
  }
  regex section {
    <header> \s+ <stage>*
  }
  # regex summary {
  #   <summary_type> \s* $<min>=(\d+) 'm' <sec=num> 's' \s*
  # }
  regex summary {
    <summary_type> \s+ <num> \s+
  }
  regex header {
    ^^ \s* '=== ' <module> ' ===' $$
  }
   regex stage {
     ^^ \s* 'Stage ' <stage_type> \s* ':' [
       \s* <num> \s*
       |
       \s* <err_msg> \s*
     ]
     [ \s* 'precomp' \s* .+? \s* <stage>* ]?
  }
  regex err_msg {
    '===SORRY!===' .+? <?before \v '==='> $$
  }
  token module {
    $<name>=[ (\w+)+ % '::' ] [\h* $<salt>='*']?
  }
  token num {
    \d+ '.' \d+
  }
  token stage_type {
    'start'    | 'parse' | 'syntaxcheck' | 'ast' |
    'optimize' | 'mast'  | 'mbc'         | 'moar'
  }
  token summary_type{
    'real' | 'user' | 'sys'
  }
}

my $m = ParseBuildResults.parse($ss);
$m.gist.say
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment