Bug 1244901 - When recording transform duration for potential checkerboarding time, do so on the compositor thread. r=botond

This commit is contained in:
Kartikaya Gupta 2016-02-01 19:59:23 -05:00
parent 8ea29d9658
commit f34e7a3969
3 changed files with 23 additions and 21 deletions

View File

@ -3149,6 +3149,7 @@ AsyncPanZoomController::ReportCheckerboard(const TimeStamp& aSampleTime)
if (!mCheckerboardEvent && (recordTrace || forTelemetry)) {
mCheckerboardEvent = MakeUnique<CheckerboardEvent>(recordTrace);
}
mPotentialCheckerboardTracker.InTransform(IsTransformingState(mState));
if (magnitude) {
mPotentialCheckerboardTracker.CheckerboardSeen();
}
@ -3634,7 +3635,6 @@ void AsyncPanZoomController::DispatchStateChangeNotification(PanZoomState aOldSt
if (RefPtr<GeckoContentController> controller = GetGeckoContentController()) {
if (!IsTransformingState(aOldState) && IsTransformingState(aNewState)) {
mPotentialCheckerboardTracker.TransformStarted();
controller->NotifyAPZStateChange(
GetGuid(), APZStateChange::TransformBegin);
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
@ -3645,7 +3645,6 @@ void AsyncPanZoomController::DispatchStateChangeNotification(PanZoomState aOldSt
}
#endif
} else if (IsTransformingState(aOldState) && !IsTransformingState(aNewState)) {
mPotentialCheckerboardTracker.TransformStopped();
controller->NotifyAPZStateChange(
GetGuid(), APZStateChange::TransformEnd);
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)

View File

@ -40,21 +40,29 @@ PotentialCheckerboardDurationTracker::CheckerboardDone()
}
void
PotentialCheckerboardDurationTracker::TransformStarted()
PotentialCheckerboardDurationTracker::InTransform(bool aInTransform)
{
MOZ_ASSERT(!mInTransform);
if (!Tracking()) {
mCurrentPeriodStart = TimeStamp::Now();
if (aInTransform == mInTransform) {
// no-op
return;
}
mInTransform = true;
}
void
PotentialCheckerboardDurationTracker::TransformStopped()
{
MOZ_ASSERT(mInTransform);
mInTransform = false;
if (!Tracking()) {
// Because !Tracking(), mInTransform must be false, and so aInTransform
// must be true (or we would have early-exited this function already).
// Therefore, we are starting a potential checkerboard period.
mInTransform = aInTransform;
mCurrentPeriodStart = TimeStamp::Now();
return;
}
mInTransform = aInTransform;
if (!Tracking()) {
// Tracking() must have been true at the start of this function, or we
// would have taken the other !Tracking branch above. If it's false now,
// it means we just stopped tracking, so we are ending a potential
// checkerboard period.
mozilla::Telemetry::AccumulateTimeDelta(
mozilla::Telemetry::CHECKERBOARD_POTENTIAL_DURATION,
mCurrentPeriodStart);

View File

@ -39,15 +39,10 @@ public:
void CheckerboardDone();
/**
* This should be called when a transform is started. Calls to this must be
* interleaved with calls to TransformStopped().
* This should be called at composition time, to indicate if the APZC is in
* a transforming state or not.
*/
void TransformStarted();
/**
* This should be called when a transform is stopped. Calls to this must be
* interleaved with calls to TransformStarted().
*/
void TransformStopped();
void InTransform(bool aInTransform);
private:
bool Tracking() const;