xref: /aosp_15_r20/external/chromium-trace/systrace.py (revision 1fa4b3da657c0e9ad43c0220bacf9731820715a5)
1*1fa4b3daSHector Dearman#!/usr/bin/env python2
2*1fa4b3daSHector Dearman
3*1fa4b3daSHector Dearman# Copyright (c) 2015 The Chromium Authors. All rights reserved.
4*1fa4b3daSHector Dearman# Use of this source code is governed by a BSD-style license that can be
5*1fa4b3daSHector Dearman# found in the LICENSE file.
6*1fa4b3daSHector Dearman
7*1fa4b3daSHector Dearmanimport os
8*1fa4b3daSHector Dearmanimport sys
9*1fa4b3daSHector Dearman
10*1fa4b3daSHector Dearmanversion = sys.version_info[:2]
11*1fa4b3daSHector Dearmanif version != (2, 7):
12*1fa4b3daSHector Dearman  sys.stderr.write('Systrace does not support Python %d.%d. '
13*1fa4b3daSHector Dearman                   'Please use Python 2.7.\n' % version)
14*1fa4b3daSHector Dearman  sys.exit(1)
15*1fa4b3daSHector Dearman
16*1fa4b3daSHector Dearmansystrace_dir = os.path.abspath(
17*1fa4b3daSHector Dearman    os.path.join(os.path.dirname(__file__), 'catapult', 'systrace'))
18*1fa4b3daSHector Dearmansys.path.insert(0, systrace_dir)
19*1fa4b3daSHector Dearman
20*1fa4b3daSHector Dearmandef RemoveAllStalePycFiles(base_dir):
21*1fa4b3daSHector Dearman  """Scan directories for old .pyc files without a .py file and delete them."""
22*1fa4b3daSHector Dearman  for dirname, _, filenames in os.walk(base_dir):
23*1fa4b3daSHector Dearman    if '.git' in dirname:
24*1fa4b3daSHector Dearman      continue
25*1fa4b3daSHector Dearman    for filename in filenames:
26*1fa4b3daSHector Dearman      root, ext = os.path.splitext(filename)
27*1fa4b3daSHector Dearman      if ext != '.pyc':
28*1fa4b3daSHector Dearman        continue
29*1fa4b3daSHector Dearman
30*1fa4b3daSHector Dearman      pyc_path = os.path.join(dirname, filename)
31*1fa4b3daSHector Dearman      py_path = os.path.join(dirname, root + '.py')
32*1fa4b3daSHector Dearman
33*1fa4b3daSHector Dearman      try:
34*1fa4b3daSHector Dearman        if not os.path.exists(py_path):
35*1fa4b3daSHector Dearman          os.remove(pyc_path)
36*1fa4b3daSHector Dearman      except OSError:
37*1fa4b3daSHector Dearman        # Wrap OS calls in try/except in case another process touched this file.
38*1fa4b3daSHector Dearman        pass
39*1fa4b3daSHector Dearman
40*1fa4b3daSHector Dearman    try:
41*1fa4b3daSHector Dearman      os.removedirs(dirname)
42*1fa4b3daSHector Dearman    except OSError:
43*1fa4b3daSHector Dearman      # Wrap OS calls in try/except in case another process touched this dir.
44*1fa4b3daSHector Dearman      pass
45*1fa4b3daSHector Dearman
46*1fa4b3daSHector Dearmanif __name__ == '__main__':
47*1fa4b3daSHector Dearman  RemoveAllStalePycFiles(os.path.dirname(__file__))
48*1fa4b3daSHector Dearman  from systrace import run_systrace
49*1fa4b3daSHector Dearman  sys.exit(run_systrace.main())
50