#undef LOG_TAG #define LOG_TAG "PowerHalWrapper" #include #include #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(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(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