C++程序  |  66行  |  1.32 KB

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