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

Side by Side Diff: perf_insights/perf_insights/mappers/scheduling/map_rendering_cost.html

Issue 2162963002: [polymer] Merge of master into polymer10-migration (Closed) Base URL: git@github.com:catapult-project/catapult.git@polymer10-migration
Patch Set: Merge polymer10-migration int polymer10-merge Created 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <!--
3 Copyright 2015 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/perf_insights/mre/function_handle.html">
9 <link rel="import" href="/tracing/model/helpers/chrome_browser_helper.html">
10 <link rel="import" href="/tracing/model/helpers/chrome_model_helper.html">
11
12 <script>
13 'use strict';
14
15 tr.exportTo('pie', function() {
16 function eventCost(event) {
17 if (event.cpuDuration !== undefined)
18 return event.cpuDuration;
19 return event.duration;
20 }
21
22 // Computes the thread time spent in BeginMainFrame during the loading phase
23 // as a ratio of the overall main thread utilization during that time.
24 // See https://goo.gl/l7V5xg.
25 function mapRenderingCost(result, model) {
26 var modelHelper = model.getOrCreateHelper(
27 tr.model.helpers.ChromeModelHelper);
28 var browserHelper = modelHelper.browserHelper;
29 var rendererHelpers = modelHelper.rendererHelpers;
30
31 if (!browserHelper || !rendererHelpers) {
32 // If we couldn't find both a browser and a renderer process, bail out.
33 result.addPair('renderingCost', null);
34 return;
35 }
36
37 var loadingEvents = browserHelper.getLoadingEventsInRange(model.bounds);
38 var loadingDurations = new Array(loadingEvents.length);
39 var loadingTotalCost = new Array(loadingEvents.length);
40 var loadingBeginMainFrameCost = new Array(loadingEvents.length);
41 var loadingBeginMainFrameRelativeCost = new Array(loadingEvents.length);
42 var beginMainFrameCount = 0;
43 loadingEvents.forEach(function(loadingEvent, index) {
44 loadingDurations[index] = loadingEvent.duration;
45
46 var totalCost = 0;
47 var beginMainFrameCost = 0;
48 for (var pid in rendererHelpers) {
49 var rendererHelper = rendererHelpers[pid];
50 var mainThread = rendererHelper.mainThread;
51 mainThread.iterateAllEvents(function(event) {
52 // Look for tasks executed by the scheduler. Note that this only
53 // includes slices that are *completely* inside the loading phase.
54 if (event.title !== 'TaskQueueManager::RunTask' ||
55 event.start < loadingEvent.start ||
56 event.start + event.duration >
57 loadingEvent.start + loadingEvent.duration) {
58 return;
59 }
60 totalCost += eventCost(event);
61
62 var beginMainFrame =
63 event.findDescendentSlice('ThreadProxy::BeginMainFrame');
64 if (beginMainFrame) {
65 beginMainFrameCount++;
66 beginMainFrameCost += eventCost(beginMainFrame);
67 }
68 });
69 }
70
71 loadingTotalCost[index] = totalCost;
72 loadingBeginMainFrameCost[index] = beginMainFrameCost;
73 loadingBeginMainFrameRelativeCost[index] = beginMainFrameCost / totalCost;
74 });
75
76 if (loadingDurations.length === 0) {
77 result.addValue('renderingCost', null);
78 return;
79 }
80
81 result.addPair('renderingCost', {
82 loadingDuration: loadingDurations,
83 loadingTotalCost: loadingTotalCost,
84 loadingBeginMainFrameCost: loadingBeginMainFrameCost,
85 loadingBeginMainFrameRelativeCost: loadingBeginMainFrameRelativeCost,
86 beginMainFramesPerLoad: beginMainFrameCount / loadingDurations.length
87 });
88 }
89
90 pi.FunctionRegistry.register(mapRenderingCost);
91
92 return {
93 mapRenderingCostForTest: mapRenderingCost
94 };
95 });
96 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698