Skip to content

Commit e370c21

Browse files
authored
[Battery drain rate] Add support for battery drain rate (#899)
* Add new battery level * Bump to latest shared-core * Update DeviceStateListenerLogger.kt * linux test fixes * Update lib.rs * Update lib.rs
1 parent 48d0fd1 commit e370c21

File tree

9 files changed

+148
-141
lines changed

9 files changed

+148
-141
lines changed

Cargo.Bazel.lock

Lines changed: 49 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.lock

Lines changed: 48 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,31 @@ android_logger = { version = "0.15.1", default-features = false }
1919
anyhow = "1.0.101"
2020
assert_matches = "1.5.0"
2121
async-trait = "0.1.89"
22-
bd-api = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
23-
bd-bonjson = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
24-
bd-bonjson-ffi = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
25-
bd-buffer = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
26-
bd-client-common = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
27-
bd-client-stats-store = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
28-
bd-crash-handler = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
29-
bd-device = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
30-
bd-error-reporter = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
31-
bd-grpc = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
32-
bd-hyper-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a", default-features = false, features = ["ring"] }
33-
bd-key-value = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
34-
bd-log = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
35-
bd-log-metadata = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
36-
bd-log-primitives = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
37-
bd-logger = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
38-
bd-noop-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
39-
bd-proto = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
40-
bd-report-parsers = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
41-
bd-report-writer = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
42-
bd-runtime = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
43-
bd-session = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
44-
bd-shutdown = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
45-
bd-test-helpers = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a", default-features = false, features = ["ring"] }
46-
bd-time = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "593520173f95fb38d8aa2020e3b009907cacf87a" }
22+
bd-api = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
23+
bd-bonjson = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
24+
bd-bonjson-ffi = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
25+
bd-buffer = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
26+
bd-client-common = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
27+
bd-client-stats-store = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
28+
bd-crash-handler = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
29+
bd-device = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
30+
bd-error-reporter = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
31+
bd-grpc = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
32+
bd-hyper-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f", default-features = false, features = ["ring"] }
33+
bd-key-value = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
34+
bd-log = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
35+
bd-log-metadata = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
36+
bd-log-primitives = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
37+
bd-logger = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
38+
bd-noop-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
39+
bd-proto = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
40+
bd-report-parsers = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
41+
bd-report-writer = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
42+
bd-runtime = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
43+
bd-session = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
44+
bd-shutdown = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
45+
bd-test-helpers = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f", default-features = false, features = ["ring"] }
46+
bd-time = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "ee02f270a91dbe9603b8a2447153e5f7ec95425f" }
4747
clap = { version = "4.5.57", features = ["derive", "env"] }
4848
ctor = "0.6.3"
4949
env_logger = { version = "0.11.8", default-features = false }

