Bug 1342863 - (Part 5) DocGroup labeling for runnables dispatched by NS_DispatchTo(Main|Current)Thread in nsRefreshDriver. r?dholbert draft
authorKuoE0 <kuoe0.tw@gmail.com>
Wed, 15 Mar 2017 12:15:24 +0800
changeset 503444 1a88592a4c6a0bffe923765049fdd1c35babcee9
parent 503443 332c3e31ea7ca6aeebcf459a742c2500ea6ea5a5
child 503445 8c915ac69ad853fc0d1d4f0020106faad70a3fe6
child 503465 ee110bcdaa4279fe6f005cdf9539868c3db8d0a8
push id50578
push userbmo:kuoe0@mozilla.com
push dateThu, 23 Mar 2017 06:29:55 +0000
reviewersdholbert
bugs1342863
milestone55.0a1
Bug 1342863 - (Part 5) DocGroup labeling for runnables dispatched by NS_DispatchTo(Main|Current)Thread in nsRefreshDriver. r?dholbert MozReview-Commit-ID: CzddDOagdfZ
layout/base/nsRefreshDriver.cpp
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -2106,18 +2106,27 @@ nsRefreshDriver::Thaw()
   }
 
   if (mFreezeCount == 0) {
     if (ObserverCount() || ImageRequestCount()) {
       // FIXME: This isn't quite right, since our EnsureTimerStarted call
       // updates our mMostRecentRefresh, but the DoRefresh call won't run
       // and notify our observers until we get back to the event loop.
       // Thus MostRecentRefresh() will lie between now and the DoRefresh.
-      NS_DispatchToCurrentThread(NewRunnableMethod(this, &nsRefreshDriver::DoRefresh));
-      EnsureTimerStarted();
+      RefPtr<nsRunnableMethod<nsRefreshDriver>> event =
+        NewRunnableMethod(this, &nsRefreshDriver::DoRefresh);
+      nsPresContext* pc = GetPresContext();
+      if (pc) {
+        pc->Document()->Dispatch("nsRefreshDriver::DoRefresh",
+                                 TaskCategory::Other,
+                                 event.forget());
+        EnsureTimerStarted();
+      } else {
+        NS_ERROR("Thawing while document is being destroyed");
+      }
     }
   }
 }
 
 void
 nsRefreshDriver::FinishedWaitingForTransaction()
 {
   mWaitingForTransaction = false;