| // Copyright 2025 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BASE_POWER_MONITOR_ENERGY_MONITOR_ANDROID_H_ | 
 | #define BASE_POWER_MONITOR_ENERGY_MONITOR_ANDROID_H_ | 
 |  | 
 | #include <jni.h> | 
 |  | 
 | #include <cstdint> | 
 | #include <utility> | 
 | #include <vector> | 
 |  | 
 | #include "base/android/jni_string.h" | 
 | #include "base/android/scoped_java_ref.h" | 
 | #include "base/base_export.h" | 
 | #include "build/build_config.h" | 
 |  | 
 | namespace base { | 
 | namespace android { | 
 |  | 
 | // Read and return the current remaining battery capacity (microampere-hours). | 
 | // Only supported with a device power source (i.e. not in child processes in | 
 | // Chrome) and on devices with Android >= Lollipop as well as a power supply | 
 | // that supports this counter. Returns 0 if unsupported. | 
 | int BASE_EXPORT GetRemainingBatteryCapacity(); | 
 |  | 
 | // Total energy consumed in microwatt-seconds for a subsystem. The exact list of | 
 | // consumers and the meaning of each consumer depends on the device | 
 | // https://developer.android.com/reference/android/os/PowerMonitor#POWER_MONITOR_TYPE_CONSUMER. | 
 | struct PowerMonitorReading { | 
 |   std::string consumer; | 
 |   int64_t total_energy; | 
 | }; | 
 |  | 
 | // Java -> Native conversion function. | 
 | PowerMonitorReading FromJavaPowerMonitorReading( | 
 |     JNIEnv* env, | 
 |     const JavaRef<jobject>& jobject); | 
 |  | 
 | // Read and return the total energy consumed per subsystem since boot in | 
 | // microwatt-seconds. Only supported on specific devices with Android >= Vanilla | 
 | // Ice Cream. Returns an empty vector if unsupported. This should be called only | 
 | // after we know the battery status from | 
 | // `PowerMonitor::AddPowerStateObserverAndReturnBatteryPowerStatus`. Otherwise | 
 | // the monitor might be not initialized, and this function may return an empty | 
 | // vector. | 
 | std::vector<PowerMonitorReading> BASE_EXPORT GetTotalEnergyConsumed(); | 
 |  | 
 | }  // namespace android | 
 | }  // namespace base | 
 |  | 
 | namespace jni_zero { | 
 |  | 
 | template <> | 
 | inline base::android::PowerMonitorReading | 
 | FromJniType<base::android::PowerMonitorReading>( | 
 |     JNIEnv* env, | 
 |     const JavaRef<jobject>& jobject) { | 
 |   return base::android::FromJavaPowerMonitorReading(env, jobject); | 
 | } | 
 |  | 
 | }  // namespace jni_zero | 
 |  | 
 | #endif  // BASE_POWER_MONITOR_ENERGY_MONITOR_ANDROID_H_ |