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

Unified Diff: tools/android/loading/loading_model.py

Issue 1619713002: Upgrade analyze.py and related scripts to new world order. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 11 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
« no previous file with comments | « tools/android/loading/devtools_monitor.py ('k') | tools/android/loading/loading_model_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/android/loading/loading_model.py
diff --git a/tools/android/loading/loading_model.py b/tools/android/loading/loading_model.py
index 7ba75fc79b4bfa41a8e738d23bd71fa99d3484d0..91aedcda55bc9e42ae83e408c34afa5e8b3beec9 100644
--- a/tools/android/loading/loading_model.py
+++ b/tools/android/loading/loading_model.py
@@ -21,6 +21,7 @@ import urlparse
import sys
import dag
+import loading_trace
import request_dependencies_lens
class ResourceGraph(object):
@@ -30,11 +31,13 @@ class ResourceGraph(object):
cache_all: if true, assume zero loading time for all resources.
"""
def __init__(self, trace):
- """Create from a LoadingTrace.
+ """Create from a LoadingTrace (or json of a trace).
Args:
- trace: (LoadingTrace) Loading trace.
+ trace: (LoadingTrace/JSON) Loading trace or JSON of a trace.
"""
+ if type(trace) == dict:
+ trace = loading_trace.LoadingTrace.FromJsonDict(trace)
self._BuildDag(trace)
self._global_start = min([n.StartTime() for n in self._node_info])
# Sort before splitting children so that we can correctly dectect if a
@@ -290,9 +293,27 @@ class ResourceGraph(object):
## Internal items
##
- _CONTENT_TYPE_TO_COLOR = {'html': 'red', 'css': 'green', 'script': 'blue',
- 'json': 'purple', 'gif_image': 'grey',
- 'image': 'orange', 'other': 'white'}
+ _CONTENT_KIND_TO_COLOR = {
+ 'application': 'blue', # Scripts.
+ 'font': 'grey70',
+ 'image': 'orange', # This probably catches gifs?
+ 'video': 'hotpink1',
+ }
+
+ _CONTENT_TYPE_TO_COLOR = {
+ 'html': 'red',
+ 'css': 'green',
+ 'script': 'blue',
+ 'javascript': 'blue',
+ 'json': 'purple',
+ 'gif': 'grey',
+ 'image': 'orange',
+ 'jpeg': 'orange',
+ 'png': 'orange',
+ 'plain': 'brown3',
+ 'octet-stream': 'brown3',
+ 'other': 'white',
+ }
# This resource type may induce a timing dependency. See _SplitChildrenByTime
# for details.
@@ -323,8 +344,9 @@ class ResourceGraph(object):
self._edge_annotations = {}
# All fields in timing are millis relative to request_time, which is epoch
# seconds.
- self._node_cost = max([t for f, t in request.timing._asdict().iteritems()
- if f != 'request_time'])
+ self._node_cost = max(
+ [0] + [t for f, t in request.timing._asdict().iteritems()
+ if f != 'request_time'])
def __str__(self):
return self.ShortName()
@@ -363,19 +385,20 @@ class ResourceGraph(object):
"""
parsed = urlparse.urlparse(self._request.url)
path = parsed.path
+ hostname = parsed.hostname if parsed.hostname else '?.?.?'
if path != '' and path != '/':
last_path = parsed.path.split('/')[-1]
if len(last_path) < 10:
if len(path) < 10:
- return parsed.hostname + '/' + path
+ return hostname + '/' + path
else:
- return parsed.hostname + '/..' + parsed.path[-10:]
+ return hostname + '/..' + parsed.path[-10:]
elif len(last_path) > 10:
- return parsed.hostname + '/..' + last_path[:5]
+ return hostname + '/..' + last_path[:5]
else:
- return parsed.hostname + '/..' + last_path
+ return hostname + '/..' + last_path
else:
- return parsed.hostname
+ return hostname
def Url(self):
return self._request.url
@@ -463,7 +486,7 @@ class ResourceGraph(object):
dependencies = request_dependencies_lens.RequestDependencyLens(
trace).GetRequestDependencies()
- for child_rq, parent_rq, reason in dependencies:
+ for parent_rq, child_rq, reason in dependencies:
parent = self._node_info[index_by_request[parent_rq]]
child = self._node_info[index_by_request[child_rq]]
edge_cost = child.StartTime() - parent.EndTime()
@@ -549,6 +572,17 @@ class ResourceGraph(object):
current.ReparentTo(parent, children_by_end_time[end_mark])
children_by_end_time[end_mark].AddEdgeAnnotation(current, 'timing')
+ def _ContentTypeToColor(self, content_type):
+ if not content_type:
+ type_str = 'other'
+ elif '/' in content_type:
+ kind, type_str = content_type.split('/')
+ if kind in self._CONTENT_KIND_TO_COLOR:
+ return self._CONTENT_KIND_TO_COLOR[kind]
+ else:
+ type_str = content_type
+ return self._CONTENT_TYPE_TO_COLOR[type_str]
+
def _GraphvizNode(self, index, highlight):
"""Returns a graphviz node description for a given node.
@@ -563,7 +597,7 @@ class ResourceGraph(object):
is oval if its max-age is less than 300s (or if it's not cacheable).
"""
node_info = self._node_info[index]
- color = self._CONTENT_TYPE_TO_COLOR[node_info.ContentType()]
+ color = self._ContentTypeToColor(node_info.ContentType())
max_age = node_info.Request().MaxAge()
shape = 'polygon' if max_age > 300 else 'oval'
styles = ['filled']
« no previous file with comments | « tools/android/loading/devtools_monitor.py ('k') | tools/android/loading/loading_model_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698