mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-10 02:08:38 +09:00
Issue #1442 - Part 12a - Allow idle worker shutdown to begin for an opt-in WorkerHolder mode. https://bugzilla.mozilla.org/show_bug.cgi?id=1362444 Pre-requisite for Part 13.
This commit is contained in:
parent
346e8a87d7
commit
41216b88f6
4 changed files with 30 additions and 6 deletions
|
|
@ -8,8 +8,9 @@
|
|||
|
||||
BEGIN_WORKERS_NAMESPACE
|
||||
|
||||
WorkerHolder::WorkerHolder()
|
||||
WorkerHolder::WorkerHolder(Behavior aBehavior)
|
||||
: mWorkerPrivate(nullptr)
|
||||
, mBehavior(aBehavior)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -44,6 +45,12 @@ WorkerHolder::ReleaseWorker()
|
|||
ReleaseWorkerInternal();
|
||||
}
|
||||
|
||||
WorkerHolder::Behavior
|
||||
WorkerHolder::GetBehavior() const
|
||||
{
|
||||
return mBehavior;
|
||||
}
|
||||
|
||||
void
|
||||
WorkerHolder::ReleaseWorkerInternal()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -73,7 +73,12 @@ class WorkerHolder
|
|||
public:
|
||||
NS_DECL_OWNINGTHREAD
|
||||
|
||||
WorkerHolder();
|
||||
enum Behavior {
|
||||
AllowIdleShutdownStart,
|
||||
PreventIdleShutdownStart,
|
||||
};
|
||||
|
||||
explicit WorkerHolder(Behavior aBehavior = PreventIdleShutdownStart);
|
||||
virtual ~WorkerHolder();
|
||||
|
||||
bool HoldWorker(WorkerPrivate* aWorkerPrivate, Status aFailStatus);
|
||||
|
|
@ -81,6 +86,8 @@ public:
|
|||
|
||||
virtual bool Notify(Status aStatus) = 0;
|
||||
|
||||
Behavior GetBehavior() const;
|
||||
|
||||
protected:
|
||||
void ReleaseWorkerInternal();
|
||||
|
||||
|
|
@ -88,6 +95,8 @@ protected:
|
|||
|
||||
private:
|
||||
void AssertIsOwningThread() const;
|
||||
|
||||
const Behavior mBehavior;
|
||||
};
|
||||
|
||||
END_WORKERS_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -4154,6 +4154,7 @@ WorkerPrivate::WorkerPrivate(WorkerPrivate* aParent,
|
|||
, mDebugger(nullptr)
|
||||
, mJSContext(nullptr)
|
||||
, mPRThread(nullptr)
|
||||
, mNumHoldersPreventingShutdownStart(0)
|
||||
, mDebuggerEventLoopLevel(0)
|
||||
, mMainThreadEventTarget(do_GetMainThread())
|
||||
, mErrorHandlerRecursionCount(0)
|
||||
|
|
@ -5382,8 +5383,11 @@ WorkerPrivate::AddHolder(WorkerHolder* aHolder, Status aFailStatus)
|
|||
|
||||
MOZ_ASSERT(!mHolders.Contains(aHolder), "Already know about this one!");
|
||||
|
||||
if (mHolders.IsEmpty() && !ModifyBusyCountFromWorker(true)) {
|
||||
return false;
|
||||
if (aHolder->GetBehavior() == WorkerHolder::PreventIdleShutdownStart) {
|
||||
if (!mNumHoldersPreventingShutdownStart && !ModifyBusyCountFromWorker(true)) {
|
||||
return false;
|
||||
}
|
||||
mNumHoldersPreventingShutdownStart += 1;
|
||||
}
|
||||
|
||||
mHolders.AppendElement(aHolder);
|
||||
|
|
@ -5398,8 +5402,11 @@ WorkerPrivate::RemoveHolder(WorkerHolder* aHolder)
|
|||
MOZ_ASSERT(mHolders.Contains(aHolder), "Didn't know about this one!");
|
||||
mHolders.RemoveElement(aHolder);
|
||||
|
||||
if (mHolders.IsEmpty() && !ModifyBusyCountFromWorker(false)) {
|
||||
NS_WARNING("Failed to modify busy count!");
|
||||
if (aHolder->GetBehavior() == WorkerHolder::PreventIdleShutdownStart) {
|
||||
mNumHoldersPreventingShutdownStart -= 1;
|
||||
if (!mNumHoldersPreventingShutdownStart && !ModifyBusyCountFromWorker(false)) {
|
||||
NS_WARNING("Failed to modify busy count!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -980,6 +980,7 @@ class WorkerPrivate : public WorkerPrivateParent<WorkerPrivate>
|
|||
RefPtr<WorkerDebuggerGlobalScope> mDebuggerScope;
|
||||
nsTArray<ParentType*> mChildWorkers;
|
||||
nsTObserverArray<WorkerHolder*> mHolders;
|
||||
uint32_t mNumHoldersPreventingShutdownStart;
|
||||
nsTArray<nsAutoPtr<TimeoutInfo>> mTimeouts;
|
||||
uint32_t mDebuggerEventLoopLevel;
|
||||
RefPtr<ThrottledEventQueue> mMainThreadThrottledEventQueue;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue