mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
3ae961a2da
We could try to move the EnforcePendingTaskGuarantee() bit into PeekIdleDeadline, but then we'd need to check HasReadyEvent() on mDeferredTimersQueue and mIdleQueue before we possibly unlock the mutex under PeekIdleDeadline, and it's not clear that that state cannot change once the mutex is unlocked... The EnsureIsActive() call at the end of GetIdleDeadlineInternal in the !aIsPeek case only makes sense if there are in fact idle tasks available to run when GetDeadlineForIdleTask is called, because otherwise it would incorrectly set us active when we are not running any tasks. Differential Revision: https://phabricator.services.mozilla.com/D49696 --HG-- rename : xpcom/threads/PrioritizedEventQueue.cpp => xpcom/threads/IdlePeriodState.cpp rename : xpcom/threads/PrioritizedEventQueue.h => xpcom/threads/IdlePeriodState.h extra : moz-landing-system : lando
59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_ipc_IdleSchedulerChild_h__
|
|
#define mozilla_ipc_IdleSchedulerChild_h__
|
|
|
|
#include "mozilla/Assertions.h"
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/ipc/PIdleSchedulerChild.h"
|
|
|
|
class nsIIdlePeriod;
|
|
|
|
namespace mozilla {
|
|
class IdlePeriodState;
|
|
|
|
namespace ipc {
|
|
|
|
class BackgroundChildImpl;
|
|
|
|
class IdleSchedulerChild final : public PIdleSchedulerChild {
|
|
public:
|
|
IdleSchedulerChild() = default;
|
|
|
|
NS_INLINE_DECL_REFCOUNTING(IdleSchedulerChild)
|
|
|
|
IPCResult RecvIdleTime(uint64_t aId, TimeDuration aBudget);
|
|
|
|
void Init(IdlePeriodState* aIdlePeriodState);
|
|
|
|
void Disconnect() { mIdlePeriodState = nullptr; }
|
|
|
|
// See similar methods on PrioritizedEventQueue.
|
|
void SetActive();
|
|
// Returns true if activity state dropped below cpu count.
|
|
bool SetPaused();
|
|
|
|
static IdleSchedulerChild* GetMainThreadIdleScheduler();
|
|
|
|
private:
|
|
~IdleSchedulerChild();
|
|
|
|
friend class BackgroundChildImpl;
|
|
|
|
// See IdleScheduleParent::sActiveChildCounter
|
|
base::SharedMemory mActiveCounter;
|
|
|
|
IdlePeriodState* mIdlePeriodState = nullptr;
|
|
|
|
uint32_t mChildId = 0;
|
|
};
|
|
|
|
} // namespace ipc
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_ipc_IdleSchedulerChild_h__
|