MediaSystemResourceManager.h (2163B)
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 "nsISupportsImpl.h" 16 # include "nsTHashMap.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 public: 34 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaSystemResourceManager) 35 36 static MediaSystemResourceManager* Get(); 37 static void Init(); 38 static void Shutdown(); 39 40 void OnIpcClosed(); 41 42 void Register(MediaSystemResourceClient* aClient); 43 void Unregister(MediaSystemResourceClient* aClient); 44 45 bool SetListener(MediaSystemResourceClient* aClient, 46 MediaSystemResourceReservationListener* aListener); 47 48 void Acquire(MediaSystemResourceClient* aClient); 49 bool AcquireSyncNoWait(MediaSystemResourceClient* aClient); 50 void ReleaseResource(MediaSystemResourceClient* aClient); 51 52 void RecvResponse(uint32_t aId, bool aSuccess); 53 54 private: 55 MediaSystemResourceManager(); 56 virtual ~MediaSystemResourceManager(); 57 58 void OpenIPC(); 59 void CloseIPC(); 60 bool IsIpcClosed(); 61 62 void DoAcquire(uint32_t aId); 63 64 void DoRelease(uint32_t aId); 65 66 void HandleAcquireResult(uint32_t aId, bool aSuccess); 67 68 ReentrantMonitor mReentrantMonitor MOZ_UNANNOTATED; 69 70 bool mShutDown; 71 72 media::MediaSystemResourceManagerChild* mChild; 73 74 nsTHashMap<nsUint32HashKey, MediaSystemResourceClient*> mResourceClients; 75 76 static StaticRefPtr<MediaSystemResourceManager> sSingleton; 77 }; 78 79 } // namespace mozilla 80 81 #endif