Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: John Harrison <John.C.Harrison@Intel.com>
To: Tvrtko Ursulin <tursulin@ursulin.net>, igt-dev@lists.freedesktop.org
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH i-g-t 1/8] trace.pl: Improve time axis labels
Date: Wed, 18 Jul 2018 13:03:20 -0700	[thread overview]
Message-ID: <da140ff7-67fc-0d48-c2de-da2fb9b1163a@Intel.com> (raw)
In-Reply-To: <20180718094514.5903-2-tvrtko.ursulin@linux.intel.com>

On 7/18/2018 2:45 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> It is possible to customize the axis display so change it to display
> timestamps in seconds on the major axis (with six decimal spaces) and
> millisecond offsets on the minor axis.
>
> v2:
>   * Give up on broken relative timestamps.
>
> v3:
>   * Drop all date complications and just use micro seconds throughout.
>     (John Harrison)
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> Reviewed-by: John Harrison <John.C.Harrison@Intel.com> # v2
> ---
>   scripts/trace.pl | 72 ++++++++++++++++++++++++++++++++----------------
>   1 file changed, 48 insertions(+), 24 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index fc1713e4f9a7..3ad5effafd0a 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -329,20 +329,6 @@ sub sanitize_ctx
>   	}
>   }
>   
> -sub ts
> -{
> -	my ($us) = @_;
> -	my ($y, $mo, $d, $h, $m, $s);
> -
> -	$s = int($us / 1000000);
> -	$us = $us % 1000000;
> -
> -	($s, $m, $h, $d, $mo, $y) = gmtime($s);
> -
> -	return sprintf('%04u-%02u-%02u %02u:%02u:%02u.%06u',
> -		        $y, 1 + $mo, $d, $h, $m, $s, int($us));
> -}
> -
>   # Main input loop - parse lines and build the internal representation of the
>   # trace using a hash of requests and some auxilliary data structures.
>   my $prev_freq = 0;
> @@ -912,7 +898,7 @@ foreach my $key (sort sortQueue keys %db) {
>   		$style = 'color: black; background-color: ' .
>   			 ctx_colour($ctx, 'queue');
>   		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
> -		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
> +		$startend = 'start: ' . $queue . ', end: ' . $submit;
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
>   		$i++;
>   	}
> @@ -923,7 +909,7 @@ foreach my $key (sort sortQueue keys %db) {
>   		$style = 'color: black; background-color: ' .
>   			 ctx_colour($ctx, 'ready');
>   		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
> -		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
> +		$startend = 'start: ' . $submit . ', end: ' . $start;
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
>   		$i++;
>   	}
> @@ -942,7 +928,7 @@ foreach my $key (sort sortQueue keys %db) {
>   		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
>   		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
>   		$content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>";
> -		$startend = 'start: \'' . ts($start) . '\', end: \'' . ts($notify) . '\'';
> +		$startend = 'start: ' . $start . ', end: ' . $notify;
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
>   		$i++;
>   	}
> @@ -956,7 +942,7 @@ foreach my $key (sort sortQueue keys %db) {
>   		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
>   		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
>   		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
> -		$startend = 'start: \'' . ts($notify) . '\', end: \'' . ts($end) . '\'';
> +		$startend = 'start: ' . $notify . ', end: ' . $end;
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
>   		$i++;
>   	}
> @@ -974,7 +960,7 @@ foreach my $item (@freqs) {
>   
>   	$start = $first_ts if $start < $first_ts;
>   	$end = $last_ts if $end > $last_ts;
> -	$startend = 'start: \'' . ts($start) . '\', end: \'' . ts($end) . '\'';
> +	$startend = 'start: ' . $start . ', end: ' . $end;
>   	print "\t{id: $i, type: 'range', group: 0, content: '$freq', $startend},\n";
>   	$i++;
>   }
> @@ -988,18 +974,55 @@ if ($gpu_timeline) {
>   
>   		$start = $first_ts if $start < $first_ts;
>   		$end = $last_ts if $end > $last_ts;
> -		$startend = 'start: \'' . ts($start) . '\', end: \'' . ts($end) . '\'';
> +		$startend = 'start: ' . $start . ', end: ' . $end;
>   		print "\t{id: $i, type: 'range', group: 1, $startend},\n";
>   		$i++;
>   	}
>   }
>   
> -my $end_ts = ts($first_ts + $width_us);
> -$first_ts = ts($first_ts);
> +my $end_ts = $first_ts + $width_us;
> +$first_ts = $first_ts;
>   
>   print <<ENDHTML;
>     ]);
>   
> +  function majorAxis(date, scale, step) {
> +	var s = date / 1000000;
> +	var precision;
> +
> +	if (scale == 'millisecond')
> +		precision = 6;
> +	else if (scale == 'second')
> +		precision = 3;
> +	else
> +		precision = 0;
> +
> +	return s.toFixed(precision) + "s";
> +  }
> +
> +  function minorAxis(date, scale, step) {
> +	var t = date;
> +	var precision;
> +	var unit;
> +
> +	if (scale == 'millisecond') {
> +		t %= 1000;
> +		precision = 0;
> +		unit = 'us';
> +	} else if (scale == 'second') {
> +		t /= 1000;
> +		t %= 1000;
> +		precision = 0;
> +		unit = 'ms';
> +	} else {
> +		t /= 1000000;
> +		precision = 1;
> +		unit = 's';
> +	}
> +
> +	return t.toFixed(precision) + unit;
> +  }
> +
>     // Configuration for the Timeline
>     var options = { groupOrder: 'content',
>   		  horizontalScroll: true,
> @@ -1007,8 +1030,9 @@ print <<ENDHTML;
>   		  stackSubgroups: false,
>   		  zoomKey: 'ctrlKey',
>   		  orientation: 'top',
> -		  start: '$first_ts',
> -		  end: '$end_ts'};
> +		  format: { majorLabels: majorAxis, minorLabels: minorAxis },
> +		  start: $first_ts,
> +		  end: $end_ts};
>   
>     // Create a Timeline
>     var timeline = new vis.Timeline(container, items, groups, options);

