Commit a04b6f26 authored by Hiroyuki Ikezoe's avatar Hiroyuki Ikezoe
Browse files

Bug 1674776 - Update DocumentTimeline::mLastRefreshDriverTime outside parallel...

Bug 1674776 - Update DocumentTimeline::mLastRefreshDriverTime outside parallel styling. r=boris,decoder

Note that we can probably use mLastRefreshDriverTime directly in
DocumentTimeline::GetCurrentTimeStamp(), i.e. we don't need to use the refresh
driver there, but I'd preserve the current behavior.

Differential Revision: https://phabricator.services.mozilla.com/D97823
parent 47637cde
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ DocumentTimeline::DocumentTimeline(Document* aDocument,
  if (mDocument) {
    mDocument->Timelines().insertBack(this);
  }
  // Ensure mLastRefreshDriverTime is valid.
  UpdateLastRefreshDriverTime();
}

DocumentTimeline::~DocumentTimeline() {
@@ -97,6 +99,12 @@ bool DocumentTimeline::TracksWallclockTime() const {
}

TimeStamp DocumentTimeline::GetCurrentTimeStamp() const {
  nsRefreshDriver* refreshDriver = GetRefreshDriver();
  return refreshDriver ? refreshDriver->MostRecentRefresh()
                       : mLastRefreshDriverTime;
}

void DocumentTimeline::UpdateLastRefreshDriverTime() {
  nsRefreshDriver* refreshDriver = GetRefreshDriver();
  TimeStamp refreshTime =
      refreshDriver ? refreshDriver->MostRecentRefresh() : TimeStamp();
@@ -125,8 +133,6 @@ TimeStamp DocumentTimeline::GetCurrentTimeStamp() const {
  if (!refreshTime.IsNull()) {
    mLastRefreshDriverTime = refreshTime;
  }

  return result;
}

Nullable<TimeDuration> DocumentTimeline::ToTimelineTime(
@@ -182,6 +188,7 @@ void DocumentTimeline::MostRecentRefreshTimeUpdated() {
}

void DocumentTimeline::WillRefresh(mozilla::TimeStamp aTime) {
  UpdateLastRefreshDriverTime();
  MostRecentRefreshTimeUpdated();
}

+3 −1
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ class DocumentTimeline final : public AnimationTimeline,

  Document* GetDocument() const override { return mDocument; }

  void UpdateLastRefreshDriverTime();

  bool IsMonotonicallyIncreasing() const override { return true; }

 protected:
@@ -83,7 +85,7 @@ class DocumentTimeline final : public AnimationTimeline,
  // The most recently used refresh driver time. This is used in cases where
  // we don't have a refresh driver (e.g. because we are in a display:none
  // iframe).
  mutable TimeStamp mLastRefreshDriverTime;
  TimeStamp mLastRefreshDriverTime;
  bool mIsObservingRefreshDriver;

  TimeDuration mOriginTime;
+7 −0
Original line number Diff line number Diff line
@@ -13236,6 +13236,13 @@ void Document::SetNavigationTiming(nsDOMNavigationTiming* aTiming) {
  if (!mLoadingTimeStamp.IsNull() && mTiming) {
    mTiming->SetDOMLoadingTimeStamp(GetDocumentURI(), mLoadingTimeStamp);
  }
  // If there's already the DocumentTimeline instance, tell it since the
  // DocumentTimeline is based on both the navigation start time stamp and the
  // refresh driver timestamp.
  if (mDocumentTimeline) {
    mDocumentTimeline->UpdateLastRefreshDriverTime();
  }
}
nsContentList* Document::ImageMapList() {
+0 −3
Original line number Diff line number Diff line
@@ -263,9 +263,6 @@ extern "C" const char* __tsan_default_suppressions() {
         "race:VRShMem::PullBrowserState\n"
         "race:VRShMem::PushBrowserState\n"

         // Bug 1674776
         "race:DocumentTimeline::GetCurrentTimeAsDuration\n"

         // Bug 1607588
         "race:nssToken_Destroy\n"
         "race:nssSlot_GetToken\n"