1. Define SDE interfaces for hwc. 2. Define strategy manager interfaces for composition manager. 3. Define utility classes used by SDE. Change-Id: I2985fbd05e824cb41ac9b03aa0114daac754d712
86 lines
2.8 KiB
C++
86 lines
2.8 KiB
C++
/*
|
|
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification, are permitted
|
|
* provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright notice, this list of
|
|
* conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright notice, this list of
|
|
* conditions and the following disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
|
|
* endorse or promote products derived from this software without specific prior written
|
|
* permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef __LOCKER_H__
|
|
#define __LOCKER_H__
|
|
|
|
#include <stdint.h>
|
|
#include <pthread.h>
|
|
|
|
#define SCOPE_LOCK(locker) Locker::ScopeLock scopeLock(locker)
|
|
|
|
namespace sde {
|
|
|
|
class Locker {
|
|
public:
|
|
class ScopeLock {
|
|
public:
|
|
explicit ScopeLock(Locker& locker) : locker_(locker) {
|
|
locker_.Lock();
|
|
}
|
|
|
|
~ScopeLock() {
|
|
locker_.Unlock();
|
|
}
|
|
|
|
private:
|
|
Locker &locker_;
|
|
};
|
|
|
|
Locker() {
|
|
pthread_mutex_init(&mutex_, 0);
|
|
pthread_cond_init(&condition_, 0);
|
|
}
|
|
|
|
~Locker() {
|
|
pthread_mutex_destroy(&mutex_);
|
|
pthread_cond_destroy(&condition_);
|
|
}
|
|
|
|
void Lock() { pthread_mutex_lock(&mutex_); }
|
|
void Unlock() { pthread_mutex_unlock(&mutex_); }
|
|
void Signal() { pthread_cond_signal(&condition_); }
|
|
void Broadcast() { pthread_cond_broadcast(&condition_); }
|
|
void Wait() { pthread_cond_wait(&condition_, &mutex_); }
|
|
int WaitFinite(long int ms) {
|
|
struct timespec ts;
|
|
struct timeval tv;
|
|
gettimeofday(&tv, NULL);
|
|
ts.tv_sec = tv.tv_sec + ms/1000;
|
|
ts.tv_nsec = tv.tv_usec*1000 + (ms%1000)*1000000;
|
|
ts.tv_sec += ts.tv_nsec/1000000000L;
|
|
ts.tv_nsec += ts.tv_nsec%1000000000L;
|
|
return pthread_cond_timedwait(&condition_, &mutex_, &ts);
|
|
}
|
|
|
|
private:
|
|
pthread_mutex_t mutex_;
|
|
pthread_cond_t condition_;
|
|
};
|
|
|
|
} // namespace sde
|
|
|
|
#endif // __LOCKER_H__
|
|
|