Bug 1435637: Minimally tidy nsRefreshDriver. r?hiro
All the arrays we're switching to ranged loops can't mutate during the loop
since are locals or not referenced from other places.
MozReview-Commit-ID: C2N73HMMeNW
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -295,17 +295,17 @@ protected:
}
void TickRefreshDrivers(int64_t aJsNow, TimeStamp aNow, nsTArray<RefPtr<nsRefreshDriver>>& aDrivers)
{
if (aDrivers.IsEmpty()) {
return;
}
- nsTArray<RefPtr<nsRefreshDriver> > drivers(aDrivers);
+ nsTArray<RefPtr<nsRefreshDriver>> drivers(aDrivers);
for (nsRefreshDriver* driver : drivers) {
// don't poke this driver if it's in test mode
if (driver->IsTestControllingRefreshesEnabled()) {
continue;
}
TickDriver(driver, aJsNow, aNow);
@@ -340,18 +340,18 @@ protected:
driver->Tick(jsnow, now);
}
int64_t mLastFireEpoch;
bool mLastFireSkipped;
TimeStamp mLastFireTime;
TimeStamp mTargetTime;
- nsTArray<RefPtr<nsRefreshDriver> > mContentRefreshDrivers;
- nsTArray<RefPtr<nsRefreshDriver> > mRootRefreshDrivers;
+ nsTArray<RefPtr<nsRefreshDriver>> mContentRefreshDrivers;
+ nsTArray<RefPtr<nsRefreshDriver>> mRootRefreshDrivers;
// useful callback for nsITimer-based derived classes, here
// bacause of c++ protected shenanigans
static void TimerTick(nsITimer* aTimer, void* aClosure)
{
RefreshDriverTimer *timer = static_cast<RefreshDriverTimer*>(aClosure);
timer->Tick();
}
@@ -946,17 +946,17 @@ protected:
TimeStamp now = TimeStamp::Now();
ScheduleNextTick(now);
mLastFireEpoch = jsnow;
mLastFireTime = now;
mLastFireSkipped = false;
- nsTArray<RefPtr<nsRefreshDriver> > drivers(mContentRefreshDrivers);
+ nsTArray<RefPtr<nsRefreshDriver>> drivers(mContentRefreshDrivers);
drivers.AppendElements(mRootRefreshDrivers);
size_t index = mNextDriverIndex;
if (index < drivers.Length() &&
!drivers[index]->IsTestControllingRefreshesEnabled())
{
TickDriver(drivers[index], jsnow, now);
mLastFireSkipped = mLastFireSkipped || drivers[index]->SkippedPaints();
@@ -1419,18 +1419,18 @@ nsRefreshDriver::StopTimer()
mActiveTimer->RemoveRefreshDriver(this);
mActiveTimer = nullptr;
}
uint32_t
nsRefreshDriver::ObserverCount() const
{
uint32_t sum = 0;
- for (uint32_t i = 0; i < ArrayLength(mObservers); ++i) {
- sum += mObservers[i].Length();
+ for (const ObserverArray& array : mObservers) {
+ sum += array.Length();
}
// Even while throttled, we need to process layout and style changes. Style
// changes can trigger transitions which fire events when they complete, and
// layout changes can affect media queries on child documents, triggering
// style changes, etc.
sum += mAnimationEventFlushObservers.Length();
sum += mResizeEventFlushObservers.Length();
@@ -1442,18 +1442,18 @@ nsRefreshDriver::ObserverCount() const
sum += mViewManagerFlushIsPending;
sum += mEarlyRunners.Length();
return sum;
}
bool
nsRefreshDriver::HasObservers() const
{
- for (uint32_t i = 0; i < ArrayLength(mObservers); ++i) {
- if (!mObservers[i].IsEmpty()) {
+ for (const ObserverArray& array : mObservers) {
+ if (!array.IsEmpty()) {
return true;
}
}
return mViewManagerFlushIsPending ||
!mStyleFlushObservers.IsEmpty() ||
!mLayoutFlushObservers.IsEmpty() ||
!mAnimationEventFlushObservers.IsEmpty() ||
@@ -1632,22 +1632,18 @@ nsRefreshDriver::DispatchAnimationEvents
{
if (!mPresContext) {
return;
}
// Hold all AnimationEventDispatcher in mAnimationEventFlushObservers as
// a RefPtr<> array since each AnimationEventDispatcher might be destroyed
// during processing the previous dispatcher.
- size_t len = mAnimationEventFlushObservers.Length();
AutoTArray<RefPtr<AnimationEventDispatcher>, 16> dispatchers;
- RefPtr<AnimationEventDispatcher>* elems = dispatchers.AppendElements(len);
- for (size_t i = 0; i < len; i++) {
- elems[i] = mAnimationEventFlushObservers[i];
- }
+ dispatchers.AppendElements(mAnimationEventFlushObservers);
mAnimationEventFlushObservers.Clear();
for (auto& dispatcher : dispatchers) {
dispatcher->DispatchEvents();
}
}
void
@@ -1851,31 +1847,30 @@ nsRefreshDriver::Tick(int64_t aNowEpoch,
// in the queue. This will prevent us from spending precious time
// painting a stale displayport.
if (gfxPrefs::APZPeekMessages()) {
nsLayoutUtils::UpdateDisplayPortMarginsFromPendingMessages();
}
AutoTArray<nsCOMPtr<nsIRunnable>, 16> earlyRunners;
earlyRunners.SwapElements(mEarlyRunners);
- for (uint32_t i = 0; i < earlyRunners.Length(); ++i) {
- earlyRunners[i]->Run();
+ for (auto& runner : earlyRunners) {
+ runner->Run();
}
// Resize events should be fired before layout flushes or
// calling animation frame callbacks.
AutoTArray<nsIPresShell*, 16> observers;
observers.AppendElements(mResizeEventFlushObservers);
- for (uint32_t i = observers.Length(); i; --i) {
+ for (nsIPresShell* shell : Reversed(observers)) {
if (!mPresContext || !mPresContext->GetPresShell()) {
break;
}
// Make sure to not process observers which might have been removed
// during previous iterations.
- nsIPresShell* shell = observers[i - 1];
if (!mResizeEventFlushObservers.RemoveElement(shell)) {
continue;
}
shell->FireResizeEvent();
}
/*
* The timer holds a reference to |this| while calling |Notify|.
@@ -1972,18 +1967,17 @@ nsRefreshDriver::Tick(int64_t aNowEpoch,
mNeedToRecomputeVisibility = false;
presShell->ScheduleApproximateFrameVisibilityUpdateNow();
}
#ifdef MOZ_XUL
// Update any popups that may need to be moved or hidden due to their
// anchor changing.
- nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
- if (pm) {
+ if (nsXULPopupManager* pm = nsXULPopupManager::GetInstance()) {
pm->UpdatePopupPositions(this);
}
#endif
UpdateIntersectionObservations();
/*
* Perform notification to imgIRequests subscribed to listen
@@ -2098,19 +2092,19 @@ nsRefreshDriver::Tick(int64_t aNowEpoch,
if (mPresContext->IsRoot() && XRE_IsContentProcess() && gfxPrefs::AlwaysPaint()) {
ScheduleViewManagerFlush();
}
if (dispatchRunnablesAfterTick && sPendingIdleRunnables) {
AutoTArray<RunnableWithDelay, 8>* runnables = sPendingIdleRunnables;
sPendingIdleRunnables = nullptr;
- for (uint32_t i = 0; i < runnables->Length(); ++i) {
- NS_IdleDispatchToCurrentThread((*runnables)[i].mRunnable.forget(),
- (*runnables)[i].mDelay);
+ for (RunnableWithDelay& runnableWithDelay : *runnables) {
+ NS_IdleDispatchToCurrentThread(runnableWithDelay.mRunnable.forget(),
+ runnableWithDelay.mDelay);
}
delete runnables;
}
}
void
nsRefreshDriver::BeginRefreshingImages(RequestTable& aEntries,
mozilla::TimeStamp aDesired)