Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/media/systemservices/MediaSystemResourceService.h
Line
Count
Source (jump to first uncovered line)
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
  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
    MediaSystemResourceRequest(media::MediaSystemResourceManagerParent* aParent, uint32_t aId)
53
0
      : mParent(aParent), mId(aId) {}
54
    media::MediaSystemResourceManagerParent* mParent;
55
    uint32_t mId;
56
  };
57
58
  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