On 7/12/2018 3:59 AM, Tvrtko Ursulin wrote: > From: John Harrison > > Improve the timeline legend to show actual context colours. > > v2: (Tvrtko Ursulin) > * Commit msg. > * Tweak layout for more compactness and more readability. > > Signed-off-by: Tvrtko Ursulin > Cc: John Harrison > Cc: Tvrtko Ursulin > --- > scripts/trace.pl | 69 ++++++++++++++++++++++++++++++------------------ > 1 file changed, 43 insertions(+), 26 deletions(-) > > diff --git a/scripts/trace.pl b/scripts/trace.pl > index 7cafb3f52ba4..bd3039511f5d 100755 > --- a/scripts/trace.pl > +++ b/scripts/trace.pl > @@ -738,9 +738,35 @@ say sprintf('GPU: %.2f%% idle, %.2f%% busy', > $flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html; > > my $timeline_text = $colour_contexts ? > - 'Per context coloured shading like:' : 'Box shading like:'; > + 'per context coloured shading like' : 'box shading like'; > > my %ctx_colours; > +my $ctx_table; > + > +sub generate_ctx_table > +{ > + my @states = ('queue', 'ready', 'execute', 'ctxsave', 'incomplete'); > + my @ctxts; > + > + if( $colour_contexts ) { > + @ctxts = sort keys %ctxdb; > + } else { > + @ctxts = ($min_ctx); > + } > + > + $ctx_table .= ''; > + > + foreach my $ctx (@ctxts) { > + $ctx_table .= "\n"; > + $ctx_table .= " \n" if $colour_contexts; > + foreach my $state (@states) { > + $ctx_table .= " \n"; > + } > + $ctx_table .= "\n"; As mentioned in the email, I would definitely add something like:     my $i = 0;     ...     if( $i++ > 5)  {         $ctx_table .= "";         last;     } I've had to analyse traces with hundreds of contexts in them before now. Which would produce an HTML file swamped by a huge legend (albeit with a beautifully smoothly shaded rainbow!). With that... Signed-off-by: John Harrison Reviewed-by: John Harrison > + } > + > + $ctx_table .= '
Context $ctx
" . uc($state) . "
etc...
'; > +} > > sub generate_ctx_colours > { > @@ -754,12 +780,7 @@ sub generate_ctx_colours > > > generate_ctx_colours() if $html and $colour_contexts; > - > -my $queued_style = box_style($min_ctx, 'queue'); > -my $ready_style = box_style($min_ctx, 'ready'); > -my $execute_style = box_style($min_ctx, 'execute'); > -my $ctxsave_style = box_style($min_ctx, 'ctxsave'); > -my $incomplete_style = box_style($min_ctx, 'incomplete'); > +generate_ctx_table() if $html; > > print < > @@ -778,35 +799,27 @@ print < > >

> -Timeline request view: > +Timeline request view is $timeline_text: > > - > > - > - > - > - > - > - > - > - > - > -
$timeline_text
QUEUED
READY
EXECUTE
CTXSAVE
(INCOMPLETE)
> -

> -

> - > -QUEUED = requests executing on the GPU
> + > +$ctx_table > + > + > +QUEUE = requests executing on the GPU
> READY = runnable requests waiting for a slot on GPU
> EXECUTE = requests waiting on fences and dependencies before they are runnable
> CTXSAVE = GPU saving the context image
> -
> -

> +INCOMPLETE = request of unknown completion time >

> Boxes are in format 'ctx-id/seqno'. >

>

> Use Ctrl+scroll-action to zoom-in/out and scroll-action or dragging to move around the timeline. >

> + > + > + >

> GPU idle: $flat_busy{'gpu-idle'}% >
> @@ -975,20 +988,24 @@ sub box_style > { > my ($ctx, $stage) = @_; > my $deg; > + my $text_col = 'white'; > > if ($stage eq 'queue') { > $deg = 90; > + $text_col = 'black' if $colour_contexts; > } elsif ($stage eq 'ready') { > $deg = 45; > } elsif ($stage eq 'execute') { > $deg = 0; > + $text_col = 'black' if $colour_contexts; > } elsif ($stage eq 'ctxsave') { > $deg = 105; > + $text_col = 'black' if $colour_contexts; > } elsif ($stage eq 'incomplete') { > $deg = 0; > } > > - return 'color: black; background: repeating-linear-gradient(' . > + return "color: $text_col; background: repeating-linear-gradient(" . > $deg . 'deg, ' . > ctx_colour($ctx, $stage, 1.0) . ', ' . > ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .