| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright (c) 2013 The Chromium Authors. All rights reserved. | 3 Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
| 5 found in the LICENSE file. | 5 found in the LICENSE file. |
| 6 --> | 6 --> |
| 7 | 7 |
| 8 <link rel="import" href="/tracing/extras/chrome/cc/constants.html"> | 8 <link rel="import" href="/tracing/extras/chrome/cc/constants.html"> |
| 9 <link rel="import" href="/tracing/extras/chrome/cc/layer_impl.html"> | 9 <link rel="import" href="/tracing/extras/chrome/cc/layer_impl.html"> |
| 10 <link rel="import" href="/tracing/model/helpers/chrome_model_helper.html"> | 10 <link rel="import" href="/tracing/model/helpers/chrome_model_helper.html"> |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 this.layerTreeHostImpl = undefined; | 32 this.layerTreeHostImpl = undefined; |
| 33 this.whichTree = undefined; | 33 this.whichTree = undefined; |
| 34 this.sourceFrameNumber = undefined; | 34 this.sourceFrameNumber = undefined; |
| 35 }, | 35 }, |
| 36 | 36 |
| 37 initialize: function() { | 37 initialize: function() { |
| 38 tr.e.cc.moveRequiredFieldsFromArgsToToplevel( | 38 tr.e.cc.moveRequiredFieldsFromArgsToToplevel( |
| 39 this, ['renderSurfaceLayerList']); | 39 this, ['renderSurfaceLayerList']); |
| 40 tr.e.cc.moveOptionalFieldsFromArgsToToplevel( | 40 tr.e.cc.moveOptionalFieldsFromArgsToToplevel( |
| 41 this, ['rootLayer', 'layers']); | 41 this, ['rootLayer', 'layers']); |
| 42 if (this.args.sourceFrameNumber) | 42 if (this.args.sourceFrameNumber) { |
| 43 this.sourceFrameNumber = this.args.sourceFrameNumber; | 43 this.sourceFrameNumber = this.args.sourceFrameNumber; |
| 44 } |
| 44 | 45 |
| 45 // Slimming Paint v2 removes the tree hierarchy and replace | 46 // Slimming Paint v2 removes the tree hierarchy and replace |
| 46 // it with a layer list. The tracing data should have either | 47 // it with a layer list. The tracing data should have either |
| 47 // rootLayer or layers available. | 48 // rootLayer or layers available. |
| 48 if (this.rootLayer) { | 49 if (this.rootLayer) { |
| 49 // The version before SPv2 | 50 // The version before SPv2 |
| 50 this.rootLayer.layerTreeImpl = this; | 51 this.rootLayer.layerTreeImpl = this; |
| 51 } else { | 52 } else { |
| 52 // The SPv2 version, where the layer list contains all | 53 // The SPv2 version, where the layer list contains all |
| 53 // non-mask, non-replica layers. | 54 // non-mask, non-replica layers. |
| 54 for (var i = 0; i < this.layers.length; i++) { | 55 for (var i = 0; i < this.layers.length; i++) { |
| 55 this.layers[i].layerTreeImpl = this; | 56 this.layers[i].layerTreeImpl = this; |
| 56 } | 57 } |
| 57 } | 58 } |
| 58 | 59 |
| 59 if (this.args.swapPromiseTraceIds && | 60 if (this.args.swapPromiseTraceIds && |
| 60 this.args.swapPromiseTraceIds.length) { | 61 this.args.swapPromiseTraceIds.length) { |
| 61 this.tracedInputLatencies = []; | 62 this.tracedInputLatencies = []; |
| 62 | 63 |
| 63 var ownProcess = this.objectInstance.parent; | 64 var ownProcess = this.objectInstance.parent; |
| 64 var modelHelper = ownProcess.model.getOrCreateHelper( | 65 var modelHelper = ownProcess.model.getOrCreateHelper( |
| 65 tr.model.helpers.ChromeModelHelper); | 66 tr.model.helpers.ChromeModelHelper); |
| 66 if (modelHelper) | 67 if (modelHelper) { |
| 67 this._initializeTracedInputLatencies(modelHelper); | 68 this._initializeTracedInputLatencies(modelHelper); |
| 69 } |
| 68 } | 70 } |
| 69 }, | 71 }, |
| 70 | 72 |
| 71 _initializeTracedInputLatencies: function(modelHelper) { | 73 _initializeTracedInputLatencies: function(modelHelper) { |
| 72 var latencyEvents = modelHelper.browserHelper.getLatencyEventsInRange( | 74 var latencyEvents = modelHelper.browserHelper.getLatencyEventsInRange( |
| 73 modelHelper.model.bounds); | 75 modelHelper.model.bounds); |
| 74 | 76 |
| 75 // Convert all ids to InputLatency Async objects. | 77 // Convert all ids to InputLatency Async objects. |
| 76 latencyEvents.forEach(function(event) { | 78 latencyEvents.forEach(function(event) { |
| 77 for (var i = 0; i < this.args.swapPromiseTraceIds.length; i++) { | 79 for (var i = 0; i < this.args.swapPromiseTraceIds.length; i++) { |
| 78 if (!event.args.data || !event.args.data.trace_id) | 80 if (!event.args.data || !event.args.data.trace_id) { |
| 79 continue; | 81 continue; |
| 82 } |
| 80 if (parseInt(event.args.data.trace_id) === | 83 if (parseInt(event.args.data.trace_id) === |
| 81 this.args.swapPromiseTraceIds[i]) | 84 this.args.swapPromiseTraceIds[i]) { |
| 82 this.tracedInputLatencies.push(event); | 85 this.tracedInputLatencies.push(event); |
| 86 } |
| 83 } | 87 } |
| 84 }, this); | 88 }, this); |
| 85 }, | 89 }, |
| 86 | 90 |
| 87 get hasSourceFrameBeenDrawnBefore() { | 91 get hasSourceFrameBeenDrawnBefore() { |
| 88 if (this.whichTree === tr.e.cc.constants.PENDING_TREE) | 92 if (this.whichTree === tr.e.cc.constants.PENDING_TREE) { |
| 89 return false; | 93 return false; |
| 94 } |
| 90 | 95 |
| 91 // Old chrome's don't produce sourceFrameNumber. | 96 // Old chrome's don't produce sourceFrameNumber. |
| 92 if (this.sourceFrameNumber === undefined) | 97 if (this.sourceFrameNumber === undefined) return; |
| 93 return; | |
| 94 | 98 |
| 95 var thisLTHI = this.layerTreeHostImpl; | 99 var thisLTHI = this.layerTreeHostImpl; |
| 96 var thisLTHIIndex = thisLTHI.objectInstance.snapshots.indexOf( | 100 var thisLTHIIndex = thisLTHI.objectInstance.snapshots.indexOf( |
| 97 thisLTHI); | 101 thisLTHI); |
| 98 var prevLTHIIndex = thisLTHIIndex - 1; | 102 var prevLTHIIndex = thisLTHIIndex - 1; |
| 99 if (prevLTHIIndex < 0 || | 103 if (prevLTHIIndex < 0 || |
| 100 prevLTHIIndex >= thisLTHI.objectInstance.snapshots.length) | 104 prevLTHIIndex >= thisLTHI.objectInstance.snapshots.length) { |
| 101 return false; | 105 return false; |
| 106 } |
| 102 var prevLTHI = thisLTHI.objectInstance.snapshots[prevLTHIIndex]; | 107 var prevLTHI = thisLTHI.objectInstance.snapshots[prevLTHIIndex]; |
| 103 if (!prevLTHI.activeTree) | 108 if (!prevLTHI.activeTree) return false; |
| 104 return false; | |
| 105 | 109 |
| 106 // Old chrome's don't produce sourceFrameNumber. | 110 // Old chrome's don't produce sourceFrameNumber. |
| 107 if (prevLTHI.activeTree.sourceFrameNumber === undefined) | 111 if (prevLTHI.activeTree.sourceFrameNumber === undefined) return; |
| 108 return; | |
| 109 return prevLTHI.activeTree.sourceFrameNumber === this.sourceFrameNumber; | 112 return prevLTHI.activeTree.sourceFrameNumber === this.sourceFrameNumber; |
| 110 }, | 113 }, |
| 111 | 114 |
| 112 get otherTree() { | 115 get otherTree() { |
| 113 var other = this.whichTree === constants.ACTIVE_TREE ? | 116 var other = this.whichTree === constants.ACTIVE_TREE ? |
| 114 constants.PENDING_TREE : constants.ACTIVE_TREE; | 117 constants.PENDING_TREE : constants.ACTIVE_TREE; |
| 115 return this.layerTreeHostImpl.getTree(other); | 118 return this.layerTreeHostImpl.getTree(other); |
| 116 }, | 119 }, |
| 117 | 120 |
| 118 get gpuMemoryUsageInBytes() { | 121 get gpuMemoryUsageInBytes() { |
| 119 var totalBytes = 0; | 122 var totalBytes = 0; |
| 120 this.iterLayers(function(layer) { | 123 this.iterLayers(function(layer) { |
| 121 if (layer.gpuMemoryUsageInBytes !== undefined) | 124 if (layer.gpuMemoryUsageInBytes !== undefined) { |
| 122 totalBytes += layer.gpuMemoryUsageInBytes; | 125 totalBytes += layer.gpuMemoryUsageInBytes; |
| 126 } |
| 123 }); | 127 }); |
| 124 return totalBytes; | 128 return totalBytes; |
| 125 }, | 129 }, |
| 126 | 130 |
| 127 iterLayers: function(func, thisArg) { | 131 iterLayers: function(func, thisArg) { |
| 128 var visitedLayers = {}; | 132 var visitedLayers = {}; |
| 129 function visitLayer(layer, depth, isMask, isReplica) { | 133 function visitLayer(layer, depth, isMask, isReplica) { |
| 130 if (visitedLayers[layer.layerId]) | 134 if (visitedLayers[layer.layerId]) return; |
| 131 return; | 135 |
| 132 visitedLayers[layer.layerId] = true; | 136 visitedLayers[layer.layerId] = true; |
| 133 func.call(thisArg, layer, depth, isMask, isReplica); | 137 func.call(thisArg, layer, depth, isMask, isReplica); |
| 134 if (layer.children) { | 138 if (layer.children) { |
| 135 for (var i = 0; i < layer.children.length; i++) | 139 for (var i = 0; i < layer.children.length; i++) { |
| 136 visitLayer(layer.children[i], depth + 1); | 140 visitLayer(layer.children[i], depth + 1); |
| 141 } |
| 137 } | 142 } |
| 138 if (layer.maskLayer) | 143 if (layer.maskLayer) { |
| 139 visitLayer(layer.maskLayer, depth + 1, true, false); | 144 visitLayer(layer.maskLayer, depth + 1, true, false); |
| 140 if (layer.replicaLayer) | 145 } |
| 146 if (layer.replicaLayer) { |
| 141 visitLayer(layer.replicaLayer, depth + 1, false, true); | 147 visitLayer(layer.replicaLayer, depth + 1, false, true); |
| 148 } |
| 142 } | 149 } |
| 143 if (this.rootLayer) { | 150 if (this.rootLayer) { |
| 144 visitLayer(this.rootLayer, 0, false, false); | 151 visitLayer(this.rootLayer, 0, false, false); |
| 145 } else { | 152 } else { |
| 146 for (var i = 0; i < this.layers.length; i++) | 153 for (var i = 0; i < this.layers.length; i++) { |
| 147 visitLayer(this.layers[i], 0, false, false); | 154 visitLayer(this.layers[i], 0, false, false); |
| 155 } |
| 148 } | 156 } |
| 149 }, | 157 }, |
| 150 findLayerWithId: function(id) { | 158 findLayerWithId: function(id) { |
| 151 var foundLayer = undefined; | 159 var foundLayer = undefined; |
| 152 function visitLayer(layer) { | 160 function visitLayer(layer) { |
| 153 if (layer.layerId === id) | 161 if (layer.layerId === id) { |
| 154 foundLayer = layer; | 162 foundLayer = layer; |
| 163 } |
| 155 } | 164 } |
| 156 this.iterLayers(visitLayer); | 165 this.iterLayers(visitLayer); |
| 157 return foundLayer; | 166 return foundLayer; |
| 158 } | 167 } |
| 159 }; | 168 }; |
| 160 | 169 |
| 161 ObjectSnapshot.subTypes.register( | 170 ObjectSnapshot.subTypes.register( |
| 162 LayerTreeImplSnapshot, | 171 LayerTreeImplSnapshot, |
| 163 {typeName: 'cc::LayerTreeImpl'}); | 172 {typeName: 'cc::LayerTreeImpl'}); |
| 164 | 173 |
| 165 return { | 174 return { |
| 166 LayerTreeImplSnapshot, | 175 LayerTreeImplSnapshot, |
| 167 }; | 176 }; |
| 168 }); | 177 }); |
| 169 </script> | 178 </script> |
| OLD | NEW |