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 #include "mozilla/Monitor.h" 8 #include "mozilla/ReentrantMonitor.h" 9 10 #include "MediaSystemResourceClient.h" 11 12 namespace mozilla { 13 14 Atomic<uint32_t> MediaSystemResourceClient::sSerialCounter(0); 15 MediaSystemResourceClient(MediaSystemResourceType aReourceType)16MediaSystemResourceClient::MediaSystemResourceClient( 17 MediaSystemResourceType aReourceType) 18 : mResourceType(aReourceType), 19 mId(++sSerialCounter), 20 mListener(nullptr), 21 mResourceState(RESOURCE_STATE_START), 22 mIsSync(false), 23 mAcquireSyncWaitMonitor(nullptr), 24 mAcquireSyncWaitDone(nullptr) { 25 mManager = MediaSystemResourceManager::Get(); 26 if (mManager) { 27 mManager->Register(this); 28 } 29 } 30 ~MediaSystemResourceClient()31MediaSystemResourceClient::~MediaSystemResourceClient() { 32 ReleaseResource(); 33 if (mManager) { 34 mManager->Unregister(this); 35 } 36 } 37 SetListener(MediaSystemResourceReservationListener * aListener)38bool MediaSystemResourceClient::SetListener( 39 MediaSystemResourceReservationListener* aListener) { 40 if (!mManager) { 41 return false; 42 } 43 return mManager->SetListener(this, aListener); 44 } 45 Acquire()46void MediaSystemResourceClient::Acquire() { 47 if (!mManager) { 48 return; 49 } 50 mManager->Acquire(this); 51 } 52 AcquireSyncNoWait()53bool MediaSystemResourceClient::AcquireSyncNoWait() { 54 if (!mManager) { 55 return false; 56 } 57 return mManager->AcquireSyncNoWait(this); 58 } 59 ReleaseResource()60void MediaSystemResourceClient::ReleaseResource() { 61 if (!mManager) { 62 return; 63 } 64 mManager->ReleaseResource(this); 65 } 66 67 } // namespace mozilla 68