MediaSystemResourceService.h (2614B)
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(MediaSystemResourceService_h_) 8 # define MediaSystemResourceService_h_ 9 10 # include <deque> 11 12 # include "MediaSystemResourceTypes.h" 13 # include "mozilla/StaticPtr.h" 14 # include "nsClassHashtable.h" 15 16 namespace mozilla { 17 18 namespace media { 19 class MediaSystemResourceManagerParent; 20 } // namespace media 21 22 /** 23 * Manage media system resource allocation requests within system. 24 */ 25 class MediaSystemResourceService { 26 public: 27 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaSystemResourceService) 28 29 static MediaSystemResourceService* Get(); 30 static void Init(); 31 static void Shutdown(); 32 33 void Acquire(media::MediaSystemResourceManagerParent* aParent, uint32_t aId, 34 MediaSystemResourceType aResourceType, bool aWillWait); 35 36 void ReleaseResource(media::MediaSystemResourceManagerParent* aParent, 37 uint32_t aId, MediaSystemResourceType aResourceType); 38 39 void ReleaseResource(media::MediaSystemResourceManagerParent* aParent); 40 41 private: 42 MediaSystemResourceService(); 43 ~MediaSystemResourceService(); 44 45 struct MediaSystemResourceRequest { 46 MediaSystemResourceRequest() : mParent(nullptr), mId(-1) {} 47 MediaSystemResourceRequest(media::MediaSystemResourceManagerParent* aParent, 48 uint32_t aId) 49 : mParent(aParent), mId(aId) {} 50 media::MediaSystemResourceManagerParent* mParent; 51 uint32_t mId; 52 }; 53 54 struct MediaSystemResource { 55 MediaSystemResource() : mResourceCount(0) {} 56 explicit MediaSystemResource(uint32_t aResourceCount) 57 : mResourceCount(aResourceCount) {} 58 59 std::deque<MediaSystemResourceRequest> mWaitingRequests; 60 std::deque<MediaSystemResourceRequest> mAcquiredRequests; 61 uint32_t mResourceCount; 62 }; 63 64 void Destroy(); 65 66 void RemoveRequest(media::MediaSystemResourceManagerParent* aParent, 67 uint32_t aId, MediaSystemResourceType aResourceType); 68 69 void RemoveRequests(media::MediaSystemResourceManagerParent* aParent, 70 MediaSystemResourceType aResourceType); 71 72 void UpdateRequests(MediaSystemResourceType aResourceType); 73 74 bool mDestroyed; 75 76 nsClassHashtable<nsUint32HashKey, MediaSystemResource> mResources; 77 78 static StaticRefPtr<MediaSystemResourceService> sSingleton; 79 }; 80 81 } // namespace mozilla 82 83 #endif