Skip to content

Commit b288a57

Browse files
kalutesV8 LUCI CQ
authored andcommitted
Update android dumpsys battery to use proto
Use protobuf dumpsys format for parsing battery info using adb. Change-Id: I83335311b9de44aae2b7fbdcabe2febbf0693c3b Reviewed-on: https://chromium-review.googlesource.com/c/crossbench/+/6653463 Reviewed-by: Charles Dick <[email protected]> Commit-Queue: Kameron Lutes <[email protected]>
1 parent 2e43a86 commit b288a57

File tree

10 files changed

+103
-25
lines changed

10 files changed

+103
-25
lines changed

android_protoc/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@
88

99
with android_protoc_in_sys_path():
1010
from frameworks.base.core.proto.android.server import activitymanagerservice_pb2
11+
from frameworks.base.core.proto.android.service import battery_pb2
12+
from frameworks.proto_logging.stats.enums.os import enums_pb2

android_protoc/codegen/gen.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
# List of modules we want to depend on. We will protoc this module and all its
2626
# dependencies.
2727
PROTO_MODULES = [
28-
"frameworks.base.core.proto.android.server.activitymanagerservice_pb2"
28+
"frameworks.base.core.proto.android.server.activitymanagerservice_pb2",
29+
"frameworks.base.core.proto.android.service.battery_pb2",
30+
"frameworks.proto_logging.stats.enums.os.enums_pb2",
2931
]
3032

3133
# Map of repo name to optional list of folders to sparse checkout

android_protoc/frameworks/base/core/proto/android/service/__init__.py

Whitespace-only changes.

android_protoc/frameworks/base/core/proto/android/service/battery_pb2.py

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

android_protoc/frameworks/proto_logging/stats/enums/os/__init__.py

Whitespace-only changes.

android_protoc/frameworks/proto_logging/stats/enums/os/enums_pb2.py

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

crossbench/plt/android_adb.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from crossbench.plt.posix import RemotePosixPlatform
2727
from crossbench.plt.process_meminfo import ProcessMeminfo
2828

29-
from android_protoc import activitymanagerservice_pb2
29+
from android_protoc import activitymanagerservice_pb2, battery_pb2, enums_pb2
3030

3131
# Defines the Android permissions to be granted.
3232
# TODO(381985595): make this configurable.
@@ -818,10 +818,11 @@ def python_details(self) -> JsonDict:
818818
@property
819819
@override
820820
def is_battery_powered(self) -> bool:
821-
battery_info = self.adb.dumpsys("battery").lower()
822-
# Looking for any power source, i.e. 'AC powered: true'
823-
has_external_power = " powered: true" in battery_info
824-
return not has_external_power
821+
battery_info_bytes = self.adb.dumpsys_bytes("battery", "--proto")
822+
battery_info = battery_pb2.BatteryServiceDumpProto()
823+
battery_info.ParseFromString(battery_info_bytes)
824+
return (battery_info.plugged ==
825+
enums_pb2.BatteryPluggedStateEnum.BATTERY_PLUGGED_NONE)
825826

826827
@override
827828
def screenshot(self, result_path: pth.AnyPath) -> None:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
��� ��� (�Ӛ08@HbPdX�hjLi-ion
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
(��08@HbPdX�hjLi-ion

tests/crossbench/plt/test_android_adb.py

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@
4545
"""
4646

4747

48-
def load_dumpsys_meminfo_output():
49-
meminfo_result_path = pth.LocalPath(
50-
__file__).parent / "pb" / "dumpsys_meminfo.pb"
51-
return meminfo_result_path.read_bytes()
48+
def load_pb(path: str):
49+
return (pth.LocalPath(__file__).parent / "pb" / path).read_bytes()
5250

5351

54-
DUMPSYS_MEMINFO_OUTPUT = load_dumpsys_meminfo_output()
52+
DUMPSYS_MEMINFO_OUTPUT = load_pb("dumpsys_meminfo.pb")
53+
AC_POWERED_OUTPUT = load_pb("battery/ac_powered.pb")
54+
BATTERY_POWERED_OUTPUT = load_pb("battery/battery_powered.pb")
5555

5656
DUMPSYS_MEMINFO_TIMEOUT_OUTPUT = b'''
5757
*** SERVICE 'meminfo' DUMP TIMEOUT (1ms) EXPIRED ***
@@ -97,21 +97,10 @@ def test_is_android(self):
9797
self.assertTrue(self.platform.is_android)
9898

9999
def test_is_battery_powered(self):
100-
dumpsys_battery_output = textwrap.dedent("""
101-
AC powered: false
102-
USB powered: false
103-
Wireless powered: true
104-
Max charging current: 3000000
105-
""")
106-
self.expect_sh("dumpsys battery", result=dumpsys_battery_output)
100+
self.expect_sh("dumpsys battery --proto", result=AC_POWERED_OUTPUT)
107101
self.assertFalse(self.platform.is_battery_powered)
108-
dumpsys_battery_output = textwrap.dedent("""
109-
AC powered: false
110-
USB powered: false
111-
Wireless powered: false
112-
Max charging current: 3000000
113-
""")
114-
self.expect_sh("dumpsys battery", result=dumpsys_battery_output)
102+
103+
self.expect_sh("dumpsys battery --proto", result=BATTERY_POWERED_OUTPUT)
115104
self.assertTrue(self.platform.is_battery_powered)
116105

117106
def test_display_details(self):

0 commit comments

Comments
 (0)