11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkThread_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkThread_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkThread_platform.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/****** SkThread_platform needs to define the following... 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectint32_t sk_atomic_inc(int32_t*); 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectint32_t sk_atomic_dec(int32_t*); 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkMutex { 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMutex(); 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project ~SkMutex(); 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void acquire(); 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void release(); 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project****************/ 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkAutoMutexAcquire : SkNoncopyable { 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 344f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger explicit SkAutoMutexAcquire(SkBaseMutex& mutex) : fMutex(&mutex) 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fMutex != NULL); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project mutex.acquire(); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** If the mutex has not been release, release it now. 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project ~SkAutoMutexAcquire() 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fMutex) 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMutex->release(); 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** If the mutex has not been release, release it now. 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void release() 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fMutex) 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMutex->release(); 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMutex = NULL; 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 584f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger SkBaseMutex* fMutex; 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 62