[igt-dev] [PATCH i-g-t 1/8] trace.pl: Improve time axis labels
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Thu Jul 19 09:39:27 UTC 2018
On 18/07/2018 21:03, John Harrison wrote:
> On 7/18/2018 2:45 AM, Tvrtko Ursulin wrote:
>> From: Tvrtko Ursulin <tvrtko.ursulin at 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 at intel.com>
>> Suggested-by: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: John Harrison <John.C.Harrison at Intel.com>
>> Reviewed-by: John Harrison <John.C.Harrison at 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!
A moving red line? I never saw that! In any browser?
> Ship it :)
I have shipped it, thanks!
I have resent the remaining two unreviewed patches, plus two new ones.
One is a fix for frequency timeline, and another is bringing back (now
working) stacking button. (But it is off by default.)
Regards,
Tvrtko
More information about the igt-dev
mailing list