blob: 3ac67209274945db78c99219d119f55a6955f8be [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
import Ember from 'ember';
var processIndex = 1;
export default Ember.Object.extend({
_id: null,
name: null,
events: [], // An array of objects with name and time as mandatory(else error) properties.
eventBars: null,
index: 0,
color: null,
blockers: null, // Array of processes that's blocking the current process
blocking: null, // Array of processes blocked by the current process
blockingEventName: null,
consolidateStartTime: Ember.computed.oneWay("startEvent.time"),
consolidateEndTime: Ember.computed.oneWay("endEvent.time"),
init: function () {
this.set("_id", `process-id-${processIndex}`);
processIndex++;
},
getColor: function (lightnessFactor) {
var color = this.get("color"),
l;
if(!color) {
return "#0";
}
l = color.l;
if(lightnessFactor !== undefined) {
l += 5 + 25 * lightnessFactor;
}
return `hsl( ${color.h}, ${color.s}%, ${l}% )`;
},
getBarColor: function (barIndex) {
return this.getColor(1 - (barIndex / this.get("eventBars.length")));
},
getConsolidateColor: function () {
return this.getColor();
},
startEvent: Ember.computed("events.@each.time", function () {
var events = this.get("events"),
startEvent;
if(events) {
startEvent = events[0];
events.forEach(function (event) {
if(startEvent.time > event.time) {
startEvent = event;
}
});
}
return startEvent;
}),
endEvent: Ember.computed("events.@each.time", function () {
var events = this.get("events"),
endEvent;
if(events) {
endEvent = events[events.length - 1];
events.forEach(function (event) {
if(endEvent.time < event.time) {
endEvent = event;
}
});
}
return endEvent;
}),
getAllBlockers: function (parentHash) {
var blockers = [],
currentId = this.get("_id");
parentHash = parentHash || {}; // To keep a check on cyclic blockers
parentHash[currentId] = true;
if(this.get("blockers.length")) {
this.get("blockers").forEach(function (blocker) {
if(!parentHash[blocker.get("_id")]) {
blockers.push(blocker);
blockers.push.apply(blockers, blocker.getAllBlockers(parentHash));
}
});
}
parentHash[currentId] = false;
return blockers;
},
getTooltipContents: function (type/*, options*/) {
return [{
title: this.get("name"),
description: "Mouse on : " + type
}];
}
});