3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/tracing/analysis/analysis_sub_view.html">
9 <link rel="import" href="/base.html">
11 <polymer-element name="multiple-objects-analysis-sub-view"
12 extends="tracing-analysis-sub-view"
13 constructor="MultipleObjectsAnalysisSubView">
16 tv.onPolymerReady(function() {
17 tracing.registerAnalysisSubViewType(
19 function supported(selection) {
20 return selection[0] instanceof tracing.trace_model.ObjectInstance ||
21 selection[0] instanceof tracing.trace_model.ObjectSnapshot;
23 function constructView(selection) {
24 if (selection.length != 1)
25 return new MultipleObjectsAnalysisSubView();
27 var event = selection[0];
28 var typeName, viewBaseType, defaultViewConstructor;
29 if (event instanceof tracing.trace_model.ObjectSnapshot) {
30 typeName = event.objectInstance.typeName;
31 viewBaseType = tracing.analysis.ObjectSnapshotView;
32 defaultViewConstructor = tracing.analysis.DefaultObjectSnapshotView;
33 } else if (event instanceof tracing.trace_model.ObjectInstance) {
34 typeName = event.typeName;
35 viewBaseType = tracing.analysis.ObjectInstanceView;
36 defaultViewConstructor = tracing.analysis.DefaultObjectInstanceView;
38 throw new Error('Not recognized');
41 var customViewInfo = viewBaseType.getViewInfo(typeName);
43 return new customViewInfo.constructor();
44 return new defaultViewConstructor();
47 passSelectionToConstructor: true
53 this.currentSelection_ = undefined;
56 set selection(selection) {
57 this.currentSelection_ = selection;
58 this.textContent = '';
60 if (selection.length === 0)
63 var results = new tracing.analysis.AnalysisResults();
64 this.appendChild(results);
66 this.analyzeObjectEvents_(results, selection);
70 return this.currentSelection_;
74 * Extremely simplistic analysis of objects. Mainly exists to provide
75 * click-through to the main object's analysis view.
77 analyzeObjectEvents_: function(results, objectEvents) {
78 objectEvents = tv.asArray(objectEvents).sort(
79 tv.Range.compareByMinTimes);
81 results.appendHeader('Selected Objects:');
82 var table = results.appendTable('analysis-object-sample-table', 2);
84 objectEvents.forEach(function(event) {
85 var row = results.appendBodyRow(table);
88 var selectionGenerator;
89 if (event instanceof tracing.trace_model.ObjectSnapshot) {
90 var objectSnapshot = event;
91 ts = tracing.analysis.tsRound(objectSnapshot.ts);
92 objectText = objectSnapshot.objectInstance.typeName + ' ' +
93 objectSnapshot.objectInstance.id;
94 selectionGenerator = function() {
95 var selection = new tracing.Selection();
96 selection.push(objectSnapshot);
100 var objectInstance = event;
102 var deletionTs = objectInstance.deletionTs == Number.MAX_VALUE ?
103 '' : tracing.analysis.tsRound(objectInstance.deletionTs);
104 ts = tracing.analysis.tsRound(objectInstance.creationTs) +
107 objectText = objectInstance.typeName + ' ' +
110 selectionGenerator = function() {
111 var selection = new tracing.Selection();
112 selection.push(objectInstance);
117 results.appendTableCell(table, row, ts);
118 var linkContainer = results.appendTableCell(table, row, '');
119 linkContainer.appendChild(
120 results.createSelectionChangingLink(
122 selectionGenerator));