Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Unified Diff: tracing/third_party/tvcm/tvcm/project.py

Issue 1376953005: Move tracing/third_party/tvcm -> third_party/py_vulcanize. (Closed) Base URL: git@github.com:catapult-project/catapult.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tracing/third_party/tvcm/tvcm/project.py
diff --git a/tracing/third_party/tvcm/tvcm/project.py b/tracing/third_party/tvcm/tvcm/project.py
deleted file mode 100644
index f7f99e2426f69e011410ba219d921bdc3de5acd7..0000000000000000000000000000000000000000
--- a/tracing/third_party/tvcm/tvcm/project.py
+++ /dev/null
@@ -1,235 +0,0 @@
-# Copyright 2013 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 collections
-import os
-import cStringIO
-
-from tvcm import resource_loader
-
-
-def _FindAllFilesRecursive(source_paths):
- all_filenames = set()
- for source_path in source_paths:
- for dirpath, _, 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
-
-
-
-class AbsFilenameList(object):
-
- def __init__(self, willDirtyCallback):
- self._willDirtyCallback = willDirtyCallback
- self._filenames = []
- self._filenames_set = set()
-
- def _WillBecomeDirty(self):
- if self._willDirtyCallback:
- self._willDirtyCallback()
-
- def append(self, filename):
- assert os.path.isabs(filename)
- self._WillBecomeDirty()
- self._filenames.append(filename)
- self._filenames_set.add(filename)
-
- def extend(self, iterable):
- self._WillBecomeDirty()
- for filename in iterable:
- assert os.path.isabs(filename)
- self._filenames.append(filename)
- self._filenames_set.add(filename)
-
- def appendRel(self, basedir, filename):
- assert os.path.isabs(basedir)
- self._WillBecomeDirty()
- n = os.path.abspath(os.path.join(basedir, filename))
- self._filenames.append(n)
- self._filenames_set.add(n)
-
- def extendRel(self, basedir, iterable):
- self._WillBecomeDirty()
- assert os.path.isabs(basedir)
- for filename in iterable:
- n = os.path.abspath(os.path.join(basedir, filename))
- self._filenames.append(n)
- self._filenames_set.add(n)
-
- def __contains__(self, x):
- return x in self._filenames_set
-
- def __len__(self):
- return self._filenames.__len__()
-
- def __iter__(self):
- return iter(self._filenames)
-
- def __repr__(self):
- return repr(self._filenames)
-
- def __str__(self):
- return str(self._filenames)
-
-
-class Project(object):
-
- tvcm_path = os.path.abspath(os.path.join(
- os.path.dirname(__file__), '..'))
-
- def __init__(self, source_paths=None):
- """
- source_paths: A list of top-level directories in which modules and raw
- scripts can be found. Module paths are relative to these directories.
- """
- self._loader = None
- self._frozen = False
- self.source_paths = AbsFilenameList(self._WillPartOfPathChange)
-
- if source_paths is not None:
- self.source_paths.extend(source_paths)
-
- def Freeze(self):
- self._frozen = True
-
- def _WillPartOfPathChange(self):
- if self._frozen:
- raise Exception('The project is frozen. You cannot edit it now')
- self._loader = None
-
- @staticmethod
- def FromDict(d):
- return Project(d['source_paths'])
-
- def AsDict(self):
- return {
- 'source_paths': list(self.source_paths)
- }
-
- def __repr__(self):
- return "Project(%s)" % repr(self.source_paths)
-
- def AddSourcePath(self, path):
- self.source_paths.append(path)
-
- @property
- def loader(self):
- if self._loader is None:
- self._loader = resource_loader.ResourceLoader(self)
- return self._loader
-
- def ResetLoader(self):
- self._loader = None
-
- def _Load(self, filenames):
- return [self.loader.LoadModule(module_filename=filename) for
- filename in filenames]
-
- def LoadModule(self, module_name=None, module_filename=None):
- return self.loader.LoadModule(module_name=module_name,
- module_filename=module_filename)
-
- def CalcLoadSequenceForModuleNames(self, module_names):
- modules = [self.loader.LoadModule(module_name=name) for
- name in module_names]
- return self.CalcLoadSequenceForModules(modules)
-
- def CalcLoadSequenceForModules(self, modules):
- already_loaded_set = set()
- load_sequence = []
- for m in modules:
- m.ComputeLoadSequenceRecursive(load_sequence, already_loaded_set)
- return load_sequence
-
- def GetDepsGraphFromModuleNames(self, module_names):
- modules = [self.loader.LoadModule(module_name=name) for
- name in module_names]
- return self.GetDepsGraphFromModules(modules)
-
- def GetDepsGraphFromModules(self, modules):
- load_sequence = self.CalcLoadSequenceForModules(modules)
- g = _Graph()
- for m in load_sequence:
- g.AddModule(m)
-
- for dep in m.dependent_modules:
- g.AddEdge(m, dep.id)
-
- # FIXME: _GetGraph is not defined. Maybe `return g` is intended?
- return _GetGraph(load_sequence)
-
- def GetDominatorGraphForModulesNamed(self, module_names, load_sequence):
- modules = [self.loader.LoadModule(module_name=name)
- for name in module_names]
- return self.GetDominatorGraphForModules(modules, load_sequence)
-
- def GetDominatorGraphForModules(self, start_modules, load_sequence):
- modules_by_id = {}
- for m in load_sequence:
- modules_by_id[m.id] = m
-
- # Module referrers goes module
- module_referrers = collections.defaultdict(list)
- for m in load_sequence:
- for dep in m.dependent_modules:
- module_referrers[dep].append(m)
-
- # Now start at the top module and reverse.
- visited = set()
- g = _Graph()
-
- pending = collections.deque()
- pending.extend(start_modules)
- while len(pending):
- cur = pending.pop()
-
- g.AddModule(cur)
- visited.add(cur)
-
- for out_dep in module_referrers[cur]:
- if out_dep in visited:
- continue
- g.AddEdge(out_dep, cur)
- visited.add(out_dep)
- pending.append(out_dep)
-
- # Visited -> Dot
- return g.GetDot()
-
-
-class _Graph(object):
-
- def __init__(self):
- self.nodes = []
- self.edges = []
-
- def AddModule(self, m):
- f = cStringIO.StringIO()
- m.AppendJSContentsToFile(f, False, None)
-
- attrs = {
- "label": "%s (%i)" % (m.name, f.tell())
- }
-
- f.close()
-
- attr_items = ['%s="%s"' % (x, y) for x, y in attrs.iteritems()]
- node = "M%i [%s];" % (m.id, ','.join(attr_items))
- self.nodes.append(node)
-
- def AddEdge(self, mFrom, mTo):
- edge = "M%i -> M%i;" % (mFrom.id, mTo.id)
- self.edges.append(edge)
-
- def GetDot(self):
- return """digraph deps {
-%s
-
-%s
-}
-""" % ('\n'.join(self.nodes), '\n'.join(self.edges))

Powered by Google App Engine
This is Rietveld 408576698