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(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 : {
27 : public:
28 0 : NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaSystemResourceService)
29 :
30 : static MediaSystemResourceService* Get();
31 : static void Init();
32 : static void Shutdown();
33 :
34 : void Acquire(media::MediaSystemResourceManagerParent* aParent,
35 : uint32_t aId,
36 : MediaSystemResourceType aResourceType,
37 : bool aWillWait);
38 :
39 : void ReleaseResource(media::MediaSystemResourceManagerParent* aParent,
40 : uint32_t aId,
41 : MediaSystemResourceType aResourceType);
42 :
43 : void ReleaseResource(media::MediaSystemResourceManagerParent* aParent);
44 :
45 : private:
46 : MediaSystemResourceService();
47 : ~MediaSystemResourceService();
48 :
49 : struct MediaSystemResourceRequest {
50 : MediaSystemResourceRequest()
51 : : mParent(nullptr), mId(-1) {}
52 0 : MediaSystemResourceRequest(media::MediaSystemResourceManagerParent* aParent, uint32_t aId)
53 0 : : mParent(aParent), mId(aId) {}
54 : media::MediaSystemResourceManagerParent* mParent;
55 : uint32_t mId;
56 : };
57 :
58 0 : struct MediaSystemResource {
59 : MediaSystemResource()
60 : : mResourceCount(0) {}
61 : explicit MediaSystemResource(uint32_t aResourceCount)
62 : : mResourceCount(aResourceCount) {}
63 :
64 : std::deque<MediaSystemResourceRequest> mWaitingRequests;
65 : std::deque<MediaSystemResourceRequest> mAcquiredRequests;
66 : uint32_t mResourceCount;
67 : };
68 :
69 : void Destroy();
70 :
71 : void RemoveRequest(media::MediaSystemResourceManagerParent* aParent,
72 : uint32_t aId,
73 : MediaSystemResourceType aResourceType);
74 :
75 : void RemoveRequests(media::MediaSystemResourceManagerParent* aParent,
76 : MediaSystemResourceType aResourceType);
77 :
78 : void UpdateRequests(MediaSystemResourceType aResourceType);
79 :
80 : bool mDestroyed;
81 :
82 : nsClassHashtable<nsUint32HashKey, MediaSystemResource> mResources;
83 :
84 : static StaticRefPtr<MediaSystemResourceService> sSingleton;
85 : };
86 :
87 : } // namespace mozilla
88 :
89 : #endif
|