mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1310880 - Add a specialized BackgroundHangMonitor for content process force paints. r=jchen,billm
MozReview-Commit-ID: CccuQRDuaW2 --HG-- extra : rebase_source : 6a88e7f1f95d8886151b2fb021c9f259a9689670 extra : histedit_source : 0d565810d4055cf669085045e80a0e4ad6d66fe4
This commit is contained in:
parent
f2fa591912
commit
16e7fd83fa
@ -11,6 +11,7 @@
|
||||
#include "js/GCAPI.h"
|
||||
|
||||
#include "mozilla/Atomics.h"
|
||||
#include "mozilla/BackgroundHangMonitor.h"
|
||||
#include "mozilla/dom/ContentParent.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/ScriptSettings.h"
|
||||
@ -115,6 +116,7 @@ class HangMonitorChild
|
||||
void ShutdownOnThread();
|
||||
|
||||
static Atomic<HangMonitorChild*> sInstance;
|
||||
UniquePtr<BackgroundHangMonitor> mForcePaintMonitor;
|
||||
|
||||
const RefPtr<ProcessHangMonitor> mHangMonitor;
|
||||
Monitor mMonitor;
|
||||
@ -277,12 +279,18 @@ HangMonitorChild::HangMonitorChild(ProcessHangMonitor* aMonitor)
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(NS_IsMainThread());
|
||||
mContext = danger::GetJSContext();
|
||||
mForcePaintMonitor =
|
||||
MakeUnique<mozilla::BackgroundHangMonitor>("Gecko_Child_ForcePaint",
|
||||
128, /* ms timeout for microhangs */
|
||||
8192 /* ms timeout for permahangs */,
|
||||
BackgroundHangMonitor::THREAD_PRIVATE);
|
||||
}
|
||||
|
||||
HangMonitorChild::~HangMonitorChild()
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(sInstance == this);
|
||||
mForcePaintMonitor = nullptr;
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
@ -310,6 +318,7 @@ HangMonitorChild::InterruptCallback()
|
||||
JS::AutoAssertOnGC nogc(mContext);
|
||||
JS::AutoAssertOnBarrier nobarrier(mContext);
|
||||
tabChild->ForcePaint(forcePaintEpoch);
|
||||
mForcePaintMonitor->NotifyWait();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -382,6 +391,8 @@ HangMonitorChild::RecvForcePaint(const TabId& aTabId, const uint64_t& aLayerObse
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(MessageLoop::current() == MonitorLoop());
|
||||
|
||||
mForcePaintMonitor->NotifyActivity();
|
||||
|
||||
{
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
mForcePaint = true;
|
||||
|
Loading…
Reference in New Issue
Block a user