platform/jvm/capture/src/main/kotlin/io/bitdrift/capture/events/device/DeviceStateListenerLogger.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ internal class DeviceStateListenerLogger(
9393
log(
9494
combineFields(
9595
fieldOf("_state", "charging"),
96-
fieldsOf(batteryMonitor.batteryPercentageAttribute()),
96+
fieldsOf(batteryMonitor.batteryValAttribute()),
97+
fieldsOf(batteryMonitor.batteryLevelAttribute()),
9798
),
9899
BATTERY_CHANGE,
99100
)
@@ -102,7 +103,8 @@ internal class DeviceStateListenerLogger(
102103
log(
103104
combineFields(
104105
fieldOf("_state", "unplugged"),
105-
fieldsOf(batteryMonitor.batteryPercentageAttribute()),
106+
fieldsOf(batteryMonitor.batteryValAttribute()),
107+
fieldsOf(batteryMonitor.batteryLevelAttribute()),
106108
),
107109
BATTERY_CHANGE,
108110
)
@@ -117,7 +119,8 @@ internal class DeviceStateListenerLogger(
117119
log(
118120
combineFields(
119121
fieldsOf(powerMonitor.isPowerSaveModeEnabledAttribute()),
120-
fieldsOf(batteryMonitor.batteryPercentageAttribute()),
122+
fieldsOf(batteryMonitor.batteryValAttribute()),
123+
fieldsOf(batteryMonitor.batteryLevelAttribute()),
121124
fieldsOf(batteryMonitor.isBatteryChargingAttribute()),
122125
),
123126
BATTERY_LOW,

platform/jvm/capture/src/main/kotlin/io/bitdrift/capture/events/performance/BatteryMonitor.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ internal class BatteryMonitor(
1717
) {
1818
private val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
1919

20-
fun batteryPercentageAttribute(): Pair<String, String> = "_battery_val" to batteryPercentage().toString()
20+
fun batteryValAttribute(): Pair<String, String> = "_battery_val" to batteryPercentage().toString()
21+
22+
fun batteryLevelAttribute(): Pair<String, String> = "_battery_level" to batteryLevelCapacity().toString()
2123

2224
fun isBatteryChargingAttribute(): Pair<String, String> = Pair("_state", if (isBatteryCharging()) "charging" else "unplugged")
2325

@@ -30,5 +32,7 @@ internal class BatteryMonitor(
3032
return (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL)
3133
}
3234

33-
private fun batteryPercentage(): Float = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) / 100.0f
35+
private fun batteryPercentage(): Float = batteryLevelCapacity() / 100.0f
36+
37+
private fun batteryLevelCapacity(): Int = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
3438
}

platform/jvm/capture/src/main/kotlin/io/bitdrift/capture/events/performance/ResourceUtilizationTarget.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ internal class ResourceUtilizationTarget(
4141
memorySnapshot,
4242
diskUsageMonitor.getDiskUsage(),
4343
fieldsOf(powerMonitor.isPowerSaveModeEnabledAttribute()),
44-
fieldsOf(batteryMonitor.batteryPercentageAttribute()),
44+
fieldsOf(batteryMonitor.batteryValAttribute()),
45+
fieldsOf(batteryMonitor.batteryLevelAttribute()),
4546
fieldsOf(batteryMonitor.isBatteryChargingAttribute()),
4647
)
4748

platform/jvm/capture/src/test/kotlin/io/bitdrift/capture/events/performance/ResourceUtilizationTargetTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ class ResourceUtilizationTargetTest {
6262
@Test
6363
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
6464
fun resourceUtilizationTickEmitsLog() {
65-
whenever(batteryMonitor.batteryPercentageAttribute()).thenReturn(Pair("_battery_val", "0.75"))
65+
whenever(batteryMonitor.batteryValAttribute()).thenReturn(Pair("_battery_val", "0.75"))
66+
whenever(batteryMonitor.batteryLevelAttribute()).thenReturn(Pair("_battery_level", "75"))
6667
whenever(batteryMonitor.isBatteryChargingAttribute()).thenReturn(Pair("_state", "charging"))
6768
whenever(powerMonitor.isPowerSaveModeEnabledAttribute()).thenReturn(Pair("_low_power_enabled", "1"))
6869
whenever(diskUsageMonitor.getDiskUsage()).thenReturn(ArrayFields.EMPTY)
@@ -82,6 +83,7 @@ class ResourceUtilizationTargetTest {
8283
"_memory_class" to "1",
8384
"_is_memory_low" to "0",
8485
"_battery_val" to "0.75",
86+
"_battery_level" to "75",
8587
"_state" to "charging",
8688
"_low_power_enabled" to "1",
8789
)
@@ -101,7 +103,8 @@ class ResourceUtilizationTargetTest {
101103
fun resourceUtilizationTickEmitsAppMemPressureLog() {
102104
memoryMetricsProvider.setIsMemoryLow(true)
103105

104-
whenever(batteryMonitor.batteryPercentageAttribute()).thenReturn(Pair("_battery_val", "0.75"))
106+
whenever(batteryMonitor.batteryValAttribute()).thenReturn(Pair("_battery_val", "0.75"))
107+
whenever(batteryMonitor.batteryLevelAttribute()).thenReturn(Pair("_battery_level", "75"))
105108
whenever(batteryMonitor.isBatteryChargingAttribute()).thenReturn(Pair("_state", "charging"))
106109
whenever(powerMonitor.isPowerSaveModeEnabledAttribute()).thenReturn(Pair("_low_power_enabled", "1"))
107110
whenever(diskUsageMonitor.getDiskUsage()).thenReturn(ArrayFields.EMPTY)

platform/swift/source/default/events/resource/models/BatterySnapshot.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ struct BatterySnapshot {
1717

1818
extension BatterySnapshot: ResourceSnapshot {
1919
func toDictionary() -> [String: String] {
20-
return [
20+
var dict: [String: String] = [
2121
"_battery_val": String(self.batteryValue),
2222
"_state": self.batteryState,
2323
]
24+
if self.batteryValue >= 0 {
25+
dict["_battery_level"] = String(Int(self.batteryValue * 100))
26+
}
27+
return dict
2428
}
2529
}

platform/test_helpers/src/lib.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -277,19 +277,11 @@ pub fn server_instance_configure_aggressive_uploads_impl(
277277
ValueKind::Int(1),
278278
),
279279
(
280-
bd_runtime::runtime::log_upload::RetryBackoffMaxFlag::path(),
280+
bd_runtime::runtime::retry_backoff::InitialBackoffInterval::path(),
281281
ValueKind::Int(1),
282282
),
283283
(
284-
bd_runtime::runtime::log_upload::RetryBackoffInitialFlag::path(),
285-
ValueKind::Int(1),
286-
),
287-
(
288-
bd_runtime::runtime::api::InitialBackoffInterval::path(),
289-
ValueKind::Int(1),
290-
),
291-
(
292-
bd_runtime::runtime::api::MaxBackoffInterval::path(),
284+
bd_runtime::runtime::retry_backoff::MaxBackoffInterval::path(),
293285
ValueKind::Int(10),
294286
),
295287
(

0 commit comments

Comments
 (0)