mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
90bafd1f42
PerformanceCounters are currently disabled in two ways: - a preference that's off by default "dom.performance.enable_scheduler_timing" - calls made only for nightly using #ifndef RELEASE_OR_BETA In order to simplify the code, let's remove the #ifndef and rely only on the pref. That will also allows us to use the feature in every version going forward. The performance will not be impacted since the current code is already using the (cached) pref value to determine if the counters are used. MozReview-Commit-ID: 47t2M1O13aH --HG-- extra : rebase_source : e129e1829f1dc37c019e50e156474c4876d6d6cb
109 lines
2.8 KiB
C++
109 lines
2.8 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_dom_workers_WorkerThread_h__
|
|
#define mozilla_dom_workers_WorkerThread_h__
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/CondVar.h"
|
|
#include "mozilla/DebugOnly.h"
|
|
#include "nsISupportsImpl.h"
|
|
#include "mozilla/RefPtr.h"
|
|
#include "nsThread.h"
|
|
|
|
class nsIRunnable;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class WorkerRunnable;
|
|
class WorkerPrivate;
|
|
template <class> class WorkerPrivateParent;
|
|
|
|
namespace workerinternals {
|
|
class RuntimeService;
|
|
}
|
|
|
|
// This class lets us restrict the public methods that can be called on
|
|
// WorkerThread to RuntimeService and WorkerPrivate without letting them gain
|
|
// full access to private methods (as would happen if they were simply friends).
|
|
class WorkerThreadFriendKey
|
|
{
|
|
friend class workerinternals::RuntimeService;
|
|
friend class WorkerPrivate;
|
|
friend class WorkerPrivateParent<WorkerPrivate>;
|
|
|
|
WorkerThreadFriendKey();
|
|
~WorkerThreadFriendKey();
|
|
};
|
|
|
|
class WorkerThread final
|
|
: public nsThread
|
|
{
|
|
class Observer;
|
|
|
|
Mutex mLock;
|
|
CondVar mWorkerPrivateCondVar;
|
|
|
|
// Protected by nsThread::mLock.
|
|
WorkerPrivate* mWorkerPrivate;
|
|
|
|
// Only touched on the target thread.
|
|
RefPtr<Observer> mObserver;
|
|
|
|
// Protected by nsThread::mLock and waited on with mWorkerPrivateCondVar.
|
|
uint32_t mOtherThreadsDispatchingViaEventTarget;
|
|
|
|
#ifdef DEBUG
|
|
// Protected by nsThread::mLock.
|
|
bool mAcceptingNonWorkerRunnables;
|
|
#endif
|
|
|
|
public:
|
|
static already_AddRefed<WorkerThread>
|
|
Create(const WorkerThreadFriendKey& aKey);
|
|
|
|
void
|
|
SetWorker(const WorkerThreadFriendKey& aKey,
|
|
WorkerPrivate* aWorkerPrivate);
|
|
|
|
nsresult
|
|
DispatchPrimaryRunnable(const WorkerThreadFriendKey& aKey,
|
|
already_AddRefed<nsIRunnable> aRunnable);
|
|
|
|
nsresult
|
|
DispatchAnyThread(const WorkerThreadFriendKey& aKey,
|
|
already_AddRefed<WorkerRunnable> aWorkerRunnable);
|
|
|
|
uint32_t
|
|
RecursionDepth(const WorkerThreadFriendKey& aKey) const;
|
|
|
|
PerformanceCounter*
|
|
GetPerformanceCounter(nsIRunnable* aEvent) override;
|
|
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(WorkerThread, nsThread)
|
|
|
|
private:
|
|
WorkerThread();
|
|
~WorkerThread();
|
|
|
|
// This should only be called by consumers that have an
|
|
// nsIEventTarget/nsIThread pointer.
|
|
NS_IMETHOD
|
|
Dispatch(already_AddRefed<nsIRunnable> aRunnable, uint32_t aFlags) override;
|
|
|
|
NS_IMETHOD
|
|
DispatchFromScript(nsIRunnable* aRunnable, uint32_t aFlags) override;
|
|
|
|
NS_IMETHOD
|
|
DelayedDispatch(already_AddRefed<nsIRunnable>, uint32_t) override;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_workers_WorkerThread_h__
|