blob: b479adc24cb215d9f6a1f3b00720091e7fc224a9 [file] [log] [blame]
# Copyright (c) 2015 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
from perf_insights import corpus_driver
from perf_insights import local_file_trace_handle
from perf_insights.value import run_info as run_info_module
def _GetFilesIn(basedir):
data_files = []
for dirpath, dirnames, filenames in os.walk(basedir, followlinks=True):
new_dirnames = [d for d in dirnames if not d.startswith('.')]
del dirnames[:]
dirnames += new_dirnames
for f in filenames:
if f.startswith('.'):
continue
if f == 'README.md':
continue
full_f = os.path.join(dirpath, f)
rel_f = os.path.relpath(full_f, basedir)
data_files.append(rel_f)
data_files.sort()
return data_files
def _GetTagsForRelPath(relpath):
# Tags.
sub_dir = os.path.dirname(relpath)
if len(sub_dir) == 0:
return []
parts = sub_dir.split(os.sep)
return [p for p in parts if len(p) > 0]
def _GetMetadataForFilename(base_directory, filename):
relpath = os.path.relpath(filename, base_directory)
tags = _GetTagsForRelPath(relpath)
metadata = {'tags': tags}
# TODO(nduca): Add modification time to metadata.
return metadata
class LocalDirectoryCorpusDriver(corpus_driver.CorpusDriver):
def __init__(self, directory):
self.directory = directory
def GetTraceHandlesMatchingQuery(self, query):
trace_handles = []
files = _GetFilesIn(self.directory)
for rel_filename in files:
filename = os.path.join(self.directory, rel_filename)
metadata = _GetMetadataForFilename(self.directory, filename)
if not query.Eval(metadata):
continue
run_info = run_info_module.RunInfo(
url="file://%s" % filename,
display_name=rel_filename,
metadata=metadata)
th = local_file_trace_handle.LocalFileTraceHandle(run_info, filename)
trace_handles.append(th)
return trace_handles