// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.require('tracing.analysis.analysis_view');
base.require('tracing.test_utils');
base.require('tracing.trace_model');
base.require('tracing.selection');
base.unittest.testSuite('tracing.analysis.analysis_view', function() {
var TraceModel = tracing.TraceModel;
var Selection = tracing.Selection;
var AnalysisView = tracing.analysis.AnalysisView;
var ObjectInstance = tracing.trace_model.ObjectInstance;
var DefaultObjectSnapshotView = tracing.analysis.DefaultObjectSnapshotView;
var DefaultObjectInstanceView = tracing.analysis.DefaultObjectInstanceView;
function withRegisteredType(registrar, typeName,
typeConstructor, opt_options, fn) {
registrar.register(typeName, typeConstructor, opt_options);
try {
fn();
} finally {
registrar.unregister(typeName);
}
}
test('instantiate_analysisWithObjects', function() {
var model = new TraceModel();
var p1 = model.getOrCreateProcess(1);
var objects = p1.objects;
var i10 = objects.idWasCreated('0x1000', 'cc', 'LayerTreeHostImpl', 10);
var s10 = objects.addSnapshot('0x1000', 'cc', 'LayerTreeHostImpl', 10,
'snapshot-1');
var s25 = objects.addSnapshot('0x1000', 'cc', 'LayerTreeHostImpl', 25,
'snapshot-2');
var s40 = objects.addSnapshot('0x1000', 'cc', 'LayerTreeHostImpl', 40,
'snapshot-3');
objects.idWasDeleted('0x1000', 'cc', 'LayerTreeHostImpl', 45);
var track = {};
var selection = new Selection();
selection.addObjectInstance(track, i10);
selection.addObjectSnapshot(track, s10);
selection.addObjectSnapshot(track, s25);
selection.addObjectSnapshot(track, s40);
var analysisEl = new AnalysisView();
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
});
test('analyzeSelectionWithObjectSnapshotUnknownType', function() {
var i10 = new ObjectInstance({}, '0x1000', 'cat', 'someUnhandledName', 10);
var s10 = i10.addSnapshot(10, {foo: 1});
var selection = new Selection();
selection.addObjectSnapshot({}, s10);
var view = new AnalysisView();
view.selection = selection;
assertTrue(view.currentView instanceof DefaultObjectSnapshotView);
assertEquals(s10, view.currentView.objectSnapshot);
});
test('analyzeSelectionWithObjectSnapshotKnownType', function() {
var i10 = new ObjectInstance({}, '0x1000', 'cat', 'MyView', 10);
var s10 = i10.addSnapshot(10, {foo: 1});
var selection = new Selection();
selection.addObjectSnapshot({}, s10);
var MyView = ui.define(
'my-view', tracing.analysis.ObjectSnapshotView);
MyView.prototype = {
__proto__: tracing.analysis.ObjectSnapshotView.prototype,
decorate: function() {
},
updateContents: function() {
this.textContent = 'hello';
}
};
var view = new AnalysisView();
withRegisteredType(
tracing.analysis.ObjectSnapshotView, 'MyView', MyView, undefined,
function() {
view.selection = selection;
assertTrue(view.currentView instanceof MyView);
assertEquals(s10, view.currentView.objectSnapshot);
assertEquals('hello', view.currentView.textContent);
});
});
test('analyzeSelectionWithObjectInstanceUnknownType', function() {
var i10 = new ObjectInstance({}, '0x1000', 'cat', 'someUnhandledName', 10);
var selection = new Selection();
selection.addObjectInstance({}, i10);
var view = new AnalysisView();
view.selection = selection;
assertTrue(view.currentView instanceof DefaultObjectInstanceView);
assertEquals(i10, view.currentView.objectInstance);
});
test('analyzeSelectionWithObjectInstanceKnownType', function() {
var i10 = new ObjectInstance({}, '0x1000', 'cat', 'MyView', 10);
var selection = new Selection();
selection.addObjectInstance({}, i10);
var MyView = ui.define(
'my-view', tracing.analysis.ObjectInstanceView);
MyView.prototype = {
__proto__: tracing.analysis.ObjectInstanceView.prototype,
decorate: function() {
},
updateContents: function() {
this.textContent = 'hello';
}
};
var view = new AnalysisView();
withRegisteredType(
tracing.analysis.ObjectInstanceView,
'MyView', MyView, undefined, function() {
view.selection = selection;
assertTrue(view.currentView instanceof MyView);
assertEquals(i10, view.currentView.objectInstance);
assertEquals('hello', view.currentView.textContent);
});
});
test('analyzeSelectionWithSliceKnownType', function() {
var s10 = new tracing.trace_model.Slice('cat', 'MySlice', 0, 10, {}, 4);
var selection = new tracing.Selection();
selection.addSlice({}, s10);
var MySlice = ui.define(
'my-slice', tracing.analysis.SliceView);
MySlice.prototype = {
__proto__: tracing.analysis.SliceView.prototype,
decorate: function() {
},
updateContents: function() {
this.textContent = 'hello';
}
};
var view = new AnalysisView();
withRegisteredType(
tracing.analysis.SliceView,
'MySlice', MySlice, undefined, function() {
view.selection = selection;
assertTrue(view.currentView instanceof MySlice);
assertEquals(s10, view.currentView.slice);
assertEquals('hello', view.currentView.textContent);
});
});
});