1f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// found in the LICENSE file. 4f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 5f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 65d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @constructor 75d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @extends {WebInspector.TimelineUIUtils} 8f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 95d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils = function() 105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebInspector.TimelineUIUtils.call(this); 125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils.prototype = { 155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {boolean} 185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) isBeginFrame: function(record) 205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return record.type() === WebInspector.TracingTimelineModel.RecordType.BeginFrame; 225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {boolean} 275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) isProgram: function(record) 295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return record.type() === WebInspector.TracingTimelineModel.RecordType.Program; 315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} recordType 355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {boolean} 365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) isCoalescable: function(recordType) 385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return !!WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[recordType]; 405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 4476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {boolean} 4576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 4676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) isEventDivider: function(record) 4776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) { 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return WebInspector.TracingTimelineUIUtils.isMarkerEvent(record.traceEvent()); 4976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) }, 5076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 5176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) /** 5276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Object} 545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) countersForRecord: function(record) 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return record.type() === WebInspector.TracingTimelineModel.RecordType.UpdateCounters ? record.data() : null; 585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Object} 635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) highlightQuadForRecord: function(record) 655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return record.traceEvent().highlightQuad || null; 675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 7176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {string} 7276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 7376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) titleForRecord: function(record) 7476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) { 75c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var event = record.traceEvent(); 76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return WebInspector.TracingTimelineUIUtils.eventTitle(event, record.timelineModel()); 77197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 78197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 79197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 80197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TimelineModel.Record} record 81197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!WebInspector.TimelineCategory} 82197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 83197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch categoryForRecord: function(record) 84197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebInspector.TracingTimelineUIUtils.eventStyle(record.traceEvent()).category; 8676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) }, 8776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 8876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) /** 8976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.Linkifier} linkifier 915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Node} 925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 93c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) buildDetailsNode: function(record, linkifier) 945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 95c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent(record.traceEvent(), linkifier); 965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel} model 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.Linkifier} linkifier 1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {function(!DocumentFragment)} callback 1035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 104c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) generateDetailsContent: function(record, model, linkifier, callback) 1055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!(model instanceof WebInspector.TracingTimelineModel)) 1075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) throw new Error("Illegal argument."); 1085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var tracingTimelineModel = /** @type {!WebInspector.TracingTimelineModel} */ (model); 109c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebInspector.TracingTimelineUIUtils.buildTraceEventDetails(record.traceEvent(), tracingTimelineModel, linkifier, callback); 1105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 1115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 11276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) /** 11376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {!Element} 11476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 11576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) createBeginFrameDivider: function() 11676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) { 11776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return this.createEventDivider(WebInspector.TracingTimelineModel.RecordType.BeginFrame); 11876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) }, 11976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 12076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) /** 12176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {string} recordType 12276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {string=} title 12376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {!Element} 12476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 12576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) createEventDivider: function(recordType, title) 12676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) { 12776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return WebInspector.TracingTimelineUIUtils._createEventDivider(recordType, title); 12876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) }, 12976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 13076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) /** 13176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!WebInspector.TimelineModel.Record} record 13276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!RegExp} regExp 13376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {boolean} 13476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 13576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) testContentMatching: function(record, regExp) 13676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) { 13776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var traceEvent = record.traceEvent(); 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var title = WebInspector.TracingTimelineUIUtils.eventStyle(traceEvent).title; 13976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var tokens = [title]; 14076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) for (var argName in traceEvent.args) { 14176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var argValue = traceEvent.args[argName]; 14276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) for (var key in argValue) 14376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) tokens.push(argValue[key]); 14476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) } 14576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return regExp.test(tokens.join("|")); 14676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) }, 14776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 148197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 149197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Object} total 150197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TimelineModel.Record} record 151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 152197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch aggregateTimeForRecord: function(total, record) 153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 154197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var traceEvent = record.traceEvent(); 155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var model = record._model; 156197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent(total, model, traceEvent); 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 158197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!WebInspector.TimelineModel.Filter} 161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 162197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch hiddenRecordsFilter: function() 163197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 164197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return new WebInspector.TimelineRecordVisibleTypeFilter(WebInspector.TracingTimelineUIUtils._visibleTypes()); 165197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 166197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 167197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 168197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {?WebInspector.TimelineModel.Filter} 169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 170197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch hiddenEmptyRecordsFilter: function() 171197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 172197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var hiddenEmptyRecords = [WebInspector.TimelineModel.RecordType.EventDispatch]; 173197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return new WebInspector.TimelineRecordHiddenEmptyTypeFilter(hiddenEmptyRecords); 174197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 175197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) __proto__: WebInspector.TimelineUIUtils.prototype 1775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 178f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 179f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 180f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @constructor 181f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} title 182f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TimelineCategory} category 183197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {boolean=} hidden 184f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 185197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TimelineRecordStyle = function(title, category, hidden) 186f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 187f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this.title = title; 188f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this.category = category; 189197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.hidden = !!hidden; 190f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 191f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 192f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 193f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {!Object.<string, !WebInspector.TimelineRecordStyle>} 194f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 195f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebInspector.TracingTimelineUIUtils._initEventStyles = function() 196f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 197f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (WebInspector.TracingTimelineUIUtils._eventStylesMap) 198f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return WebInspector.TracingTimelineUIUtils._eventStylesMap; 199f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 200f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 201f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var categories = WebInspector.TimelineUIUtils.categories(); 202f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 203f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var eventStyles = {}; 204f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.Program] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Other"), categories["other"]); 205f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.EventDispatch] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Event"), categories["scripting"]); 206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.RequestMainThreadFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Request Main Thread Frame"), categories["rendering"], true); 207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.BeginFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Frame Start"), categories["rendering"], true); 208197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.BeginMainThreadFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Frame Start (main thread)"), categories["rendering"], true); 209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.DrawFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Draw Frame"), categories["rendering"], true); 210197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.ScheduleStyleRecalculation] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Schedule Style Recalculation"), categories["rendering"], true); 211f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.RecalculateStyles] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Recalculate Style"), categories["rendering"]); 212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.InvalidateLayout] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Invalidate Layout"), categories["rendering"], true); 213f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.Layout] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Layout"), categories["rendering"]); 214f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.PaintSetup] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint Setup"), categories["painting"]); 215197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.UpdateLayer] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Update Layer"), categories["painting"], true); 2169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) eventStyles[recordTypes.UpdateLayerTree] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Update Layer Tree"), categories["rendering"]); 217f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.Paint] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint"), categories["painting"]); 218f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.RasterTask] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint"), categories["painting"]); 219f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ScrollLayer] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Scroll"), categories["rendering"]); 220f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.CompositeLayers] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Composite Layers"), categories["painting"]); 221f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ParseHTML] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Parse HTML"), categories["loading"]); 222f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.TimerInstall] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Install Timer"), categories["scripting"]); 223f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.TimerRemove] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Remove Timer"), categories["scripting"]); 224f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.TimerFire] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Timer Fired"), categories["scripting"]); 225f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.XHRReadyStateChange] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("XHR Ready State Change"), categories["scripting"]); 226f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.XHRLoad] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("XHR Load"), categories["scripting"]); 227f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.EvaluateScript] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Evaluate Script"), categories["scripting"]); 228197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.MarkLoad] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Load event"), categories["scripting"], true); 229197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.MarkDOMContent] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("DOMContentLoaded event"), categories["scripting"], true); 230197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch eventStyles[recordTypes.MarkFirstPaint] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("First paint"), categories["painting"], true); 2317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci eventStyles[recordTypes.TimeStamp] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Timestamp"), categories["scripting"]); 2327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci eventStyles[recordTypes.ConsoleTime] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Console Time"), categories["scripting"]); 233f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ResourceSendRequest] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Send Request"), categories["loading"]); 234f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ResourceReceiveResponse] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive Response"), categories["loading"]); 235f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ResourceFinish] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Finish Loading"), categories["loading"]); 236f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ResourceReceivedData] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive Data"), categories["loading"]); 237f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.FunctionCall] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Function Call"), categories["scripting"]); 238f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.GCEvent] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("GC Event"), categories["scripting"]); 239f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.JSFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("JS Frame"), categories["scripting"]); 240f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.RequestAnimationFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Request Animation Frame"), categories["scripting"]); 241f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.CancelAnimationFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Cancel Animation Frame"), categories["scripting"]); 242f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.FireAnimationFrame] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Animation Frame Fired"), categories["scripting"]); 243f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.WebSocketCreate] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Create WebSocket"), categories["scripting"]); 244f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.WebSocketSendHandshakeRequest] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Send WebSocket Handshake"), categories["scripting"]); 245f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.WebSocketReceiveHandshakeResponse] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive WebSocket Handshake"), categories["scripting"]); 246f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.WebSocketDestroy] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Destroy WebSocket"), categories["scripting"]); 247f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.EmbedderCallback] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Embedder Callback"), categories["scripting"]); 248f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.DecodeImage] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Image Decode"), categories["painting"]); 249f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStyles[recordTypes.ResizeImage] = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Image Resize"), categories["painting"]); 250f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebInspector.TracingTimelineUIUtils._eventStylesMap = eventStyles; 251f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return eventStyles; 252f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 253f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 2545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes = {}; 2555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[WebInspector.TracingTimelineModel.RecordType.Layout] = 1; 2565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[WebInspector.TracingTimelineModel.RecordType.Paint] = 1; 2579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[WebInspector.TracingTimelineModel.RecordType.RasterTask] = 1; 2585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[WebInspector.TracingTimelineModel.RecordType.DecodeImage] = 1; 2595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._coalescableRecordTypes[WebInspector.TracingTimelineModel.RecordType.ResizeImage] = 1; 2605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 261f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 262f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 263f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {!{title: string, category: !WebInspector.TimelineCategory}} 264f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 265f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebInspector.TracingTimelineUIUtils.eventStyle = function(event) 266f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 267f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var eventStyles = WebInspector.TracingTimelineUIUtils._initEventStyles(); 2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.category === WebInspector.TracingModel.ConsoleEventCategory) 2697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return { title: event.name, category: WebInspector.TimelineUIUtils.categories()["scripting"] }; 2707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var result = eventStyles[event.name]; 272f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!result) { 2737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result = new WebInspector.TimelineRecordStyle(WebInspector.UIString("Unknown: %s", event.name), WebInspector.TimelineUIUtils.categories()["other"]); 2747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci eventStyles[event.name] = result; 275f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 276f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return result; 277f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 278f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 279f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 2809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 281197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {string} 282197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 2839e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)WebInspector.TracingTimelineUIUtils.markerEventColor = function(event) 284c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 285c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var red = "rgb(255, 0, 0)"; 286c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var blue = "rgb(0, 0, 255)"; 287c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var orange = "rgb(255, 178, 23)"; 288c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var green = "rgb(0, 130, 0)"; 289c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 2909e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (event.category === WebInspector.TracingModel.ConsoleEventCategory) 2919e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return orange; 2929e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 293c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 2949e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) var eventName = event.name; 295c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) switch (eventName) { 296c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkDOMContent: return blue; 297c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkLoad: return red; 298c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkFirstPaint: return green; 299c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.TimeStamp: return orange; 300c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 301c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return green; 302c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 303c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 304c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** 305c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 306c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.TimelineModel} model 307c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {string} 308c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 309c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.TracingTimelineUIUtils.eventTitle = function(event, model) 310197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 311197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var title = WebInspector.TracingTimelineUIUtils.eventStyle(event).title; 3127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.category === WebInspector.TracingModel.ConsoleEventCategory) 3137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return title; 3147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.name === WebInspector.TracingTimelineModel.RecordType.TimeStamp) 3157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebInspector.UIString("%s: %s", title, event.args["data"]["message"]); 316c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (WebInspector.TracingTimelineUIUtils.isMarkerEvent(event)) { 317c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var startTime = Number.millisToString(event.startTime - model.minimumRecordTime()); 318197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return WebInspector.UIString("%s at %s", title, startTime); 319197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 320197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return title; 321197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 322197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 323197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 324c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 32576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {boolean} 32676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 327c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.TracingTimelineUIUtils.isMarkerEvent = function(event) 32876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 32976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 330c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) switch (event.name) { 331c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.TimeStamp: 332c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkFirstPaint: 33376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return true; 334c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkDOMContent: 335c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) case recordTypes.MarkLoad: 336e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return event.args["data"]["isMainFrame"]; 337c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) default: 338c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return false; 339c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 34076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 34176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 34276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)/** 343f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 344f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.Linkifier} linkifier 345f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {?Node} 346f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 347c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent = function(event, linkifier) 348f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 349f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var recordType = WebInspector.TracingTimelineModel.RecordType; 350c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var target = event.thread.target(); 351f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var details; 352f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var detailsText; 353e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var eventData = event.args["data"]; 354f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) switch (event.name) { 355f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.GCEvent: 356f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeAfter"]; 357f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = WebInspector.UIString("%s collected", Number.bytesToString(delta)); 358f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 359f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.TimerFire: 360f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData["timerId"]; 361f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 362f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.FunctionCall: 363f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) details = linkifyLocation(eventData["scriptId"], eventData["scriptName"], eventData["scriptLine"], 0); 364f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 365197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case recordType.JSFrame: 366197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch details = linkifyLocation(eventData["scriptId"], eventData["url"], eventData["lineNumber"], eventData["columnNumber"]); 3677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci detailsText = WebInspector.CPUProfileDataModel.beautifyFunctionName(eventData["functionName"]); 368197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 369f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.FireAnimationFrame: 370f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData["id"]; 371f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 372f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.EventDispatch: 373f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData ? eventData["type"] : null; 374f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 375f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.Paint: 376197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var width = WebInspector.TimelineUIUtils.quadWidth(eventData.clip); 377197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var height = WebInspector.TimelineUIUtils.quadHeight(eventData.clip); 378f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (width && height) 379f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = WebInspector.UIString("%d\u2009\u00d7\u2009%d", width, height); 380f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 381f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.TimerInstall: 382f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.TimerRemove: 383f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) details = linkifyTopCallFrame(); 384f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData["timerId"]; 385f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 386f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.RequestAnimationFrame: 387f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.CancelAnimationFrame: 388f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) details = linkifyTopCallFrame(); 389f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData["id"]; 390f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 391f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ParseHTML: 392f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.RecalculateStyles: 393f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) details = linkifyTopCallFrame(); 394f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 395f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.EvaluateScript: 396f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var url = eventData["url"]; 397f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 398f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) details = linkifyLocation("", url, eventData["lineNumber"], 0); 399f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 400f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.XHRReadyStateChange: 401f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.XHRLoad: 402f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ResourceSendRequest: 403f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var url = eventData["url"]; 404f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 405f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = WebInspector.displayNameForURL(url); 406f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 407f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ResourceReceivedData: 408f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ResourceReceiveResponse: 409f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ResourceFinish: 410f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var initiator = event.initiator; 411f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (initiator) { 412e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var url = initiator.args["data"]["url"]; 413f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 414f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = WebInspector.displayNameForURL(url); 415f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 416f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 417f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.EmbedderCallback: 418f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = eventData["callbackName"]; 419f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 420f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 421f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.PaintImage: 422f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.DecodeImage: 423f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.ResizeImage: 424f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordType.DecodeLazyPixelRef: 425f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var url = event.imageURL; 426f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 427f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) detailsText = WebInspector.displayNameForURL(url); 428f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 429f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 430f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) default: 4319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (event.category === WebInspector.TracingModel.ConsoleEventCategory) 4327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci detailsText = null; 4339e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 4349e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) details = linkifyTopCallFrame(); 435f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 436f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 437f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 438197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (detailsText) { 439197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (details) 440197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch details.textContent = detailsText; 441197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 442197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch details = document.createTextNode(detailsText); 443197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 444f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return details; 445f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 446f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 447f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} scriptId 448f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} url 449f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} lineNumber 450f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number=} columnNumber 451f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 452f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function linkifyLocation(scriptId, url, lineNumber, columnNumber) 453f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 454f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!url) 455f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return null; 456f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 457f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // FIXME(62725): stack trace line/column numbers are one-based. 458c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber - 1, (columnNumber ||1) - 1, "timeline-details"); 459f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 460f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 461f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 462f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {?Element} 463f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 464f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function linkifyTopCallFrame() 465f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 466f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var stackTrace = event.stackTrace; 467f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!stackTrace) { 468f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var initiator = event.initiator; 469f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (initiator) 470f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) stackTrace = initiator.stackTrace; 471f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 472f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!stackTrace || !stackTrace.length) 473f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return null; 474c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return linkifier.linkifyConsoleCallFrame(target, stackTrace[0], "timeline-details"); 475f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 476f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 477f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 478f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 479f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 480f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingTimelineModel} model 481f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.Linkifier} linkifier 482f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {function(!DocumentFragment)} callback 483f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 484c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.TracingTimelineUIUtils.buildTraceEventDetails = function(event, model, linkifier, callback) 485f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 486c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var target = event.thread.target(); 487f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var relatedNode = null; 488f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var barrier = new CallbackBarrier(); 489c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!event.previewElement && target) { 4905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (event.imageURL) 4915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebInspector.DOMPresentationUtils.buildImagePreviewContents(target, event.imageURL, false, barrier.createCallback(saveImage)); 4925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) else if (event.picture) 4937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebInspector.TracingTimelineUIUtils.buildPicturePreviewContent(event, barrier.createCallback(saveImage)); 4945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 495c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (event.backendNodeId && target) 496f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) target.domModel.pushNodesByBackendIdsToFrontend([event.backendNodeId], barrier.createCallback(setRelatedNode)); 497f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) barrier.callWhenDone(callbackWrapper); 498f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 499f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 500f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!Element=} element 501f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 502f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function saveImage(element) 503f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 504f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.previewElement = element || null; 505f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 506f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 507f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 508f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {?Array.<!DOMAgent.NodeId>} nodeIds 509f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 510f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function setRelatedNode(nodeIds) 511f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 512f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (nodeIds) 513f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) relatedNode = target.domModel.nodeForId(nodeIds[0]); 514f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 515f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 516f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function callbackWrapper() 517f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 518c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) callback(WebInspector.TracingTimelineUIUtils._buildTraceEventDetailsSynchronously(event, model, linkifier, relatedNode)); 519f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 520f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 521f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 522f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 523f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 524f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingTimelineModel} model 525f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.Linkifier} linkifier 526f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {?WebInspector.DOMNode} relatedNode 527f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {!DocumentFragment} 528f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 529c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.TracingTimelineUIUtils._buildTraceEventDetailsSynchronously = function(event, model, linkifier, relatedNode) 530f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 531f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var fragment = document.createDocumentFragment(); 532197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var stats = {}; 533197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var hasChildren = WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent(stats, model, event); 534197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var pieChart = hasChildren ? 5357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebInspector.TimelineUIUtils.generatePieChart(stats, WebInspector.TracingTimelineUIUtils.eventStyle(event).category, event.selfTime) : 536197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.TimelineUIUtils.generatePieChart(stats); 537f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) fragment.appendChild(pieChart); 538f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 539f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 540f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 541f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // The messages may vary per event.name; 542f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var callSiteStackTraceLabel; 543f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var callStackLabel; 544f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var relatedNodeLabel; 545f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 546c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var contentHelper = new WebInspector.TimelineDetailsContentHelper(event.thread.target(), linkifier, true); 5475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.millisToString(event.selfTime, true)); 5485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Start Time"), Number.millisToString((event.startTime - model.minimumRecordTime()))); 549e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var eventData = event.args["data"]; 550f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var initiator = event.initiator; 551f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 552f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) switch (event.name) { 553f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.GCEvent: 554f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeAfter"]; 555f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.bytesToString(delta)); 556f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 557f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.TimerFire: 558f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) callSiteStackTraceLabel = WebInspector.UIString("Timer installed"); 559f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // Fall-through intended. 560f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 561f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.TimerInstall: 562f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.TimerRemove: 563f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData["timerId"]); 564f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (event.name === recordTypes.TimerInstall) { 565f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number.millisToString(eventData["timeout"])); 566f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !eventData["singleShot"]); 567f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 568f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 569f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.FireAnimationFrame: 570f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) callSiteStackTraceLabel = WebInspector.UIString("Animation frame requested"); 571f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Callback ID"), eventData["id"]); 572f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 573f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.FunctionCall: 574f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventData["scriptName"]) 575f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendLocationRow(WebInspector.UIString("Location"), eventData["scriptName"], eventData["scriptLine"]); 576f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 577f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceSendRequest: 578f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceReceiveResponse: 579f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceReceivedData: 580f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceFinish: 581e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var url = (event.name === recordTypes.ResourceSendRequest) ? eventData["url"] : initiator.args["data"]["url"]; 582f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 583f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendElementRow(WebInspector.UIString("Resource"), WebInspector.linkifyResourceAsNode(url)); 584f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventData["requestMethod"]) 585f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Request Method"), eventData["requestMethod"]); 586f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (typeof eventData["statusCode"] === "number") 587f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Status Code"), eventData["statusCode"]); 588f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventData["mimeType"]) 589f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("MIME Type"), eventData["mimeType"]); 590f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventData["encodedDataLength"]) 591f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Encoded Data Length"), WebInspector.UIString("%d Bytes", eventData["encodedDataLength"])); 592f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 593f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.EvaluateScript: 594f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var url = eventData["url"]; 595f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (url) 596f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendLocationRow(WebInspector.UIString("Script"), url, eventData["lineNumber"]); 597f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 598f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.Paint: 599f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var clip = eventData["clip"]; 600f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Location"), WebInspector.UIString("(%d, %d)", clip[0], clip[1])); 601197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var clipWidth = WebInspector.TimelineUIUtils.quadWidth(clip); 602197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var clipHeight = WebInspector.TimelineUIUtils.quadHeight(clip); 603f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Dimensions"), WebInspector.UIString("%d × %d", clipWidth, clipHeight)); 604f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // Fall-through intended. 605f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 606f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.PaintSetup: 607f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.Rasterize: 608f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ScrollLayer: 609f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) relatedNodeLabel = WebInspector.UIString("Layer root"); 610f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 611f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.PaintImage: 612f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.DecodeLazyPixelRef: 613f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.DecodeImage: 614f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResizeImage: 615f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.DrawLazyPixelRef: 616f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) relatedNodeLabel = WebInspector.UIString("Image element"); 617f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (event.imageURL) 618f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendElementRow(WebInspector.UIString("Image URL"), WebInspector.linkifyResourceAsNode(event.imageURL)); 619f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 620f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.RecalculateStyles: // We don't want to see default details. 621f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Elements affected"), event.args["elementCount"]); 622f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) callStackLabel = WebInspector.UIString("Styles recalculation forced"); 623f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 624f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.Layout: 625f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var beginData = event.args["beginData"]; 626f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Nodes that need layout"), beginData["dirtyObjects"]); 627f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Layout tree size"), beginData["totalObjects"]); 628f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Layout scope"), 629f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) beginData["partialLayout"] ? WebInspector.UIString("Partial") : WebInspector.UIString("Whole document")); 630f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) callSiteStackTraceLabel = WebInspector.UIString("Layout invalidated"); 631f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) callStackLabel = WebInspector.UIString("Layout forced"); 632f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) relatedNodeLabel = WebInspector.UIString("Layout root"); 633f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 634f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ConsoleTime: 6357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name); 636f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 637f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketCreate: 638f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketSendHandshakeRequest: 639f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketReceiveHandshakeResponse: 640f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketDestroy: 641e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var initiatorData = initiator ? initiator.args["data"] : eventData; 642f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (typeof initiatorData["webSocketURL"] !== "undefined") 643f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("URL"), initiatorData["webSocketURL"]); 644f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (typeof initiatorData["webSocketProtocol"] !== "undefined") 645f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("WebSocket Protocol"), initiatorData["webSocketProtocol"]); 646f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (typeof eventData["message"] !== "undefined") 647f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Message"), eventData["message"]); 648f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 649f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.EmbedderCallback: 650f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendTextRow(WebInspector.UIString("Callback Function"), eventData["callbackName"]); 651f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 652f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) default: 653c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var detailsNode = WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent(event, linkifier); 654f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (detailsNode) 655f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendElementRow(WebInspector.UIString("Details"), detailsNode); 656f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 657f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 658f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 659f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (relatedNode) 660f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode)); 661f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 662f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventData && eventData["scriptName"] && event.name !== recordTypes.FunctionCall) 663f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); 664f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 665f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (initiator) { 666f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var callSiteStackTrace = initiator.stackTrace; 667f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (callSiteStackTrace) 668f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendStackTrace(callSiteStackTraceLabel || WebInspector.UIString("Call Site stack"), callSiteStackTrace); 669f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 670f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var eventStackTrace = event.stackTrace; 671f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventStackTrace) 672f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString("Call Stack"), eventStackTrace); 673f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 674f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var warning = event.warning; 675f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (warning) { 676f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var div = document.createElement("div"); 677f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) div.textContent = warning; 678f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contentHelper.appendElementRow(WebInspector.UIString("Warning"), div); 679f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 6805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (event.previewElement) 6815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.previewElement); 682f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) fragment.appendChild(contentHelper.element); 683f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return fragment; 684f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 685f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 686f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 687197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Object} total 688f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingTimelineModel} model 689f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 690197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 691f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 692197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent = function(total, model, event) 693f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 694f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var events = model.inspectedTargetEvents(); 695f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 696f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} startTime 697f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} e 698f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {number} 699f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 700f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) function eventComparator(startTime, e) 701f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 702f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return startTime - e.startTime; 703f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 704f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var index = events.binaryIndexOf(event.startTime, eventComparator); 7057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (index < 0) 7067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return false; 707f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var hasChildren = false; 708f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var endTime = event.endTime; 709f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (endTime) { 710f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = index; i < events.length; i++) { 711f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var nextEvent = events[i]; 712f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (nextEvent.startTime >= endTime) 713f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 714f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!nextEvent.selfTime) 715f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) continue; 716e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (nextEvent.thread !== event.thread) 717e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) continue; 718f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (i > index) 719f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) hasChildren = true; 7207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(nextEvent).category.name; 7217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci total[categoryName] = (total[categoryName] || 0) + nextEvent.selfTime; 722f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 723f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 724197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return hasChildren; 725f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 726f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 7275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 7287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.TracingModel.Event} event 7295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {function(!Element=)} callback 7305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.TracingTimelineUIUtils.buildPicturePreviewContent = function(event, callback) 7325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 7337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 7347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci new WebInspector.LayerPaintEvent(event).loadPicture(onSnapshotLoaded); 7355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 7367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?Array.<number>} rect 737197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {?WebInspector.PaintProfilerSnapshot} snapshot 7385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci function onSnapshotLoaded(rect, snapshot) 7405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 741197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!snapshot) { 7425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) callback(); 7435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 7445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 745197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch snapshot.requestImage(null, null, 1, onGotImage); 746197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch snapshot.dispose(); 7475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 748f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 7495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 750197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {string=} imageURL 7515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 752197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function onGotImage(imageURL) 7535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 754197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!imageURL) { 7555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) callback(); 7565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 7575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 7585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var container = document.createElement("div"); 7595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) container.className = "image-preview-container"; 7605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var img = container.createChild("img"); 761197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch img.src = imageURL; 7625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) callback(container); 7635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 7645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 76576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 76676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)/** 76776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {string} recordType 76876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {string=} title 76976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @return {!Element} 77076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */ 77176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebInspector.TracingTimelineUIUtils._createEventDivider = function(recordType, title) 77276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 77376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var eventDivider = document.createElement("div"); 77476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className = "resources-event-divider"; 77576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 77676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 77776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) if (recordType === recordTypes.MarkDOMContent) 77876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className += " resources-blue-divider"; 77976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) else if (recordType === recordTypes.MarkLoad) 78076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className += " resources-red-divider"; 78176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) else if (recordType === recordTypes.MarkFirstPaint) 78276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className += " resources-green-divider"; 7839e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else if (recordType === recordTypes.TimeStamp || recordType === recordTypes.ConsoleTime) 78476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className += " resources-orange-divider"; 78576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) else if (recordType === recordTypes.BeginFrame) 78676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.className += " timeline-frame-divider"; 78776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 78876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) if (title) 78976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) eventDivider.title = title; 79076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 79176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return eventDivider; 79276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 793197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 794197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 795197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!Array.<string>} 796197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 797197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineUIUtils._visibleTypes = function() 798197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 799197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var eventStyles = WebInspector.TracingTimelineUIUtils._initEventStyles(); 800197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var result = []; 801197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch for (var name in eventStyles) { 802197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!eventStyles[name].hidden) 803197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch result.push(name); 804197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 805197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return result; 806197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 807197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 808197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 809197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!WebInspector.TracingTimelineModel.Filter} 810197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 811197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineUIUtils.hiddenEventsFilter = function() 812197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 813197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return new WebInspector.TracingTimelineModel.InclusiveEventNameFilter(WebInspector.TracingTimelineUIUtils._visibleTypes()); 814197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 815