tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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