autosleep and earlysuspend are long-deprecated, so remove them to make
libsuspend slightly more comprehensible.
Test: builds and still suspends on marlin
bug 32621856
Change-Id: I66a904c3fce0111fb5e9d1ab9d205c97617ae210
If for some reason the system can't suspend (usually a driver bug),
libsuspend will currently attempt to retry suspend after 100ms. Because
entering suspend takes a significant amount of CPU time, this can be
extremely expensive and be a major contributor to rapid battery
drain. Move autosuspend to use exponential backoff if the previous
suspend attempt failed.
bug 32092914
Change-Id: I3e9e944f290de5f1853a02e3f61721ba9159df46
Should use android/log.h instead of cutils/log.h as a good example
to all others. Adjust header order to comply with Android Coding
standards.
Test: Compile
Bug: 26552300
Bug: 31289077
Change-Id: I2c9cbbbd64d8dccf2d44356361d9742e4a9b9031
Adds the call to wakeup_callback when the write to the /sys/power/state
fails. This will help userspace account for the suspend aborts.
Bug: 17478088
Bug: 18179405
Change-Id: Icd1194cfbaf61044ca0b2fe63a10a4c52e1535bc
In testing, I observed one instance of a call failing due to a signal
sent to the process. This could happen at various times so it's better
to be safe than sorry.
Bug: 20534809
Change-Id: I42242087300d8b840a50aec34aa6b2e1507cab50
Use the wakeup count interface for requesting suspend, instead of
autosleep, to allow userspace to collect stats on suspend/resume
activity.
Change-Id: I44b5ef031b2bdc5b09c904fb2adbbe16370c2984
Compile libsuspend as a static library as well, currently needed by the charger
code in some cases.
Related-to-bug: 7429504
Change-Id: I113017c2c855f915b77c76d8934b6e57c0bb532c
Signed-off-by: Iliyan Malchev <malchev@google.com>
Prevents possible SIGSEGV on second autosuspend_enable attempt when
first intialization attempt fails. autosuspend_inited should only
be set once autosuspend_ops has been assigned.
Consider the first call to autosuspend_enable().
autosuspend_init() sets its inited flag to true, and attempts to
set autosuspend_ops. If all the other autosuspend_*_init() attempts
fail, autosuspend_init() returns -1, which autosuspend_enable()
will return as a failure. A second call to autosuspend_enable()
will check autosuspend_init() and see that autosuspend has already
been initialized. It will attempt to access autosuspend_ops, which
were not set in the first initialization attempt, causing a SIGSEGV.
Change-Id: Ib2d3ee62fee4c3b6d0323e5b7f3709a23c6b923f
If autosuspend_autosleep_init is called when autosleep is enabled,
for example after a runtime restart with the screen off, the kernel
autosleep state will be enabled, but autosuspend_enabled is false.
Further calls to autosuspend_disable by the framework will not result
in autosleep being disabled.
Call autosuspend_autosleep_disable from autosuspend_autosleep_init
to get the kernel state into a known state that matches the
autosuspend_enabled flag.
Bug: 7119416
Change-Id: I8611e4fd256838272aad4382c2340508805b0376
libsuspend had only a single warning in the clang build. Fixing it to
make the build clean.
Change-Id: Iaac5f9144b6e6cb122141c6416056c1b2c9aa98e
Author: Edwin Vane <edwin.vane@intel.com>
Reviewed-by: Kevin P Schoedel <kevin.p.schoedel@intel.com>
Wait for the early suspend transition to finish to the point where
surfaceflinger would previously have synchronized. This is important
during screen on, to ensure the display early suspend handlers have
completed before surfaceflinger unblanks.
Change-Id: I91ac0253d9655c3f1ae3dd7f1a918c279568b23e
SurfaceFlinger and PowerManagerService manage their synchronization
without the help of early suspend, and SurfaceFlinger no longer unblocks
early suspend. Add a new thread when early suspend is detected that will
immediately unblock early suspend.
Change-Id: I87ef4984a2ab34cbbb3af8b7762236b9a92dc2ea
libsuspend provides functions autosuspend_enable() and
autosuspend_disable() to trigger suspend on a variety of different
kernels.
Change-Id: I5dc28fb51532fa7c514330f1cfde7698d31d734c