blob: 38b6e13a00c87aeefc60d16a36bc2fd57cc56929 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2016 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/model/event_container.html">
<link rel="import" href="/tracing/model/user_model/segment.html">
<script>
'use strict';
tr.exportTo('tr.model.um', function() {
class UserModel extends tr.model.EventContainer {
constructor(parentModel) {
super();
this.parentModel_ = parentModel;
this.expectations_ = new tr.model.EventSet();
this.segments_ = [];
}
get stableId() {
return 'UserModel';
}
get parentModel() {
return this.parentModel_;
}
sortExpectations() {
this.expectations_.sortEvents((x, y) => (x.start - y.start));
}
get expectations() {
return this.expectations_;
}
shiftTimestampsForward(amount) {
}
addCategoriesToDict(categoriesDict) {
}
get segments() {
return this.segments_;
}
* childEvents() {
yield* this.expectations;
}
* childEventContainers() {
}
updateBounds() {
this.bounds.reset();
for (const expectation of this.expectations) {
expectation.addBoundsToRange(this.bounds);
}
}
/**
* Return a new array of new Segments by merging adjacent segments when
* |getKeyForSegment| returns identical keys.
* |getKeyForSegment| is called with each Segment and the index of that
* Segment.
*
* @param {!function(!tr.model.um.Segment, number):*} getKeyForSegment
* @return {!Array.<!tr.model.um.Segment>}
*/
resegment(getKeyForSegment) {
const newSegments = [];
let prevKey = undefined;
let prevSegment = undefined;
for (let i = 0; i < this.segments.length; ++i) {
const segment = this.segments[i];
const key = getKeyForSegment(segment, i);
if (prevSegment !== undefined && key === prevKey) {
prevSegment.addSegment(segment);
} else {
prevSegment = segment.clone();
newSegments.push(prevSegment);
}
prevKey = key;
}
return newSegments;
}
}
return {
UserModel,
};
});
</script>