Make the code somewhat easier to read by using designated initializers.
No functionality has been changed.
Bug: 362986353
Change-Id: I707ea158c9c45eeb2662d7b5c1efc9b63f0375cb
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Instead of calling ScheduleBatteryUpdate() every time a uevent has been
received, only call it after the netlink socket receive buffer has been
drained. This change is safe because the contents of the power supply
uevent messages is ignored.
A subtle change in this CL is that an additional call to
uevent_kernel_multicast_recv() is introduced after all the receive
buffer has been drained. In case of a receive buffer overflow, this
extra call will receive and clear the socket error (sk_err).
Bug: 362986353
Change-Id: Ic1c489dde3338f0142def743b4cd654363517486
Signed-off-by: Bart Van Assche <bvanassche@google.com>
KLOG messages are sent to /dev/kmsg and hence must be terminated with a
newline character.
Bug: 362986353
Change-Id: I7484b7722f05d8defb9529788324ac51228b7ea6
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Instead of hard-coding input lengths, let the compiler calculate the
input length.
Change-Id: I47d849b85dd983706bfada0293ccbdd04c8a597a
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Revert this CL because there are several signs that too much time
is spent in healthd and because CL "libhealthloop: Handle netlink
receive buffer overflows" is suspected of causing an infinite loop.
Bug: 359559224
Change-Id: Iaec132da47284d662b357b901b81b21fb6d7cd9e
Signed-off-by: Bart Van Assche <bvanassche@google.com>
healthd receives power supply information as uevents and holds a
wakelock while receiving these uevents. Without uevent filter, suspend
is postponed indefinitely if a uevent is generated during suspend. Fix
this by attaching a BPF program to the uevent socket that filters out
all events that are not power supply events.
This CL replaces the following CLs:
* Lianwei Wang, healthd: Don't set all eventpoll wakeup-able,
2015-07-09
(https://android-review.googlesource.com/c/platform/system/core/+/158851).
* Stephane Lee, Add BPF filter to filter uevents for
SUBSYSTEM=powersupply, 2022-05-06.
Multiple ideas and some code in this CL have been borrowed from
Stephane Lee's CL.
Bug: 139203596
Bug: 140330870
Bug: 203131934
Bug: 203229817
Bug: 203462310
Bug: 221725014
Test: Verified that a Pixel 2024 still wakes up if a USB cable is connected or disconnected.
Test: Verified that suspend and resume still works for a Pixel 2024 device.
Test: Verified that the following text appears in the Cuttlefish logcat output: "HealthLoop: Successfully attached BPF program to uevent socket"
Test: Verified as follows that recovery mode works fine with Cuttlefish: adb reboot recovery && adb root && adb shell dmesg | grep -E 'F DEBUG|HealthLoop'
Change-Id: I64446b103d660d220880461bdef7ef0f531e1734
Signed-off-by: Bart Van Assche <bvanassche@google.com>
The Linux kernel netlink implementation sets EPOLLERR if delivery of a
netlink message fails because of a buffer overrun (see also the Linux
kernel netlink_overrun() and sock_def_error_report() functions). Handle
buffer overruns by calling ScheduleBatteryUpdate() unconditionally.
Bug: 203462310
Change-Id: I54f7d239e6b4caad0db4d1b15de7c0385f796ebd
Signed-off-by: Bart Van Assche <bvanassche@google.com>
BoundFunction is an alias for std::function<>. Copying a function object
may be expensive. Use std::move() to avoid copying std::function<>. From
https://engdoc.corp.google.com/eng/doc/devguide/cpp/std_function.md:
"Generally prefer both accepting and passing by value if ownership is
transferred. Recall that when using value semantics, it's important to
also use std::move() when appropriate."
Bug: 203462310
Change-Id: I9fb87737dd5ce0fbb84bfbbdb0f8bb952dea1fbc
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Remove the #include directives for header files of which no symbols are
used.
Bug: 203462310
Change-Id: I0d1678d9d01f05d7dc83e70b5f4df0f1129b1968
Signed-off-by: Bart Van Assche <bvanassche@google.com>
1. add the new propertes
- batteryHealthData
- batteryStateOfHealth
- chargingState
- chargingPolicy
2. add new types to health status
3. add new methods
- setChargingPolicy
- getChargingPolicy
- getBatteryHealthData
Bug: 251425963
Test: m android.hardware.health-update-api
Change-Id: Ie2339c50e1f9bfc28427e4108a95b1a16c739205
Signed-off-by: Jack Wu <wjack@google.com>
* Timed out runs do not show any warning messages.
* These test files cannot finish clang-tidy runs with
the following settings:
TIDY_TIMEOUT=90
WITH_TIDY=1
CLANG_ANALYZER_CHECKS=1
* When TIDY_TIMEOUT is set, in Android continuous builds,
tidy_timeout_srcs files will not be compiled by clang-tidy.
When developers build locally without TIDY_TIMEOUT,
tidy_timeout_srcs files will be compiled.
* Some of these test modules may be split into smaller ones,
or disable some time consuming checks, and then
enable clang-tidy to run within limited time.
Bug: 201099167
Test: make droid tidy-hardware-interfaces_subset
Change-Id: I1de28f1572fff368f67eab512fffec9f2e5c2a9b
This is a shim library that wraps a HIDL IHealth to
an AIDL BnHealth.
Also add tests for the library.
Bug: 177269435
Test: libhealthshim_test
Change-Id: Ia5f32c1ae0693c70cf698b46b48d5f77006cf6c7
Make the source code slightly easier to read by removing a macro that is
only used once.
Change-Id: I954a1ee9760398480c68a7e9bd2cdf58527c5746
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Added SPDX-license-identifier-Apache-2.0 to:
health/utils/libhealthtest/Android.bp
Bug: 68860345
Bug: 151177513
Bug: 151953481
Test: m all
Change-Id: Icad37f04c1ca51b2b111b980a45002bf027505c8
This is a direct translation of the health 2.0
and 2.1 VTS tests.
Some slight modifications are made (e.g. use googlemock
matchers) to make the test code more readable.
Test: run on Pixel
Bug: 203245778
Change-Id: Ifc3799a04a6a09d0d53f400b60d19fbfe004a3e3
Compared to the HIDL HAL implementation,
- libhealthloop (and the HealthLoop class) is kept
- Create libhealthaidlimpl that replaces libhealth2impl. Fork the implementation because
libhealth2impl is highly coupled with HIDL’s design rationale. This includes forking:
- HalHealthLoop
- Health implementation
- Combine the passthrough Health and hwbinder BinderHealth classes into the AIDL
implementation of Health. This is because AIDL does not support passthrough transport.
Separating the implementation for the two transports in HIDL does not make sense for AIDL.
- In HIDL, a BinderHealth is a HalHealthLoop which is composed of a (passthrough)
Health implementation. As a result of this change, in AIDL, a Health implementation
is a HalHealthLoop, which associates with the Health implementation itself with a raw
pointer.
- hidl_death_recipient becomes ScopedAIBinder_DeathRecipient
- Callback becomes LinkedCallback
Test: manual
Bug: 177269435
Change-Id: I76e914117ce09b218cdb9d655f2135d29bb629ae
Though it is useful to log when the client is dead, it
is too spammy when the framework is dead. Stop spamming.
Test: pass
Bug: 191548101
Change-Id: I43bef16b14300c3e435173ef2af9d8dd9dbfedb8
getHealthInfo_2_1 calls UpdateHealthInfo, where a subclass may
update health_info without updating the data in BatteryMonitor.
Hence, calling battery_monitor_.logValues() isn't accurate.
Log values properly by logging the updated health_info struct.
Test: healthd kernel logs have correct data
Fixes: 179326883
Change-Id: Ifab863746793abf3e3f1d5a458f05f4d9889bdfc
These are a legacy holdover from when libutils String8 couldn't be used
at static time.
Bug: N/A
Test: N/A
Change-Id: I009b2ca53631509072b4085f3f53c0b94e71b13e
Full charge capacity is already included as part of
health HAL 1.0. Concluded in b/149121450 to add a value
that is valuable.
Bug: 149428646
Bug: 149121450
Test: lshal debug android.hardware.health@2.1::IHealth/default
Change-Id: Iadf3c14850df57034378dcc10cdbab0eb43c3aae
This change converts the original healthd_common.cpp to a
C++ class, HealthLoop, that manages the infinite loop in health-related
modules (charger, health HAL, healthd, etc.). By doing so, the global
static variables (including FDs and healthd_mode_ops) are cleaned up.
This helps us implement health HAL 2.1.
In order to support legacy modules (namely, healthd, charger, health HAL
2.0, which all depends on android.hardware.health@2.0-impl), a
healthd_common_adapter.cpp file is added to
android.hardware.health@2.0-impl, so that the following functions
in healthd/healthd.h continues to be implemented using the global
healthd_mode_ops:
- healthd_register_event
- healthd_battery_update_internal
Test: boot up the device and run VTS test on health HAL.
Bug: 137670450
Bug: 142260281
Change-Id: Iadcfc1315155404a3600f0e1219b5bc370d96409