mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1244901 - When recording transform duration for potential checkerboarding time, do so on the compositor thread. r=botond
This commit is contained in:
parent
8ea29d9658
commit
f34e7a3969
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user