| /* |
| * 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 |