power-libperfmgr: simply wait if idle state node is not present

Change-Id: I93dd97e5437761d2d969f93a5af0cae864fd0a65
Signed-off-by: Jesse Chan <jc@lineageos.org>
tirimbino
Jesse Chan 4 years ago
parent f1e23cabb6
commit 5830e772d6
  1. 25
      hidl/power-libperfmgr/InteractionHandler.cpp

@ -65,15 +65,14 @@ bool InteractionHandler::Init() {
if (mState != INTERACTION_STATE_UNINITIALIZED) if (mState != INTERACTION_STATE_UNINITIALIZED)
return true; return true;
int fd = fb_idle_open(); mIdleFd = fb_idle_open();
if (fd < 0)
return false;
mIdleFd = fd;
mEventFd = eventfd(0, EFD_NONBLOCK); mEventFd = eventfd(0, EFD_NONBLOCK);
if (mEventFd < 0) { if (mEventFd < 0) {
ALOGE("Unable to create event fd (%d)", errno); ALOGE("Unable to create event fd (%d)", errno);
close(mIdleFd); if (mIdleFd >= 0) {
close(mIdleFd);
}
return false; return false;
} }
@ -96,7 +95,9 @@ void InteractionHandler::Exit() {
mThread->join(); mThread->join();
close(mEventFd); close(mEventFd);
close(mIdleFd); if (mIdleFd >= 0) {
close(mIdleFd);
}
} }
void InteractionHandler::PerfLock() { void InteractionHandler::PerfLock() {
@ -212,6 +213,18 @@ void InteractionHandler::WaitForIdle(int32_t wait_ms, int32_t timeout_ms) {
return; return;
} }
if (mIdleFd < 0) {
ret = poll(pfd, 1, timeout_ms);
if (ret > 0) {
ALOGV("%s: wait for duration aborted", __func__);
return;
} else if (ret < 0) {
ALOGE("%s: Error on waiting for duration (%zd)", __func__, ret);
return;
}
return;
}
ret = pread(mIdleFd, data, sizeof(data), 0); ret = pread(mIdleFd, data, sizeof(data), 0);
if (!ret) { if (!ret) {
ALOGE("%s: Unexpected EOF!", __func__); ALOGE("%s: Unexpected EOF!", __func__);

Loading…
Cancel
Save