Commit Graph

15 Commits

Author SHA1 Message Date
Andrea Marchesini
73da7daec1 Bug 1425458 - Resource timing entries Workers - part 2 - PerformanceTimingData, r=smaug 2018-01-24 17:17:31 +01:00
Tom Ritter
8dec05b890 Bug 1429764 Do not call ReduceTimerPrecision twice for DOM Navigation timers r=bkelly,timhuang
Bug 1429764 details a test failure that was asserting that the performance navigation
timers were strictly increasing (or equal). fetchStart should have a timestamp before
domainLookupStart.  But it didn't.

The problem is two-fold.  This corrects the test and the issue by addressing one part
of the problem, the second part of the problem needs to be written up in a new bug
and addressed there. (That bug is not yet filed at writing, but see dependencies of
1429764 in the future to find it.)

The second, and underlying, problem is that calling ReduceTimerPrecision with the
same value multiple times may continually reduce it. Meaning that the first you call
it with, say, .75, (and a precision of .20), it will be reduced to .6. The second time
you call it (with .6), instead of staying at .6 it will be reduced to .4. This is
because floats are fuzzy. Inside ReduceTimerPrecision we are multiplying a decimal by
a decimal, so while floor(.6 / .20)  should equal 3, sometimes it's actually 2.999...
which gets floors to 2, gets multiplied again by .2, and which results in .4

If that's the underlying problem, the first, and surface, problem is - why are we
calling ReduceTimerPrecision multiple times? We shouldn't be. That's what this
patch fixes.

TimeStampToDOMHighResOrFetchStart will return either TimeStampToDOMHighRes() or
FetchStartHighRes(). FetchStartHighRes() internally calls TimeStampToDOMHighRes
and then ReduceTimerPrecision - this is where (some of) the two reduction calls
happen - because TimeStampToDOMHighRes itself calls ReduceTimerPrecision also.

I remove the ReduceTimerPrecision from TimeStampToDOMHighRes. FetchStartHighRes
will now only call ReduceTimerPrecision once, at the end of the return.

But we have to fix places we call TimeStampToDOMHighResOrFetchStart, because the
callers of that function also call ReduceTimerPrecision. So if
TimeStampToDOMHighResOrFetchStart returned FetchStartHighRes, we'd be calling
ReduceTimerPrecision twice for those callers.

So inside first off, we remove the outer call to ReduceTimerPrecision. that
surrounds the 5 or so callsites of TimeStampToDOMHighResOrFetchStart. Then
inside of TimeStampToDOMHighResOrFetchStart we return either FetchStartHighRes
(which is has already called ReduceTimerPrecision) or we call
ReduceTimerPrecision with the value.

Now. TimeStampToDOMHighRes was used in more places than just FetchStartHighRes -
there were several other places where we were doing double rounding, and this
fixed those as well. AsyncOpenHighRes, WorkerStartHighRes, DomainLookupEndHighRes,
ConnectStartHighRes, SecureConnectionStartHighRes, ConnectEndHighRes, and
ResponseEndHighRes.

MozReview-Commit-ID: K5nHql135rb
2018-01-12 13:36:04 -06:00
Tom Ritter
070e736544 Bug 1424341 Round the Performance Timing APIs when privacy.reduceTimerPrecision is set r=bkelly,timhuang
MozReview-Commit-ID: LrAmrIfKk39
2018-01-10 15:51:23 -06:00
Dragana Damjanovic
11ba0b856f Bug 1417431 - secureConnectionStart should be 0 for pages with HTTP scheme. r=bkelly 2017-12-06 12:57:28 +01:00
Ben Kelly
2cc09eac02 Bug 1204254 P14 Stop faking responseStart/End directly and make PerformanceTiming map SW specific timings instead. r=asuth 2017-10-17 13:38:56 -07:00
Ben Kelly
89d98f1d6c Bug 1191943 P1 Implement PerformanceResourceTiming.workerStart. r=asuth 2017-10-06 09:04:54 -07:00
Ben Kelly
7e55863da4 Bug 1405739 P1 Don't expose internal redirect start/end/count through performance timing API. r=valentin 2017-10-06 09:04:54 -07:00
Patrick McManus
f75e6f88c2 Bug 772589 - Implement the secureConnectionStart property for the PerformanceTiming interface r=bkelly,dragana,francois,Honza
Implements PerformanceTiming, nsITimedChannel, and devtools 'tls setup'

Also captures telemetry on this as we do for all other attributes of timedChannel

Also propogates some null transaction timings onto first real
transaction of a connection

MozReview-Commit-ID: 47TQJYVHnKC
2017-07-10 15:01:35 -04:00
Perry Jiang
a91002a8b6 Bug 1377251 - Expose TIME_TO_NON_BLANK_PAINT as Performance Entry behind pref. r=qDot 2017-07-05 16:51:50 -07:00
Wes Kocher
a43241d03f Backed out changeset 5f7d4b62f6e4 (bug 1377251) for test_toJSON.html failures a=backout
MozReview-Commit-ID: JdRvGn6MQXn
2017-07-07 17:08:35 -07:00
Perry Jiang
4ff9c28002 Bug 1377251 - Expose TIME_TO_NON_BLANK_PAINT as Performance Entry behind pref. r=qdot
MozReview-Commit-ID: 4WPeEzBnGnk
2017-07-05 16:51:50 -07:00
Tim Huang
70b377a07b Bug 1369303 - Part 2: Marking the performance timing API always reports 0 and the access of resource timing and user timing becomes NOP when 'privacy.resistFingerprinting' is true. r=arthuredelstein,baku
This patch is going to neutralize the threat of fingerprinting of performance API
by spoofing the value of performance timing into 0, making getEntries* functions
always returns an empty list and making mark() and measure() into NOP methods.

In addition, this patch changes nsContentUtils::ShouldResistFingerprinting() to
allow it can be called in both main thread and worker threads.

MozReview-Commit-ID: C8Jt7KEMe5e
2017-06-15 16:48:27 +08:00
Wei-Cheng Pan
ddfe21e355 Bug 1344893 - Part 2: Add time to first byte metric. r=smaug, data-review=bsmedberg
MozReview-Commit-ID: 6a30Xofr6p1
2017-04-19 02:00:00 -04:00
Andrea Marchesini
7dcf0fcf39 Bug 1278838 - Remove separate worker binding for Performance API, r=smaug 2016-06-09 19:04:42 +02:00
Andrea Marchesini
9f252de81d Bug 1278843 - Move PerformanceTiming code in separate files, r=smaug 2016-06-09 12:43:56 +02:00