Bug 1319134 - (intersection-observer) Switch from idle callback to post task.
MozReview-Commit-ID: BJTmIWqkVn5
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -1042,27 +1042,16 @@ nsRefreshDriver::GetMinRecomputeVisibili
int32_t interval =
Preferences::GetInt("layout.visibility.min-recompute-interval-ms", -1);
if (interval <= 0) {
interval = DEFAULT_RECOMPUTE_VISIBILITY_INTERVAL_MS;
}
return TimeDuration::FromMilliseconds(interval);
}
-/* static */ mozilla::TimeDuration
-nsRefreshDriver::GetMinNotifyIntersectionObserversInterval()
-{
- int32_t interval =
- Preferences::GetInt("layout.visibility.min-notify-intersection-observers-interval-ms", -1);
- if (interval <= 0) {
- interval = DEFAULT_NOTIFY_INTERSECTION_OBSERVERS_INTERVAL_MS;
- }
- return TimeDuration::FromMilliseconds(interval);
-}
-
double
nsRefreshDriver::GetRefreshTimerInterval() const
{
return mThrottled ? GetThrottledTimerInterval() : GetRegularTimerInterval();
}
RefreshDriverTimer*
nsRefreshDriver::ChooseTimer() const
@@ -1093,18 +1082,16 @@ nsRefreshDriver::nsRefreshDriver(nsPresC
mPresContext(aPresContext),
mRootRefresh(nullptr),
mPendingTransaction(0),
mCompletedTransaction(0),
mFreezeCount(0),
mThrottledFrameRequestInterval(TimeDuration::FromMilliseconds(
GetThrottledTimerInterval())),
mMinRecomputeVisibilityInterval(GetMinRecomputeVisibilityInterval()),
- mMinNotifyIntersectionObserversInterval(
- GetMinNotifyIntersectionObserversInterval()),
mThrottled(false),
mNeedToRecomputeVisibility(false),
mTestControllingRefreshes(false),
mViewManagerFlushIsPending(false),
mRequestedHighPrecision(false),
mInRefresh(false),
mWaitingForTransaction(false),
mSkippedPaints(false),
@@ -1115,17 +1102,16 @@ nsRefreshDriver::nsRefreshDriver(nsPresC
MOZ_ASSERT(mPresContext,
"Need a pres context to tell us to call Disconnect() later "
"and decrement sRefreshDriverCount.");
mMostRecentRefreshEpochTime = JS_Now();
mMostRecentRefresh = TimeStamp::Now();
mMostRecentTick = mMostRecentRefresh;
mNextThrottledFrameRequestTick = mMostRecentTick;
mNextRecomputeVisibilityTick = mMostRecentTick;
- mNextNotifyIntersectionObserversTick = mMostRecentTick;
++sRefreshDriverCount;
}
nsRefreshDriver::~nsRefreshDriver()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(ObserverCount() == 0,
@@ -1890,30 +1876,22 @@ nsRefreshDriver::Tick(int64_t aNowEpoch,
aNowTime >= mNextRecomputeVisibilityTick &&
!presShell->IsPaintingSuppressed()) {
mNextRecomputeVisibilityTick = aNowTime + mMinRecomputeVisibilityInterval;
mNeedToRecomputeVisibility = false;
presShell->ScheduleApproximateFrameVisibilityUpdateNow();
}
- bool notifyIntersectionObservers = false;
- if (aNowTime >= mNextNotifyIntersectionObserversTick) {
- mNextNotifyIntersectionObserversTick =
- aNowTime + mMinNotifyIntersectionObserversInterval;
- notifyIntersectionObservers = true;
- }
nsCOMArray<nsIDocument> documents;
CollectDocuments(mPresContext->Document(), &documents);
for (int32_t i = 0; i < documents.Count(); ++i) {
nsIDocument* doc = documents[i];
doc->UpdateIntersectionObservations();
- if (notifyIntersectionObservers) {
- doc->ScheduleIntersectionObserverNotification();
- }
+ doc->ScheduleIntersectionObserverNotification();
}
/*
* Perform notification to imgIRequests subscribed to listen
* for refresh events.
*/
for (auto iter = mStartTable.Iter(); !iter.Done(); iter.Next()) {
--- a/layout/base/nsRefreshDriver.h
+++ b/layout/base/nsRefreshDriver.h
@@ -402,17 +402,16 @@ private:
// Trigger a refresh immediately, if haven't been disconnected or frozen.
void DoRefresh();
double GetRefreshTimerInterval() const;
double GetRegularTimerInterval(bool *outIsDefault = nullptr) const;
static double GetThrottledTimerInterval();
static mozilla::TimeDuration GetMinRecomputeVisibilityInterval();
- static mozilla::TimeDuration GetMinNotifyIntersectionObserversInterval();
bool HaveFrameRequestCallbacks() const {
return mFrameRequestCallbackDocs.Length() != 0;
}
void FinishedWaitingForTransaction();
mozilla::RefreshDriverTimer* ChooseTimer() const;
@@ -438,18 +437,16 @@ private:
const mozilla::TimeDuration mThrottledFrameRequestInterval;
// How long we wait, at a minimum, before recomputing approximate frame
// visibility information. This is a minimum because, regardless of this
// interval, we only recompute visibility when we've seen a layout or style
// flush since the last time we did it.
const mozilla::TimeDuration mMinRecomputeVisibilityInterval;
- const mozilla::TimeDuration mMinNotifyIntersectionObserversInterval;
-
bool mThrottled;
bool mNeedToRecomputeVisibility;
bool mTestControllingRefreshes;
bool mViewManagerFlushIsPending;
bool mRequestedHighPrecision;
bool mInRefresh;
// True if the refresh driver is suspended waiting for transaction
@@ -470,17 +467,16 @@ private:
// transaction to be completed before we append a note to the gfx critical log.
// The number is doubled every time the threshold is hit.
uint64_t mWarningThreshold;
mozilla::TimeStamp mMostRecentRefresh;
mozilla::TimeStamp mMostRecentTick;
mozilla::TimeStamp mTickStart;
mozilla::TimeStamp mNextThrottledFrameRequestTick;
mozilla::TimeStamp mNextRecomputeVisibilityTick;
- mozilla::TimeStamp mNextNotifyIntersectionObserversTick;
// separate arrays for each flush type we support
ObserverArray mObservers[3];
RequestTable mRequests;
ImageStartTable mStartTable;
struct PendingEvent {
nsCOMPtr<nsINode> mTarget;