Bug 1874684 - Part 28: Return DateDuration from DifferenceISODateTime. r=mgaudet
[gecko.git] / gfx / ipc / CanvasShutdownManager.h
blob803d6a1eb8afa2a02c1b822d12489750866c86ce
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef _include_gfx_ipc_CanvasShutdownManager_h__
7 #define _include_gfx_ipc_CanvasShutdownManager_h__
9 #include "mozilla/RefPtr.h"
10 #include "mozilla/StaticMutex.h"
11 #include "mozilla/ThreadLocal.h"
12 #include <set>
14 namespace mozilla {
15 namespace dom {
16 class CanvasRenderingContext2D;
17 class StrongWorkerRef;
18 class ThreadSafeWorkerRef;
19 } // namespace dom
21 namespace gfx {
23 class CanvasShutdownManager final {
24 public:
25 static CanvasShutdownManager* Get();
26 static CanvasShutdownManager* MaybeGet();
27 static void Shutdown();
29 dom::ThreadSafeWorkerRef* GetWorkerRef() const { return mWorkerRef; }
30 void AddShutdownObserver(dom::CanvasRenderingContext2D* aCanvas);
31 void RemoveShutdownObserver(dom::CanvasRenderingContext2D* aCanvas);
33 static void OnCompositorManagerRestored();
35 void OnRemoteCanvasLost();
36 void OnRemoteCanvasRestored();
38 private:
39 explicit CanvasShutdownManager(dom::StrongWorkerRef* aWorkerRef);
40 CanvasShutdownManager();
41 ~CanvasShutdownManager();
42 void Destroy();
44 static void MaybeRestoreRemoteCanvas();
46 RefPtr<dom::ThreadSafeWorkerRef> mWorkerRef;
47 std::set<dom::CanvasRenderingContext2D*> mActiveCanvas;
48 static MOZ_THREAD_LOCAL(CanvasShutdownManager*) sLocalManager;
50 static StaticMutex sManagersMutex;
51 static std::set<CanvasShutdownManager*> sManagers;
54 } // namespace gfx
55 } // namespace mozilla
57 #endif // _include_gfx_ipc_CanvasShutdownManager_h__