Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim:set ts=2 sw=2 sts=2 et cindent: */
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 file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #if !defined(MediaSystemResourceManager_h_)
8 : #define MediaSystemResourceManager_h_
9 :
10 : #include <queue>
11 :
12 : #include "MediaSystemResourceTypes.h"
13 : #include "mozilla/ReentrantMonitor.h"
14 : #include "mozilla/StaticPtr.h"
15 : #include "nsDataHashtable.h"
16 : #include "nsISupportsImpl.h"
17 :
18 : namespace mozilla {
19 :
20 : namespace media {
21 : class MediaSystemResourceManagerChild;
22 : } // namespace media
23 :
24 : class MediaSystemResourceClient;
25 : class MediaSystemResourceReservationListener;
26 : class ReentrantMonitor;
27 : class TaskQueue;
28 :
29 : /**
30 : * Manage media system resource allocation requests within a process.
31 : */
32 : class MediaSystemResourceManager
33 : {
34 : public:
35 0 : NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaSystemResourceManager)
36 :
37 : static MediaSystemResourceManager* Get();
38 : static void Init();
39 : static void Shutdown();
40 :
41 : void OnIpcClosed();
42 :
43 : void Register(MediaSystemResourceClient* aClient);
44 : void Unregister(MediaSystemResourceClient* aClient);
45 :
46 : bool SetListener(MediaSystemResourceClient* aClient,
47 : MediaSystemResourceReservationListener* aListener);
48 :
49 : void Acquire(MediaSystemResourceClient* aClient);
50 : bool AcquireSyncNoWait(MediaSystemResourceClient* aClient);
51 : void ReleaseResource(MediaSystemResourceClient* aClient);
52 :
53 : void RecvResponse(uint32_t aId, bool aSuccess);
54 :
55 : private:
56 : MediaSystemResourceManager();
57 : virtual ~MediaSystemResourceManager();
58 :
59 : void OpenIPC();
60 : void CloseIPC();
61 : bool IsIpcClosed();
62 :
63 : void DoAcquire(uint32_t aId);
64 :
65 : void DoRelease(uint32_t aId);
66 :
67 : void HandleAcquireResult(uint32_t aId, bool aSuccess);
68 :
69 : ReentrantMonitor mReentrantMonitor;
70 :
71 : bool mShutDown;
72 :
73 : media::MediaSystemResourceManagerChild* mChild;
74 :
75 : nsDataHashtable<nsUint32HashKey, MediaSystemResourceClient*> mResourceClients;
76 :
77 : static StaticRefPtr<MediaSystemResourceManager> sSingleton;
78 : };
79 :
80 : } // namespace mozilla
81 :
82 : #endif
|