unplugged-vendor/frameworks/native/services/surfaceflinger/mediatek/SFPerfAPILoader.cpp

85 lines
2.4 KiB
C++

#ifdef MTK_SF_PERF_API
#include "SFPerfAPILoader.h"
#include <cinttypes>
#include <cstring>
#include <dlfcn.h>
#include <log/log.h>
#include <errno.h>
#include "SFPerfAPILoader.h"
namespace android {
#undef LOG_TAG
#define LOG_TAG "SFPerfAPILoader"
SFPerfAPILoader& SFPerfAPILoader::getInstance() {
static SFPerfAPILoader gInstance;
return gInstance;
}
SFPerfAPILoader::SFPerfAPILoader():
m_so_handle(nullptr),
mPerfHelper(nullptr),
mFnDestroyPerfHelper(nullptr),
mFnSetUclampMin(nullptr)
{
m_so_handle = dlopen("libsf_perf.so", RTLD_LAZY);
if (m_so_handle) {
createPerfHelperFn createPtr = reinterpret_cast<createPerfHelperFn>(dlsym(m_so_handle, "createPerfHelper"));
if (createPtr) {
mPerfHelper = createPtr();
if (!mPerfHelper) {
ALOGE("Failed to create PerfHelper");
} else {
ALOGV("SFPerfAPILoader created PerfHelper");
}
} else {
ALOGE("Failed to get function: createPerfHelper");
}
mFnDestroyPerfHelper = reinterpret_cast<DestroyPerfHelperFn>(dlsym(m_so_handle, "destroyPerfHelper"));
if (!mFnDestroyPerfHelper) {
ALOGE("Failed to get function: destroyPerfHelper");
}
mFnSetUclampMin = reinterpret_cast<SetUclampMinFn>(dlsym(m_so_handle, "setUclampMin"));
if (mFnSetUclampMin == nullptr) {
ALOGE("Failed to get function: setUclampMin");
} else {
ALOGV("set mFnSetUclampMin %p", mFnSetUclampMin);
}
} else {
ALOGE("Failed to load libsf_perf.so");
}
}
SFPerfAPILoader::~SFPerfAPILoader() {
if (mPerfHelper && mFnDestroyPerfHelper) {
mFnDestroyPerfHelper(mPerfHelper);
mPerfHelper = NULL;
mFnDestroyPerfHelper = NULL;
}
if (m_so_handle) {
dlclose(m_so_handle);
m_so_handle = NULL;
}
}
int SFPerfAPILoader::perfUclampMinRequest(pid_t pid, int uClampMin) {
if (!mPerfHelper) {
ALOGE("perfUclampMinRequest mPerfHelper NULL");
errno = EINVAL;
return -1;
}
if (mFnSetUclampMin == nullptr) {
ALOGE("perfUclampMinRequest mFnSetUclampMin NULL");
errno = EINVAL;
return -1;
}
ALOGI("perfUclampMinRequest uclamp min %d", uClampMin);
return mFnSetUclampMin(mPerfHelper, pid, (uClampMin*100)/1024);
}
} // namespace android
#endif