gecko-dev/dom/performance/PerformanceWorker.h
Eden Chuang ea1bf2603a Bug 1800659 - P3 Remove WorkerPrivate::ClearMainEventQueue() r=asuth,smaug
Pending->Canceling->Killing (WorkerNeverRan)

Need to clear WorkerPrivate::mPreStartRunnables

Could we call WorkerRunnable::WorkerRun() to release resource? There could be no WorkerGlobalScope...

Pending->Running->Closing->Canceling->Killing(WorkerRan)
Pending->Running->Canceling->Killing(WorkerRan)

When entering “Closing”
1. Keeping receives normal WorkerRunnables
2. Making ParentStatus as Closing
3. Cancel all timeout
4. Don’t clear the main event queue anymore. But we still wait for all SyncLoops be completed.
5. Call WorkerGlobalScope::NoteTerminating() and nsIGlobalObject::DisconnectEventTargetObjects().
6. Switching to “Canceling” by asking parent thread to call WorkerPrivate::Cancel()

When entering “Canceling”
1. Call WorkerGlobalScope::NoteTerminating()
2. Notify StrongWorkerRefs, worker is in “Canceling”, send and complete the corresponding shutdown work right now.
3. Executing all runnables until no normal WorkerRunnables in queue and no WorkerRefs, SyncLoops and children workers
4. Stop receiving normal WorkerRunnables and DisconnectEventTargetObjects of WorkerScope.
4. Entering “Killing”

When entering “Killing”
1. We would not notify WorkerRefs anymore. Logically all WorkerRefs should be released in “Canceling”
2. Executing all remaining ControlRunnables
3. Release corresponding resources of Worker on worker thread.

Depends on D173850

Differential Revision: https://phabricator.services.mozilla.com/D177511
2023-06-06 06:36:50 +00:00

97 lines
2.7 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_PerformanceWorker_h
#define mozilla_dom_PerformanceWorker_h
#include "Performance.h"
namespace mozilla::dom {
class WorkerGlobalScope;
class PerformanceWorker final : public Performance {
public:
explicit PerformanceWorker(WorkerGlobalScope* aGlobalScope);
PerformanceStorage* AsPerformanceStorage() override {
MOZ_CRASH("This should not be called on workers.");
return nullptr;
}
virtual PerformanceTiming* Timing() override {
MOZ_CRASH("This should not be called on workers.");
return nullptr;
}
virtual PerformanceNavigation* Navigation() override {
MOZ_CRASH("This should not be called on workers.");
return nullptr;
}
virtual void SetFCPTimingEntry(PerformancePaintTiming* aEntry) override {
MOZ_CRASH("This should not be called on workers.");
}
TimeStamp CreationTimeStamp() const override;
DOMHighResTimeStamp CreationTime() const override;
virtual void GetMozMemory(JSContext* aCx,
JS::MutableHandle<JSObject*> aObj) override {
MOZ_CRASH("This should not be called on workers.");
}
virtual nsDOMNavigationTiming* GetDOMTiming() const override {
MOZ_CRASH("This should not be called on workers.");
return nullptr;
}
virtual uint64_t GetRandomTimelineSeed() override;
virtual nsITimedChannel* GetChannel() const override {
MOZ_CRASH("This should not be called on workers.");
return nullptr;
}
void QueueNavigationTimingEntry() override {
MOZ_CRASH("This should not be called on workers.");
}
void UpdateNavigationTimingEntry() override {
MOZ_CRASH("This should not be called on workers.");
}
void InsertEventTimingEntry(PerformanceEventTiming*) override {
MOZ_CRASH("This should not be called on workers.");
}
void BufferEventTimingEntryIfNeeded(PerformanceEventTiming*) override {
MOZ_CRASH("This should not be called on workers.");
}
void DispatchPendingEventTimingEntries() override {
MOZ_CRASH("This should not be called on workders.");
}
class EventCounts* EventCounts() override {
MOZ_CRASH("This should not be called on workers");
}
protected:
~PerformanceWorker();
void InsertUserEntry(PerformanceEntry* aEntry) override;
void DispatchBufferFullEvent() override {
// Nothing to do here. See bug 1432758.
}
};
} // namespace mozilla::dom
#endif // mozilla_dom_PerformanceWorker_h