blob: c9e9176b2181037fe4072f4fbcfb386a3e301f0f [file] [log] [blame]
# Copyright (c) 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 sys
import os
import re
from tvcm import project as project_module
def _FindAllFilesRecursive(source_paths):
all_filenames = set()
for source_path in source_paths:
for dirpath, dirnames, filenames in os.walk(source_path):
for f in filenames:
if f.startswith('.'):
continue
x = os.path.abspath(os.path.join(dirpath, f))
all_filenames.add(x)
return all_filenames
def _IsFilenameATest(loader, x):
if x.endswith('_test.js'):
return True
if x.endswith('_test.html'):
return True
if x.endswith('_unittest.js'):
return True
if x.endswith('_unittest.html'):
return True
# TODO(nduca): Add content test?
return False
class TraceViewerProject(project_module.Project):
trace_viewer_path = os.path.abspath(os.path.join(
os.path.dirname(__file__), '..'))
src_path = os.path.abspath(os.path.join(
trace_viewer_path, 'trace_viewer'))
extras_path = os.path.join(src_path, 'extras')
trace_viewer_third_party_path = os.path.abspath(os.path.join(
trace_viewer_path, 'third_party'))
jszip_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'jszip'))
glmatrix_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'gl-matrix', 'dist'))
d3_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'd3'))
chai_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'chai'))
mocha_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'mocha'))
test_data_path = os.path.join(trace_viewer_path, 'test_data')
skp_data_path = os.path.join(trace_viewer_path, 'skp_data')
rjsmin_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'tvcm', 'third_party', 'rjsmin'))
rcssmin_path = os.path.abspath(os.path.join(
trace_viewer_third_party_path, 'tvcm', 'third_party', 'rcssmin'))
def __init__(self, *args, **kwargs):
super(TraceViewerProject, self).__init__(*args, **kwargs)
self.source_paths.append(self.src_path)
self.source_paths.append(self.trace_viewer_third_party_path)
self.source_paths.append(self.jszip_path)
self.source_paths.append(self.glmatrix_path)
self.source_paths.append(self.d3_path)
self.source_paths.append(self.chai_path)
self.source_paths.append(self.mocha_path)
self.non_module_html_files.extendRel(self.trace_viewer_path, [
'bin/index.html',
'test_data/android_systrace.html',
])
for config_name in self.GetConfigNames():
self.non_module_html_files.appendRel(self.trace_viewer_path,
'bin/trace_viewer_%s.html' % config_name)
# Igore the old viewer if it still exists.
self.non_module_html_files.appendRel(self.trace_viewer_path,
'bin/trace_viewer.html')
self.non_module_html_files.extendRel(self.trace_viewer_third_party_path, [
'gl-matrix/jsdoc-template/static/header.html',
'gl-matrix/jsdoc-template/static/index.html',
])
# Ignore drive html due to embedded external script resources.
self.non_module_html_files.appendRel(self.src_path,
'extras/drive/index.html')
rjsmin_doc_files = _FindAllFilesRecursive(
[os.path.join(self.rjsmin_path, 'docs', 'apidoc')])
rjsmin_doc_files = [os.path.relpath(x, self.rjsmin_path)
for x in rjsmin_doc_files
if x.endswith('.html')]
self.non_module_html_files.extendRel(self.rjsmin_path, rjsmin_doc_files)
rcssmin_doc_files = _FindAllFilesRecursive(
[os.path.join(self.rcssmin_path, 'docs', 'apidoc')])
rcssmin_doc_files = [os.path.relpath(x, self.rcssmin_path)
for x in rcssmin_doc_files
if x.endswith('.html')]
self.non_module_html_files.extendRel(self.rcssmin_path, rcssmin_doc_files)
def FindAllTestModuleResources(self):
all_filenames = _FindAllFilesRecursive([self.src_path])
test_module_filenames = [x for x in all_filenames if
_IsFilenameATest(self.loader, x)]
test_module_filenames.sort()
# Find the equivalent resources.
return [self.loader.FindResourceGivenAbsolutePath(x)
for x in test_module_filenames]
def GetConfigNames(self):
config_files = [
os.path.join(self.extras_path, x) for x in os.listdir(self.extras_path)
if x.endswith('_config.html')
]
config_files = [x for x in config_files if os.path.isfile(x)]
config_basenames = [os.path.basename(x) for x in config_files]
config_names = [re.match('(.+)_config.html$', x).group(1)
for x in config_basenames]
return config_names
def GetDefaultConfigName(self):
assert 'full' in self.GetConfigNames()
return 'full'
def AddConfigNameOptionToParser(self, parser):
choices = self.GetConfigNames()
parser.add_option(
'--config', dest='config_name',
type='choice', choices=choices,
default=self.GetDefaultConfigName(),
help='Picks a browser config. Valid choices: %s' % ', '.join(choices))
return choices
def GetModuleNameForConfigName(self, config_name):
return 'extras.%s_config' % config_name