healthd: move binder fd to not use EPOLLWAKEUP
The binder fd doesn't need to use EPOLLWAKEUP and shouldn't; if it does, it will prevent suspend unnecessarily. bug 32180327 Change-Id: I292f1ada0c698290f6bd5518b237867ed69ec391
This commit is contained in:
parent
eec5e52ea2
commit
e89ea5eb85
3 changed files with 15 additions and 7 deletions
|
@ -136,10 +136,14 @@ static void healthd_mode_nop_battery_update(
|
|||
struct android::BatteryProperties* /*props*/) {
|
||||
}
|
||||
|
||||
int healthd_register_event(int fd, void (*handler)(uint32_t)) {
|
||||
int healthd_register_event(int fd, void (*handler)(uint32_t), EventWakeup wakeup) {
|
||||
struct epoll_event ev;
|
||||
|
||||
ev.events = EPOLLIN | EPOLLWAKEUP;
|
||||
ev.events = EPOLLIN;
|
||||
|
||||
if (wakeup == EVENT_WAKEUP_FD)
|
||||
ev.events |= EPOLLWAKEUP;
|
||||
|
||||
ev.data.ptr = (void *)handler;
|
||||
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &ev) == -1) {
|
||||
KLOG_ERROR(LOG_TAG,
|
||||
|
@ -245,7 +249,7 @@ static void uevent_init(void) {
|
|||
}
|
||||
|
||||
fcntl(uevent_fd, F_SETFL, O_NONBLOCK);
|
||||
if (healthd_register_event(uevent_fd, uevent_event))
|
||||
if (healthd_register_event(uevent_fd, uevent_event, EVENT_WAKEUP_FD))
|
||||
KLOG_ERROR(LOG_TAG,
|
||||
"register for uevent events failed\n");
|
||||
}
|
||||
|
@ -268,7 +272,7 @@ static void wakealarm_init(void) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (healthd_register_event(wakealarm_fd, wakealarm_event))
|
||||
if (healthd_register_event(wakealarm_fd, wakealarm_event, EVENT_WAKEUP_FD))
|
||||
KLOG_ERROR(LOG_TAG,
|
||||
"Registration of wakealarm event failed\n");
|
||||
|
||||
|
@ -286,7 +290,6 @@ static void healthd_mainloop(void) {
|
|||
if (timeout < 0 || (mode_timeout > 0 && mode_timeout < timeout))
|
||||
timeout = mode_timeout;
|
||||
nevents = epoll_wait(epollfd, events, eventct, timeout);
|
||||
|
||||
if (nevents == -1) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
|
|
|
@ -686,7 +686,7 @@ void healthd_mode_charger_init(struct healthd_config* config)
|
|||
ret = ev_init(input_callback, charger);
|
||||
if (!ret) {
|
||||
epollfd = ev_get_epollfd();
|
||||
healthd_register_event(epollfd, charger_event_handler);
|
||||
healthd_register_event(epollfd, charger_event_handler, EVENT_WAKEUP_FD);
|
||||
}
|
||||
|
||||
ret = res_create_display_surface("charger/battery_fail", &charger->surf_unknown);
|
||||
|
|
|
@ -73,9 +73,14 @@ struct healthd_config {
|
|||
bool (*screen_on)(android::BatteryProperties *props);
|
||||
};
|
||||
|
||||
enum EventWakeup {
|
||||
EVENT_NO_WAKEUP_FD,
|
||||
EVENT_WAKEUP_FD,
|
||||
};
|
||||
|
||||
// Global helper functions
|
||||
|
||||
int healthd_register_event(int fd, void (*handler)(uint32_t));
|
||||
int healthd_register_event(int fd, void (*handler)(uint32_t), EventWakeup wakeup = EVENT_NO_WAKEUP_FD);
|
||||
void healthd_battery_update();
|
||||
android::status_t healthd_get_property(int id,
|
||||
struct android::BatteryProperty *val);
|
||||
|
|
Loading…
Reference in a new issue