Woohoo!

This one seems to work fine on both Firefox and Chrome. It even works on 
IE and Edge unlike the previous version! I guess they can only cope with 
raw times not dates!?

One thing I've just noticed is that there is also a 'now' line on the 
timeline - a red vertical bar across the entire timeline. On the old 
'date' versions, it was following the current system time and hence 
wandering forwards at one second per second. On this version, it is out 
of position and advancing at one millisecond per second. Presumably 
because you are scaling the axes by a factor of one thousand in order to 
gain the necessary precision in the plot. Something of a curiosity but 
certainly not a problem!

Ship it :)

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2018-07-18 20:03 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-18  9:45 [PATCH i-g-t 0/8] trace.pl fixes and improvements Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 1/8] trace.pl: Improve time axis labels Tvrtko Ursulin
2018-07-18 20:03   ` John Harrison [this message]
2018-07-19  9:39     ` [igt-dev] " Tvrtko Ursulin
2018-07-27 22:22       ` John Harrison
2018-07-18  9:45 ` [PATCH i-g-t 2/8] trace.pl: Improve readability of graphical timeline representation Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 3/8] trace.pl: Improve context colouring for large context id's Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 4/8] trace.pl: Improved key/colours Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 5/8] trace.pl: Context save only applies to last request of a bunch Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 6/8] trace.pl: Fix incomplete request handling Tvrtko Ursulin
2018-07-18  9:45 ` [PATCH i-g-t 7/8] trace.pl: Basic preemption support Tvrtko Ursulin
2018-07-18 20:13   ` [igt-dev] " John Harrison
2018-07-18  9:45 ` [PATCH i-g-t 8/8] trace.pl: Fix request split mode Tvrtko Ursulin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=da140ff7-67fc-0d48-c2de-da2fb9b1163a@Intel.com \
    --to=john.c.harrison@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=tursulin@ursulin.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox