diff mbox

[igt-dev,i-g-t,v2,1/9] trace.pl: Improve time axis labels

Message ID 67dccb96-1f8f-23b5-b547-283e1c97632e@ursulin.net (mailing list archive)
State New, archived
Headers show

Commit Message

Tvrtko Ursulin July 17, 2018, 4:22 p.m. UTC
On 17/07/18 16:31, John Harrison wrote:
> On 7/17/2018 8:11 AM, John Harrison wrote:
>> On 7/17/2018 1:56 AM, Tvrtko Ursulin wrote:
>>>
>>> On 16/07/2018 18:53, John Harrison wrote:
>>>> On 7/13/2018 2:55 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.
>>>>>
>>>>> 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>
>>>>> ---
>>>>>   scripts/trace.pl | 37 +++++++++++++++++++++++++++++++++++++
>>>>>   1 file changed, 37 insertions(+)
>>>>>
>>>>> diff --git a/scripts/trace.pl b/scripts/trace.pl
>>>>> index fc1713e4f9a7..41f10749a153 100755
>>>>> --- a/scripts/trace.pl
>>>>> +++ b/scripts/trace.pl
>>>>> @@ -1000,6 +1000,42 @@ $first_ts = ts($first_ts);
>>>>>   print <<ENDHTML;
>>>>>     ]);
>>>>>   +  function majorAxis(date, scale, step) {
>>>>> +    var s = date / 1000;
>>>>> +    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 ms = date;
>>>>> +    var precision;
>>>>> +    var unit;
>>>>> +
>>>>> +    if (scale == 'millisecond') {
>>>>> +        ms %= 1000;
>>>>> +        precision = 0;
>>>>> +        unit = 'ms';
>>>>> +    } else if (scale == 'second') {
>>>>> +        ms /= 1000;
>>>>> +        precision = 1;
>>>>> +        unit = 's';
>>>>> +    } else {
>>>>> +        ms /= 1000;
>>>>> +        precision = 0;
>>>>> +        unit = 's';
>>>>> +    }
>>>>> +
>>>>> +    return ms.toFixed(precision) + unit;
>>>>> +  }
>>>>> +
>>>>>     // Configuration for the Timeline
>>>>>     var options = { groupOrder: 'content',
>>>>>             horizontalScroll: true,
>>>>> @@ -1007,6 +1043,7 @@ print <<ENDHTML;
>>>>>             stackSubgroups: false,
>>>>>             zoomKey: 'ctrlKey',
>>>>>             orientation: 'top',
>>>>> +          format: { majorLabels: majorAxis, minorLabels: minorAxis },
>>>>>             start: '$first_ts',
>>>>>             end: '$end_ts'};
>>>>
>>>> I'm still seeing some kind of strange offset. However, it appears to 
>>>> be browser dependent. If I use Chrome then the offset is +28.8 
>>>> seconds. With Firefox it is -59958115.2 seconds! On the other hand, 
>>>> if I try Edge or IE then I don't get a graph at all. I'm wondering 
>>>> if the issue is with Vis browser compatibility rather than anything 
>>>> in the trace.pl script. Are you seeing anything at all similar?
>>>>
>>>> Hmm, if I comment out the 'format:' line and go back to the 
>>>> unformatted time stamps then IE & Edge still show nothing. However, 
>>>> Firefox shows dates based on a year of 0097 whereas Chrome says 1997.
>>>>
>>>> Either way, I can't spot anything in this patch that could cause a 
>>>> random offset. So...
>>>
>>> Yeah, I can see that now that I tried in Firefox. I was using 
>>> Chromium so far and there timestamps are exactly matching the ones 
>>> from the tracepoint log. Which is what we want for easy correlation 
>>> between the log and HTML..
>>>
>>> Firefox corrupts that somehow by applying the large negative offset 
>>> to everyhting. Perhaps around two year worth of negative seconds if 
>>> my rough calculation can be trusted. Or Vis under Firefox, I wouldn't 
>>> know really who is to blame.
>>>
>>> I have no idea what to do here. :(
>>>
>>> Regards,
>>>
>>> Tvrtko
>>
>> I think ship it for now. It is better than it was. Certainly reporting 
>> in date format is vaguely meaningless at best and totally meaningless 
>> with the x1000 scale factor.
>>
>> Note that chromium on Ubuntu 16.04 does the same as Chrome on Windows 
>> for me - 28.8 seconds offset. It's not as bad as the 1.9 years of 
>> Firefox but it is still out :(. I'm guessing it is a bug in the date 
>> -> absolute seconds conversion going on within either Javascript 
>> itself or Vis in particular. The timestamps are still encoded as dates 
>> in the HTML file (and referenced from 0 not from 1900 or 1970 or 
>> whatever). So any difference in calculating leap years between the 
>> Perl script and the browser would potentially cause quite a 
>> significant delta.
>>
>> Is it at all possible to put absolute seconds style values in the HTML 
>> file instead of dates? That would seem like the obvious answer. I 
>> don't know if Vis would cope with that, though?
>>
>> John.
>>
> 
> Hmm. It looks like if I change the 'ts()' function to use 'localtime()' 
> instead of 'gmtime()' and to add on 1900 to the year then it all works 
> fine for me :). So yes, I think it is some incompatibility between the 
> Perl and Javascript implementations of date <-> absolute seconds 
> conversions. Given that the timestamp is no longer being reported as an 
> actual date anymore, the relative value doesn't really matter. So I 
> would go with using whatever scheme produces the least mutation along 
> the way!
> 
> I wonder if you see the correct values on Chrome because your logs have 
> smaller timestamps? The ones I am currently testing with are of the 
> order of 856985.688681. With the above tweaks, that comes out as a date 
> of '1997-02-26 11:34:48.681000'. The 'gmtime' version was '1997-02-26 
> 19:34:48.681000' and obviously the non-1900 version was '0097-02-26 
> 19:34:48.681000'. Actually, maybe the Chrome difference is because you 
> are in the UK and don't have a timezone delta? Although I would assume 
> you are on BST not GMT right now?

Can you try leaving gmtime in ts() and adding this diff:

Could be the gotcha we were missing!

Regards,

Tvrtko

Comments

John Harrison July 17, 2018, 5:57 p.m. UTC | #1
On 7/17/2018 9:22 AM, Tvrtko Ursulin wrote:
> On 17/07/18 16:31, John Harrison wrote:
>> On 7/17/2018 8:11 AM, John Harrison wrote:
>>> On 7/17/2018 1:56 AM, Tvrtko Ursulin wrote:
>>>> On 16/07/2018 18:53, John Harrison wrote:
>>>>> On 7/13/2018 2:55 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.
>>>>>>
>>>>>> 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>
>>>>>> ---
>>>>>>    scripts/trace.pl | 37 +++++++++++++++++++++++++++++++++++++
>>>>>>    1 file changed, 37 insertions(+)
>>>>>>
>>>>>> diff --git a/scripts/trace.pl b/scripts/trace.pl
>>>>>> index fc1713e4f9a7..41f10749a153 100755
>>>>>> --- a/scripts/trace.pl
>>>>>> +++ b/scripts/trace.pl
>>>>>> @@ -1000,6 +1000,42 @@ $first_ts = ts($first_ts);
>>>>>>    print <<ENDHTML;
>>>>>>      ]);
>>>>>>    +  function majorAxis(date, scale, step) {
>>>>>> +    var s = date / 1000;
>>>>>> +    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 ms = date;
>>>>>> +    var precision;
>>>>>> +    var unit;
>>>>>> +
>>>>>> +    if (scale == 'millisecond') {
>>>>>> +        ms %= 1000;
>>>>>> +        precision = 0;
>>>>>> +        unit = 'ms';
>>>>>> +    } else if (scale == 'second') {
>>>>>> +        ms /= 1000;
>>>>>> +        precision = 1;
>>>>>> +        unit = 's';
>>>>>> +    } else {
>>>>>> +        ms /= 1000;
>>>>>> +        precision = 0;
>>>>>> +        unit = 's';
>>>>>> +    }
>>>>>> +
>>>>>> +    return ms.toFixed(precision) + unit;
>>>>>> +  }
>>>>>> +
>>>>>>      // Configuration for the Timeline
>>>>>>      var options = { groupOrder: 'content',
>>>>>>              horizontalScroll: true,
>>>>>> @@ -1007,6 +1043,7 @@ print <<ENDHTML;
>>>>>>              stackSubgroups: false,
>>>>>>              zoomKey: 'ctrlKey',
>>>>>>              orientation: 'top',
>>>>>> +          format: { majorLabels: majorAxis, minorLabels: minorAxis },
>>>>>>              start: '$first_ts',
>>>>>>              end: '$end_ts'};
>>>>> I'm still seeing some kind of strange offset. However, it appears to
>>>>> be browser dependent. If I use Chrome then the offset is +28.8
>>>>> seconds. With Firefox it is -59958115.2 seconds! On the other hand,
>>>>> if I try Edge or IE then I don't get a graph at all. I'm wondering
>>>>> if the issue is with Vis browser compatibility rather than anything
>>>>> in the trace.pl script. Are you seeing anything at all similar?
>>>>>
>>>>> Hmm, if I comment out the 'format:' line and go back to the
>>>>> unformatted time stamps then IE & Edge still show nothing. However,
>>>>> Firefox shows dates based on a year of 0097 whereas Chrome says 1997.
>>>>>
>>>>> Either way, I can't spot anything in this patch that could cause a
>>>>> random offset. So...
>>>> Yeah, I can see that now that I tried in Firefox. I was using
>>>> Chromium so far and there timestamps are exactly matching the ones
>>>> from the tracepoint log. Which is what we want for easy correlation
>>>> between the log and HTML..
>>>>
>>>> Firefox corrupts that somehow by applying the large negative offset
>>>> to everyhting. Perhaps around two year worth of negative seconds if
>>>> my rough calculation can be trusted. Or Vis under Firefox, I wouldn't
>>>> know really who is to blame.
>>>>
>>>> I have no idea what to do here. :(
>>>>
>>>> Regards,
>>>>
>>>> Tvrtko
>>> I think ship it for now. It is better than it was. Certainly reporting
>>> in date format is vaguely meaningless at best and totally meaningless
>>> with the x1000 scale factor.
>>>
>>> Note that chromium on Ubuntu 16.04 does the same as Chrome on Windows
>>> for me - 28.8 seconds offset. It's not as bad as the 1.9 years of
>>> Firefox but it is still out :(. I'm guessing it is a bug in the date
>>> -> absolute seconds conversion going on within either Javascript
>>> itself or Vis in particular. The timestamps are still encoded as dates
>>> in the HTML file (and referenced from 0 not from 1900 or 1970 or
>>> whatever). So any difference in calculating leap years between the
>>> Perl script and the browser would potentially cause quite a
>>> significant delta.
>>>
>>> Is it at all possible to put absolute seconds style values in the HTML
>>> file instead of dates? That would seem like the obvious answer. I
>>> don't know if Vis would cope with that, though?
>>>
>>> John.
>>>
>> Hmm. It looks like if I change the 'ts()' function to use 'localtime()'
>> instead of 'gmtime()' and to add on 1900 to the year then it all works
>> fine for me :). So yes, I think it is some incompatibility between the
>> Perl and Javascript implementations of date <-> absolute seconds
>> conversions. Given that the timestamp is no longer being reported as an
>> actual date anymore, the relative value doesn't really matter. So I
>> would go with using whatever scheme produces the least mutation along
>> the way!
>>
>> I wonder if you see the correct values on Chrome because your logs have
>> smaller timestamps? The ones I am currently testing with are of the
>> order of 856985.688681. With the above tweaks, that comes out as a date
>> of '1997-02-26 11:34:48.681000'. The 'gmtime' version was '1997-02-26
>> 19:34:48.681000' and obviously the non-1900 version was '0097-02-26
>> 19:34:48.681000'. Actually, maybe the Chrome difference is because you
>> are in the UK and don't have a timezone delta? Although I would assume
>> you are on BST not GMT right now?
> Can you try leaving gmtime in ts() and adding this diff:
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index 88abc2ee5ebf..2e43b68e3163 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -1338,6 +1338,10 @@ print <<ENDHTML;
>                    zoomKey: 'ctrlKey',
>                    orientation: 'top',
>                    format: { majorLabels: majorAxis, minorLabels: minorAxis },
> +  moment: function(date) {
> +    return vis.moment(date).utc();
> +  },
> +
>                    start: '$first_ts',
>                    end: '$end_ts'};
>
> Could be the gotcha we were missing!
>
> Regards,
>
> Tvrtko

Doesn't seem to make a difference for me :(. The +1900 gets rid of the 
massive negative offset in Firefox but only the localtime() fixes the 
28.8s offset in both Firefox and Chrome.
diff mbox

Patch

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 88abc2ee5ebf..2e43b68e3163 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -1338,6 +1338,10 @@  print <<ENDHTML;
                  zoomKey: 'ctrlKey',
                  orientation: 'top',
                  format: { majorLabels: majorAxis, minorLabels: minorAxis },
+  moment: function(date) {
+    return vis.moment(date).utc();
+  },
+
                  start: '$first_ts',
                  end: '$end_ts'};