1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
9 from telemetry import test
10 from telemetry.core import bitmap
11 from telemetry.core import util
12 from telemetry.core.platform import android_platform_backend
13 from telemetry.unittest import system_stub
16 class MockAdbCommands(object):
17 def __init__(self, mock_content, system_properties):
18 self.mock_content = mock_content
19 self.system_properties = system_properties
20 if self.system_properties.get('ro.product.cpu.abi') == None:
21 self.system_properties['ro.product.cpu.abi'] = 'armeabi-v7a'
23 def CanAccessProtectedFileContents(self):
26 # pylint: disable=W0613
27 def GetProtectedFileContents(self, file_name):
28 return self.mock_content
30 def PushIfNeeded(self, host_binary, device_path):
33 def RunShellCommand(self, command):
37 class AndroidPlatformBackendTest(unittest.TestCase):
39 self._stubs = system_stub.Override(android_platform_backend,
40 ['perf_control', 'thermal_throttle'])
45 @test.Disabled('chromeos')
46 def testGetCpuStats(self):
48 '7702 (.android.chrome) S 167 167 0 0 -1 1077936448 '
49 '3247 0 0 0 4 1 0 0 20 0 9 0 5603962 337379328 5867 '
50 '4294967295 1074458624 1074463824 3197495984 3197494152 '
51 '1074767676 0 4612 0 38136 4294967295 0 0 17 0 0 0 0 0 0 '
52 '1074470376 1074470912 1102155776']
53 adb_valid_proc_content = MockAdbCommands(proc_stat_content, {})
54 backend = android_platform_backend.AndroidPlatformBackend(
55 adb_valid_proc_content, False)
56 cpu_stats = backend.GetCpuStats('7702')
57 self.assertEquals(cpu_stats, {'CpuProcessTime': 5.0})
59 @test.Disabled('chromeos')
60 def testGetCpuStatsInvalidPID(self):
61 # Mock an empty /proc/pid/stat.
62 adb_empty_proc_stat = MockAdbCommands([], {})
63 backend = android_platform_backend.AndroidPlatformBackend(
64 adb_empty_proc_stat, False)
65 cpu_stats = backend.GetCpuStats('7702')
66 self.assertEquals(cpu_stats, {})
69 def testFramesFromMp4(self):
70 mock_adb = MockAdbCommands([])
71 backend = android_platform_backend.AndroidPlatformBackend(mock_adb, False)
74 backend.InstallApplication('avconv')
76 if not backend.CanLaunchApplication('avconv'):
77 logging.warning('Test not supported on this platform')
78 return # pylint: disable=W0150
80 vid = os.path.join(util.GetUnittestDataDir(), 'vid.mp4')
81 expected_timestamps = [
92 # pylint: disable=W0212
93 for i, timestamp_bitmap in enumerate(backend._FramesFromMp4(vid)):
94 timestamp, bmp = timestamp_bitmap
95 self.assertEquals(timestamp, expected_timestamps[i])
96 expected_bitmap = bitmap.Bitmap.FromPngFile(os.path.join(
97 util.GetUnittestDataDir(), 'frame%d.png' % i))
98 self.assertTrue(expected_bitmap.IsEqual(bmp))