| # Copyright 2022 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import unittest |
| from unittest import mock |
| |
| from contrib.power.perf_benchmark_with_profiling \ |
| import PerfBenchmarkWithProfiling |
| from telemetry.core import android_platform |
| from telemetry.internal.backends import android_browser_backend_settings |
| from telemetry.internal.backends.chrome import android_browser_finder |
| from telemetry.internal.browser.possible_browser import PossibleBrowser |
| from telemetry.internal.platform import android_platform_backend |
| from telemetry.testing import options_for_unittests |
| |
| |
| class PerfBenchmarkForTesting(PerfBenchmarkWithProfiling): |
| def GetSamplingFrequencyHz(self): |
| return 1234 |
| |
| def CustomizeSystemTraceConfig(self, system_trace_config): |
| system_trace_config.EnableFtraceCpu() |
| |
| |
| class PerfBenchmarkWithProfilingTest(unittest.TestCase): |
| def setUp(self): |
| self._finder_options = options_for_unittests.GetCopy() |
| self._fake_platform = mock.Mock(spec=android_platform.AndroidPlatform) |
| # pylint: disable=protected-access |
| self._fake_platform._platform_backend = mock.Mock( |
| spec=android_platform_backend.AndroidPlatformBackend) |
| |
| def testWithoutBrowser(self): |
| benchmark = PerfBenchmarkForTesting() |
| benchmark.CustomizeOptions(finder_options=self._finder_options, |
| possible_browser=None) |
| options = benchmark.CreateCoreTimelineBasedMeasurementOptions() |
| text_config = options.config.system_trace_config.GetTextConfig() |
| self.assertNotIn('name: "linux.perf"', text_config) |
| |
| def testWithoutAndroidBrowser(self): |
| benchmark = PerfBenchmarkForTesting() |
| possible_browser = PossibleBrowser(browser_type="reference", |
| target_os="linux", |
| supports_tab_control=None) |
| benchmark.CustomizeOptions(finder_options=self._finder_options, |
| possible_browser=possible_browser) |
| options = benchmark.CreateCoreTimelineBasedMeasurementOptions() |
| text_config = options.config.system_trace_config.GetTextConfig() |
| self.assertNotIn('name: "linux.perf"', text_config) |
| |
| @unittest.skip("Temporary disabled to facilitate an API change in Telemetry.") |
| def testWithAndroidBrowser(self): |
| benchmark = PerfBenchmarkForTesting() |
| possible_browser = android_browser_finder.PossibleAndroidBrowser( |
| "android-chromium-bundle", self._finder_options, self._fake_platform, |
| android_browser_backend_settings.ANDROID_CHROMIUM_BUNDLE) |
| benchmark.CustomizeOptions(finder_options=self._finder_options, |
| possible_browser=possible_browser) |
| options = benchmark.CreateCoreTimelineBasedMeasurementOptions() |
| text_config = options.config.system_trace_config.GetTextConfig() |
| self.assertIn('name: "linux.perf"', text_config) |
| self.assertIn('sampling_frequency: 1234', text_config) |
| self.assertIn('target_cmdline: "org.chromium.chrome*"', text_config) |
| self.assertIn('name: "org.chromium.trace_event"', text_config) |
| self.assertIn('name: "org.chromium.trace_metadata2"', text_config) |