summaryrefslogtreecommitdiffstats
path: root/tools/android/adb_profile_chrome/perf_controller_unittest.py
blob: eac12eba63028e26204d89ebac7ad1c90d83bd3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import json

from adb_profile_chrome import controllers_unittest
from adb_profile_chrome import perf_controller
from adb_profile_chrome import ui

from pylib import constants


class PerfProfilerControllerTest(controllers_unittest.BaseControllerTest):
  def testGetCategories(self):
    if not perf_controller.PerfProfilerController.IsSupported():
      return
    categories = \
        perf_controller.PerfProfilerController.GetCategories(self.device)
    assert 'cycles' in ' '.join(categories)

  def testTracing(self):
    if not perf_controller.PerfProfilerController.IsSupported():
      return
    ui.EnableTestMode()
    categories = ['cycles']
    controller = perf_controller.PerfProfilerController(self.device,
                                                        categories)

    interval = 1
    try:
      controller.StartTracing(interval)
    finally:
      controller.StopTracing()

    result = controller.PullTrace()
    # Perf-to-JSON conversion can fail if dependencies are missing.
    if not result:
      perf_script_path = os.path.join(constants.DIR_SOURCE_ROOT,
          'tools', 'telemetry', 'telemetry', 'core', 'platform', 'profiler',
          'perf_vis', 'perf_to_tracing.py')
      assert not os.path.exists(perf_script_path)
      return

    try:
      with open(result) as f:
        json.loads(f.read())
    finally:
      os.remove(result)