blob: 0a3d481a2d7db5686976a534a997f2c529a87b05 [file] [log] [blame]
<!DOCTYPE html>
<!--
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.
-->
<link rel="import" href="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/model/event_set.html">
<link rel="import" href="/tracing/model/model.html">
<link rel="import" href="/tracing/ui/analysis/single_event_sub_view.html">
<link rel="import" href="/tracing/ui/base/deep_utils.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var Model = tr.Model;
var Thread = tr.model.Thread;
var EventSet = tr.model.EventSet;
var newSliceEx = tr.c.TestUtils.newSliceEx;
function createSelection(customizeThreadCallback) {
var model = tr.c.TestUtils.newModelWithEvents([], {
customizeModelCallback: function(model) {
var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
customizeThreadCallback(t53, model);
}
});
var t53 = model.processes[52].threads[53];
var t53track = {};
t53track.thread = t53;
var selection = new EventSet();
selection.push(t53.sliceGroup.slices[0]);
assert.equal(selection.length, 1);
return selection;
}
function createSelectionWithSingleSlice(opt_options) {
var options = opt_options || {};
return createSelection(function(t53, model) {
if (options.withStartStackFrame || options.withEndStackFrame) {
var fA = tr.c.TestUtils.newStackTrace(model, ['a1', 'a2']);
var fB = tr.c.TestUtils.newStackTrace(model, ['b1', 'b2']);
}
var slice = newSliceEx({title: 'b', start: 0, duration: 0.002});
slice.category = options.withCategory ? 'foo' : '';
if (options.withStartStackFrame)
slice.startStackFrame = options.withStartStackFrame === 'a' ? fA : fB;
if (options.withEndStackFrame)
slice.endStackFrame = options.withEndStackFrame === 'a' ? fA : fB;
t53.sliceGroup.pushSlice(slice);
});
}
test('instantiate_withSingleSlice', function() {
var selection = createSelectionWithSingleSlice();
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
});
test('alerts', function() {
var slice = newSliceEx({title: 'b', start: 0, duration: 0.002});
var ALERT_INFO_1 = new tr.model.EventInfo(
'Alert 1', 'Critical alert');
var alert = new tr.model.Alert(ALERT_INFO_1, 5, [slice]);
var selection = new EventSet();
selection.push(slice);
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
});
test('instantiate_withSingleSliceWithArg', function() {
var selection = createSelection(function(t53) {
var slice = newSliceEx({title: 'my_slice', start: 0, duration: 1.0});
slice.args = {
'complex': {
'b': '2 as a string',
'c': [3, 4, 5]
}
};
t53.sliceGroup.pushSlice(slice);
});
var subView = document.createElement('tr-ui-a-single-event-sub-view');
subView.selection = selection;
this.addHTMLOutput(subView);
var gov = tr.b.findDeepElementMatching(subView,
'tr-ui-a-generic-object-view');
assert.isDefined(gov);
});
test('instantiate_withSingleSliceCategory', function() {
var selection = createSelectionWithSingleSlice({withCategory: true});
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
});
test('instantiate_withSingleStartStackFrame', function() {
var selection = createSelectionWithSingleSlice(
{withStartStackFrame: 'a'});
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
var e = tr.b.findDeepElementWithTextContent(
analysisEl, /Start Stack Trace/);
assert.isDefined(e);
assert.isDefined(Polymer.dom(e).nextSibling.children[0].stackFrame);
});
test('instantiate_withSingleEndStackFrame', function() {
var selection = createSelectionWithSingleSlice(
{withEndStackFrame: 'b'});
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
var e = tr.b.findDeepElementWithTextContent(
analysisEl, /End Stack Trace/);
assert.isDefined(e);
assert.isDefined(Polymer.dom(e).nextSibling.children[0].stackFrame);
assert.equal(Polymer.dom(e).nextSibling.children[0].stackFrame.title, 'b2');
});
test('instantiate_withDifferentStartAndEndStackFrames', function() {
var selection = createSelectionWithSingleSlice(
{withStartStackFrame: 'a',
withEndStackFrame: 'b'});
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
var eA = tr.b.findDeepElementWithTextContent(
analysisEl, /Start Stack Trace/);
assert.isDefined(eA);
assert.isDefined(Polymer.dom(eA).nextSibling.children[0].stackFrame);
assert.equal(
Polymer.dom(eA).nextSibling.children[0].stackFrame.title, 'a2');
var eB = tr.b.findDeepElementWithTextContent(
analysisEl, /End Stack Trace/);
assert.isDefined(eB);
assert.isDefined(Polymer.dom(eB).nextSibling.children[0].stackFrame);
assert.equal(
Polymer.dom(eB).nextSibling.children[0].stackFrame.title, 'b2');
});
test('instantiate_withSameStartAndEndStackFrames', function() {
var selection = createSelectionWithSingleSlice(
{withStartStackFrame: 'a',
withEndStackFrame: 'a'});
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
var e = tr.b.findDeepElementWithTextContent(
analysisEl, /Start\+End Stack Trace/);
assert.isDefined(e);
assert.isDefined(Polymer.dom(e).nextSibling.children[0].stackFrame);
assert.equal(Polymer.dom(e).nextSibling.children[0].stackFrame.title, 'a2');
});
test('analyzeSelectionWithSingleSlice', function() {
var selection = createSelectionWithSingleSlice();
var subView = document.createElement('tr-ui-a-single-event-sub-view');
subView.selection = selection;
this.addHTMLOutput(subView);
var table = tr.b.findDeepElementMatching(
subView, 'tr-ui-b-table');
assert.equal(table.tableRows.length, 3);
assert.equal(table.tableRows[0].value, 'b');
assert.equal(table.tableRows[1].value.value, 0);
assert.strictEqual(table.tableRows[1].value.unit,
tr.b.Unit.byName.timeStampInMs);
assert.equal(table.tableRows[2].value.value, 0.002);
assert.strictEqual(table.tableRows[2].value.unit,
tr.b.Unit.byName.timeDurationInMs);
});
test('analyzeSelectionWithSingleSliceCategory', function() {
var selection = createSelectionWithSingleSlice({withCategory: true});
var subView = document.createElement('tr-ui-a-single-event-sub-view');
subView.selection = selection;
this.addHTMLOutput(subView);
var table = tr.b.findDeepElementMatching(
subView, 'tr-ui-b-table');
assert.equal(table.tableRows.length, 4);
assert.equal(table.tableRows[0].value, 'b');
assert.equal(table.tableRows[1].value, 'foo');
assert.equal(table.tableRows[2].value.value, 0);
assert.strictEqual(table.tableRows[2].value.unit,
tr.b.Unit.byName.timeStampInMs);
assert.equal(table.tableRows[3].value.value, 0.002);
assert.strictEqual(table.tableRows[3].value.unit,
tr.b.Unit.byName.timeDurationInMs);
});
test('instantiate_withSingleSliceContainingIDRef', function() {
var model = new Model();
var p1 = model.getOrCreateProcess(1);
var myObjectSlice = p1.objects.addSnapshot(
'0x1000', 'cat', 'my_object', 0);
var t1 = p1.getOrCreateThread(1);
t1.sliceGroup.pushSlice(newSliceEx({title: 'b', start: 0, duration: 2}));
t1.sliceGroup.slices[0].args.my_object = myObjectSlice;
var t1track = {};
t1track.thread = t1;
var selection = new EventSet();
selection.push(t1.sliceGroup.slices[0]);
assert.equal(selection.length, 1);
var subView = document.createElement('tr-ui-a-single-event-sub-view');
subView.selection = selection;
this.addHTMLOutput(subView);
var analysisLink = tr.b.findDeepElementMatching(subView,
'tr-ui-a-analysis-link');
assert.isDefined(analysisLink);
});
test('instantiate_withSingleSliceContainingInfo', function() {
var slice = newSliceEx({title: 'b', start: 0, duration: 1});
slice.info = new tr.model.EventInfo(
'Info title', 'Description');
var selection = new EventSet();
selection.push(slice);
var analysisEl = document.createElement('tr-ui-a-single-event-sub-view');
analysisEl.selection = selection;
this.addHTMLOutput(analysisEl);
});
});
</script>