/* * Copyright (c) 2014 Google, Inc. All Rights Reserved. * */ #ifndef POWER_HAL_TIME_QOS_MANAGER_H #define POWER_HAL_TIME_QOS_MANAGER_H #include <stdint.h> #include <sys/types.h> #include <utils/threads.h> #include <utils/String8.h> #include <utils/Errors.h> #include <utils/Log.h> using namespace android; extern void sysfs_write(const char *path, const char *s); class QosObject { public: virtual ~QosObject() {} virtual void enter() = 0; virtual void exit() = 0; }; class SysfsQosObject : public QosObject { public: SysfsQosObject(const char* nodeName, const char* enterCmd, const char* exitCmd) : mNodeName(nodeName), mEnterCmd(enterCmd), mExitCmd(exitCmd) {} virtual void enter(); virtual void exit(); private: const char *mNodeName; const char *mEnterCmd; const char *mExitCmd; }; class TimedQosManager : public Thread { public: TimedQosManager(const char *name, QosObject *qosObj, bool oneShot) : Thread(false), mName(name), mQosObject(qosObj), mOneShot(oneShot), mLock("lock") {} virtual ~TimedQosManager() { delete mQosObject; } virtual bool threadLoop(); void requestTimedQos(nsecs_t timeout); private: const char *mName; QosObject *mQosObject; bool mOneShot; Mutex mLock; Condition mCondition; nsecs_t mTargetTime; }; #endif