Bug 1287712 - TimeDurationAccumulator includes running timer in reports - r?cpearce
If the timer is currently running, add started time segment until now to
Total(), and add 1 to Count().
This ensures correct values are returned without having to Pause().
MozReview-Commit-ID: JSBvL93GtkE
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -1573,44 +1573,57 @@ protected:
// tree before.
ELEMENT_NOT_INTREE_HAD_INTREE
};
ElementInTreeState mElementInTreeState;
public:
// Helper class to measure times for MSE telemetry stats
- class TimeDurationAccumulator {
+ class TimeDurationAccumulator
+ {
public:
TimeDurationAccumulator()
: mCount(0)
+ {}
+ void Start()
{
- }
- void Start() {
if (IsStarted()) {
return;
}
mStartTime = TimeStamp::Now();
}
- void Pause() {
+ void Pause()
+ {
if (!IsStarted()) {
return;
}
mSum += (TimeStamp::Now() - mStartTime);
mCount++;
mStartTime = TimeStamp();
}
- bool IsStarted() const {
+ bool IsStarted() const
+ {
return !mStartTime.IsNull();
}
- double Total() const {
- return mSum.ToSeconds();
+ double Total() const
+ {
+ if (!IsStarted()) {
+ return mSum.ToSeconds();
+ }
+ // Add current running time until now, but keep it running.
+ return (mSum + (TimeStamp::Now() - mStartTime)).ToSeconds();
}
- uint32_t Count() const {
- return mCount;
+ uint32_t Count() const
+ {
+ if (!IsStarted()) {
+ return mCount;
+ }
+ // Count current run in this report, without increasing the stored count.
+ return mCount + 1;
}
private:
TimeStamp mStartTime;
TimeDuration mSum;
uint32_t mCount;
};
private:
// Total time a video has spent playing.