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

Unified Diff: tools/perf/measurements/loading_measurement_analyzer.py

Issue 19925002: Update loading_measurement_analyzer to display CPU vs Network breakdowns. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/measurements/loading_measurement_analyzer.py
diff --git a/tools/perf/measurements/loading_measurement_analyzer.py b/tools/perf/measurements/loading_measurement_analyzer.py
index a5abe11ac685340ccca200c0a57dfb381d34a46b..395b61d2558dfdc819dface785fe73b4c13164ac 100755
--- a/tools/perf/measurements/loading_measurement_analyzer.py
+++ b/tools/perf/measurements/loading_measurement_analyzer.py
@@ -29,6 +29,9 @@ class LoadingMeasurementAnalyzer(object):
self.totals = collections.defaultdict(list)
self.maxes = collections.defaultdict(list)
self.avgs = collections.defaultdict(list)
+ self.load_times = []
+ self.cpu_times = []
+ self.network_percents = []
self.num_rows_parsed = 0
self.num_slowest_urls = options.num_slowest_urls
if options.rank_csv_file:
@@ -42,17 +45,30 @@ class LoadingMeasurementAnalyzer(object):
if (options.rank_limit and
self._GetRank(row['url']) > options.rank_limit):
continue
+ cpu_time = 0
+ load_time = float(row['load_time (ms)'])
+ if load_time < 0:
+ print 'Skipping %s due to negative load time' % row['url']
+ continue
for key, value in row.iteritems():
- if key in ('url', 'dom_content_loaded_time (ms)', 'load_time (ms)'):
+ if key in ('url', 'load_time (ms)', 'dom_content_loaded_time (ms)'):
continue
if not value or value == '-':
continue
+ value = float(value)
if '_avg' in key:
- self.avgs[key].append((float(value), row['url']))
+ self.avgs[key].append((value, row['url']))
elif '_max' in key:
- self.maxes[key].append((float(value), row['url']))
+ self.maxes[key].append((value, row['url']))
else:
- self.totals[key].append((float(value), row['url']))
+ self.totals[key].append((value, row['url']))
nduca 2013/07/22 23:37:00 so you define network time as the unaccounted-for
+ cpu_time += value
+ self.load_times.append((load_time, row['url']))
+ self.cpu_times.append((cpu_time, row['url']))
+ if options.show_network:
+ network_time = load_time - cpu_time
+ self.totals['Network (ms)'].append((network_time, row['url']))
+ self.network_percents.append((network_time / load_time, row['url']))
self.num_rows_parsed += 1
if options.max_rows and self.num_rows_parsed == int(options.max_rows):
break
@@ -73,17 +89,23 @@ class LoadingMeasurementAnalyzer(object):
sum_totals = {}
for key, values in self.totals.iteritems():
sum_totals[key] = sum([v[0] for v in values])
- total_time = sum(sum_totals.values())
+ total_cpu_time = sum([v[0] for v in self.cpu_times])
+ total_page_load_time = sum([v[0] for v in self.load_times])
print
print 'Total URLs: ', self.num_rows_parsed
- print 'Total time: %ds' % int(round(total_time / 1000))
+ print 'Total CPU time: %ds' % int(round(total_cpu_time / 1000))
+ print 'Total page load time: %ds' % int(round(total_page_load_time / 1000))
+ print 'Average CPU time: %dms' % int(round(
+ total_cpu_time / self.num_rows_parsed))
+ print 'Average page load time: %dms' % int(round(
+ total_page_load_time / self.num_rows_parsed))
print
for key, value in sorted(sum_totals.iteritems(), reverse=True,
key=lambda i: i[1]):
output_key = '%30s: ' % key.replace(' (ms)', '')
output_value = '%10ds ' % (value / 1000)
- output_percent = '%.1f%%' % (100 * value / total_time)
+ output_percent = '%.1f%%' % (100 * value / total_page_load_time)
print output_key, output_value, output_percent
if not self.num_slowest_urls:
@@ -98,6 +120,15 @@ class LoadingMeasurementAnalyzer(object):
for value, url in slowest:
print '\t', '%dms\t' % value, url, '(#%s)' % self._GetRank(url)
+ if self.network_percents:
+ print
+ print 'Top %d highest network to CPU time ratios:' % self.num_slowest_urls
+ for percent, url in sorted(
+ self.network_percents, reverse=True)[:self.num_slowest_urls]:
+ percent *= 100
+ print '\t', '%.1f%%' % percent, url, '(#%s)' % self._GetRank(url)
+
+
def main(argv):
prog_desc = 'Parses CSV output from the loading_measurement'
parser = optparse.OptionParser(usage=('%prog [options]' + '\n\n' + prog_desc))
@@ -109,6 +140,8 @@ def main(argv):
parser.add_option('--rank-csv-file', help='A CSV file of <rank,url>')
parser.add_option('--rank-limit', type='int',
help='Only process pages higher than this rank')
+ parser.add_option('--show-network', action='store_true',
+ help='Whether to display Network as a category')
options, args = parser.parse_args(argv[1:])
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698