diff options
author | Hsin-Yi Chen <hsinyichen@google.com> | 2017-05-12 17:21:21 +0800 |
---|---|---|
committer | Hsin-Yi Chen <hsinyichen@google.com> | 2017-05-17 18:10:53 +0800 |
commit | 9f0853cfb155c904004669c6ead4bec203349ab0 (patch) | |
tree | 4640284a53e79c85003adb3573026d5ffaca85b8 /hwbinder_latency_test | |
parent | 95d21659529c7f887e3a0ddf16995a7f9084baf1 (diff) | |
download | performance-9f0853cfb155c904004669c6ead4bec203349ab0.tar.gz |
Add hwbinder latency Test
Integrate system/libhwbinder/vts/performance/Latency.cpp with VTS.
Test: vts-tradefed run commandAndExit vts -m HwBinderBinderizeLatencyTest
Bug: 37331532
Change-Id: Ib0e17dec501868b1e607270b1114baa36b81045b
Diffstat (limited to 'hwbinder_latency_test')
12 files changed, 343 insertions, 0 deletions
diff --git a/hwbinder_latency_test/HwBinderLatencyTest.py b/hwbinder_latency_test/HwBinderLatencyTest.py new file mode 100644 index 0000000..5d70625 --- /dev/null +++ b/hwbinder_latency_test/HwBinderLatencyTest.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import json +import logging + +from vts.runners.host import asserts +from vts.runners.host import base_test +from vts.runners.host import const +from vts.runners.host import test_runner +from vts.utils.python.controllers import android_device +from vts.utils.python.cpu import cpu_frequency_scaling + + +class HwBinderLatencyTest(base_test.BaseTestClass): + """A test case for the hwbinder latency benchmarking.""" + + def setUpClass(self): + required_params = ["hidl_hal_mode"] + self.getUserParams(required_params) + self.dut = self.registerController(android_device)[0] + self.dut.shell.InvokeTerminal("one") + self._cpu_freq = cpu_frequency_scaling.CpuFrequencyScalingController(self.dut) + self._cpu_freq.DisableCpuScaling() + + def setUp(self): + self._cpu_freq.SkipIfThermalThrottling(retry_delay_secs=30) + + def tearDown(self): + self._cpu_freq.SkipIfThermalThrottling() + + def tearDownClass(self): + self._cpu_freq.EnableCpuScaling() + + def testRunBenchmark32Bit(self): + self._uploadResult(self._runBenchmark(32), 32) + + def testRunBenchmark64Bit(self): + self._uploadResult(self._runBenchmark(64), 64) + + def _runBenchmark(self, bits): + """Runs the native binary and parses its result. + + Args: + bits: integer (32 or 64), the bitness of the binary to run. + + Returns: + dict, the benchmarking result converted from native binary's JSON + output. + """ + logging.info("Start %d-bit hwbinder latency test with HIDL mode=%s", + bits, self.hidl_hal_mode) + binary = "/data/local/tmp/%s/libhwbinder_latency%s" % (bits, bits) + min_cpu, max_cpu = self._cpu_freq.GetMinAndMaxCpuNo() + iterations = 1000 // (max_cpu - min_cpu) + results = self.dut.shell.one.Execute([ + "chmod 755 %s" % binary, + "LD_LIBRARY_PATH=/system/lib%s:/data/local/tmp/%s/hw:" + "/data/local/tmp/%s:$LD_LIBRARY_PATH " + "%s -raw_data -pair %d -i %d -m %s" % (bits, bits, bits, + binary, max_cpu - min_cpu, iterations, + self.hidl_hal_mode.encode("utf-8"))]) + # Parses the result. + asserts.assertEqual(len(results[const.STDOUT]), 2) + logging.info("stderr: %s", results[const.STDERR][1]) + logging.info("stdout: %s", results[const.STDOUT][1]) + asserts.assertFalse( + any(results[const.EXIT_CODE]), + "testRunBenchmark%sBit failed." % (bits)) + json_result = json.loads(results[const.STDOUT][1]); + asserts.assertTrue(json_result["inheritance"] == "PASS", + "Scheduler does not support priority inheritance."); + return json_result + + def _uploadResult(self, result, bits): + """Uploads the output of benchmark program to web DB. + + Args: + result: dict which is the benchmarking result. + bits: integer (32 or 64). + """ + opts = ["hidl_hal_mode=%s" % self.hidl_hal_mode.encode("utf-8")]; + min_cpu, max_cpu = self._cpu_freq.GetMinAndMaxCpuNo() + for i in range(max_cpu - min_cpu): + self.web.AddProfilingDataUnlabeledVector( + "hwbinder_latency_%sbits" % bits, + result["fifo_%d_data" % i], options=opts, + x_axis_label="hwbinder latency", + y_axis_label="Frequency") + + +if __name__ == "__main__": + test_runner.main() diff --git a/hwbinder_latency_test/__init__.py b/hwbinder_latency_test/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/hwbinder_latency_test/__init__.py diff --git a/hwbinder_latency_test/binderize/Android.mk b/hwbinder_latency_test/binderize/Android.mk new file mode 100644 index 0000000..9c440a4 --- /dev/null +++ b/hwbinder_latency_test/binderize/Android.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := HwBinderBinderizeLatencyTest +VTS_CONFIG_SRC_DIR := testcases/performance/hwbinder_latency_test/binderize +include test/vts/tools/build/Android.host_config.mk diff --git a/hwbinder_latency_test/binderize/AndroidTest.xml b/hwbinder_latency_test/binderize/AndroidTest.xml new file mode 100644 index 0000000..0c47d69 --- /dev/null +++ b/hwbinder_latency_test/binderize/AndroidTest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="Config for VTS libhwbinder latency tests"> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> + <option name="abort-on-push-failure" value="false" /> + <option name="push-group" value="HostDrivenTest.push" /> + <option name="cleanup" value="true" /> + <option name="push" value="DATA/lib/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/32/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/lib64/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/64/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/nativetest/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/32/libhwbinder_latency32" /> + <option name="push" value="DATA/nativetest64/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/64/libhwbinder_latency64" /> + <option name="push" value="DATA/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + <option name="push" value="DATA/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"> + </target_preparer> + <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> + <option name="test-module-name" value="HwBinderBinderizeLatencyTest" /> + <option name="test-case-path" value="vts/testcases/performance/hwbinder_latency_test/HwBinderLatencyTest" /> + <option name="test-config-path" value="vts/testcases/performance/hwbinder_latency_test/binderize/HwBinderBinderizeLatencyTest.config" /> + </test> +</configuration> diff --git a/hwbinder_latency_test/binderize/HwBinderBinderizeLatencyTest.config b/hwbinder_latency_test/binderize/HwBinderBinderizeLatencyTest.config new file mode 100644 index 0000000..fc792a7 --- /dev/null +++ b/hwbinder_latency_test/binderize/HwBinderBinderizeLatencyTest.config @@ -0,0 +1,3 @@ +{ + "hidl_hal_mode": "BINDERIZE" +} diff --git a/hwbinder_latency_test/binderize_systrace/Android.mk b/hwbinder_latency_test/binderize_systrace/Android.mk new file mode 100644 index 0000000..e716aa7 --- /dev/null +++ b/hwbinder_latency_test/binderize_systrace/Android.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := HwBinderBinderizeLatencySystraceTest +VTS_CONFIG_SRC_DIR := testcases/performance/hwbinder_latency_test/binderize_systrace +include test/vts/tools/build/Android.host_config.mk diff --git a/hwbinder_latency_test/binderize_systrace/AndroidTest.xml b/hwbinder_latency_test/binderize_systrace/AndroidTest.xml new file mode 100644 index 0000000..a6ca43f --- /dev/null +++ b/hwbinder_latency_test/binderize_systrace/AndroidTest.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="Config for VTS libhwbinder latency tests with systrace"> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> + <option name="abort-on-push-failure" value="false" /> + <option name="push-group" value="HostDrivenTest.push" /> + <option name="cleanup" value="true" /> + <option name="push" value="DATA/lib/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/32/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/lib64/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/64/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/nativetest/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/32/libhwbinder_latency32" /> + <option name="push" value="DATA/nativetest64/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/64/libhwbinder_latency64" /> + <option name="push" value="DATA/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + <option name="push" value="DATA/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"> + </target_preparer> + <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> + <option name="test-module-name" value="HwBinderBinderizeLatencySystraceTest" /> + <option name="test-case-path" value="vts/testcases/performance/hwbinder_latency_test/HwBinderLatencyTest" /> + <option name="test-config-path" value="vts/testcases/performance/hwbinder_latency_test/binderize/HwBinderBinderizeLatencyTest.config" /> + <option name="enable-systrace" value="true" /> + </test> +</configuration> diff --git a/hwbinder_latency_test/passthrough/Android.mk b/hwbinder_latency_test/passthrough/Android.mk new file mode 100644 index 0000000..12ca61f --- /dev/null +++ b/hwbinder_latency_test/passthrough/Android.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := HwBinderPassthroughLatencyTest +VTS_CONFIG_SRC_DIR := testcases/performance/hwbinder_latency_test/passthrough +include test/vts/tools/build/Android.host_config.mk diff --git a/hwbinder_latency_test/passthrough/AndroidTest.xml b/hwbinder_latency_test/passthrough/AndroidTest.xml new file mode 100644 index 0000000..d6b8f86 --- /dev/null +++ b/hwbinder_latency_test/passthrough/AndroidTest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="Config for VTS libhwbinder latency tests"> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> + <option name="abort-on-push-failure" value="false" /> + <option name="push-group" value="HostDrivenTest.push" /> + <option name="cleanup" value="true" /> + <option name="push" value="DATA/lib/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/32/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/lib64/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/64/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/nativetest/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/32/libhwbinder_latency32" /> + <option name="push" value="DATA/nativetest64/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/64/libhwbinder_latency64" /> + <option name="push" value="DATA/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + <option name="push" value="DATA/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"> + </target_preparer> + <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> + <option name="test-module-name" value="HwBinderPassthroughLatencyTest" /> + <option name="test-case-path" value="vts/testcases/performance/hwbinder_latency_test/HwBinderLatencyTest" /> + <option name="test-config-path" value="vts/testcases/performance/hwbinder_latency_test/passthrough/HwBinderPassthroughLatencyTest.config" /> + </test> +</configuration> diff --git a/hwbinder_latency_test/passthrough/HwBinderPassthroughLatencyTest.config b/hwbinder_latency_test/passthrough/HwBinderPassthroughLatencyTest.config new file mode 100644 index 0000000..54d9875 --- /dev/null +++ b/hwbinder_latency_test/passthrough/HwBinderPassthroughLatencyTest.config @@ -0,0 +1,3 @@ +{ + "hidl_hal_mode": "PASSTHROUGH" +} diff --git a/hwbinder_latency_test/passthrough_systrace/Android.mk b/hwbinder_latency_test/passthrough_systrace/Android.mk new file mode 100644 index 0000000..3a619e0 --- /dev/null +++ b/hwbinder_latency_test/passthrough_systrace/Android.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := HwBinderPassthroughLatencySystraceTest +VTS_CONFIG_SRC_DIR := testcases/performance/hwbinder_latency_test/passthrough_systrace +include test/vts/tools/build/Android.host_config.mk diff --git a/hwbinder_latency_test/passthrough_systrace/AndroidTest.xml b/hwbinder_latency_test/passthrough_systrace/AndroidTest.xml new file mode 100644 index 0000000..767abcb --- /dev/null +++ b/hwbinder_latency_test/passthrough_systrace/AndroidTest.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="Config for VTS libhwbinder latency tests with systrace"> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> + <option name="abort-on-push-failure" value="false" /> + <option name="push-group" value="HostDrivenTest.push" /> + <option name="cleanup" value="true" /> + <option name="push" value="DATA/lib/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/32/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/lib64/android.hardware.tests.libhwbinder@1.0.so->/data/local/tmp/64/android.hardware.tests.libhwbinder@1.0.so" /> + <option name="push" value="DATA/nativetest/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/32/libhwbinder_latency32" /> + <option name="push" value="DATA/nativetest64/libhwbinder_latency/libhwbinder_latency->/data/local/tmp/64/libhwbinder_latency64" /> + <option name="push" value="DATA/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + <option name="push" value="DATA/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so->/vendor/lib64/hw/android.hardware.tests.libhwbinder@1.0-impl.so" /> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"> + </target_preparer> + <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> + <option name="test-module-name" value="HwBinderPassthroughLatencySystraceTest" /> + <option name="test-case-path" value="vts/testcases/performance/hwbinder_latency_test/HwBinderLatencyTest" /> + <option name="test-config-path" value="vts/testcases/performance/hwbinder_latency_test/passthrough/HwBinderPassthroughLatencyTest.config" /> + <option name="enable-systrace" value="true" /> + </test> +</configuration> |