unplugged-system/frameworks/native/services/surfaceflinger/mediatek/DisplayHardware/PowerHalWrapper.cpp

68 lines
1.8 KiB
C++

#undef LOG_TAG
#define LOG_TAG "PowerHalWrapper"
#include <dlfcn.h>
#include <utils/Log.h>
#include "DisplayHardware/PowerHalWrapper.h"
namespace android {
#if ((defined MTK_SF_HINT_DISPLAY_INFO) || (defined MTK_SF_HINT_LOW_POWER))
PowerHalWrapper& PowerHalWrapper::getInstance() {
static PowerHalWrapper gInstance;
return gInstance;
}
#define FN_DLSYM(funcVar, funcType, funcName) ({ \
funcVar = reinterpret_cast<funcType>(dlsym(mSoHandle, funcName)); \
if (funcVar == nullptr) { \
ALOGW("failed to find " funcName); \
} \
}) \
PowerHalWrapper::PowerHalWrapper()
{
mSoHandle = NULL;
mEnableMultiDisplayMode = NULL;
mSoHandle = dlopen(LIB_FULL_NAME, RTLD_NOW);
if (mSoHandle != NULL) {
void *func = dlsym(mSoHandle, "PowerHal_Wrap_EnableMultiDisplayMode");
mEnableMultiDisplayMode = reinterpret_cast<enableMultiDisplayMode>(func);
if (mEnableMultiDisplayMode == NULL) {
ALOGE("PowerAdvisor::setupPowerHalAPI init fail!");
}
FN_DLSYM(mFuncEnableSFLowPowerMode, FuncEnableSFLowPowerMode, "PowerHal_Wrap_EnableSFLowPowerMode");
} else {
ALOGE("PowerAdvisor::setupPowerHalAPI dlerror:%s", dlerror());
}
}
PowerHalWrapper::~PowerHalWrapper()
{
if (mSoHandle) {
dlclose(mSoHandle);
}
}
void PowerHalWrapper::hintMultiDisplay(const int& enable, const int& fps)
{
if (mEnableMultiDisplayMode) {
ALOGI("mEnableMultiDisplayMode enable=%d fps=%d", enable, fps);
mEnableMultiDisplayMode(enable, fps);
}
}
void PowerHalWrapper::hintSFLowPower(int enable)
{
if (mFuncEnableSFLowPowerMode) {
ALOGI("mFuncEnableSFLowPowerMode enable=%d", enable);
mFuncEnableSFLowPowerMode(enable);
} else {
ALOGE("mFuncEnableSFLowPowerMode is empty");
}
}
#endif
} // namespace android