Lines Matching full:this
127 this.Intervals = [];
128 this.Titles = []; // { "header":true|false, "title":string, "intervals_idxes":[int] }
129 this.Heights = []; // Visual height for each line
130 this.HeaderCollapsed = {};
131 this.TitleProperties = []; // [Visual height, Is Header]
132 this.LowerBoundTime = RANGE_LEFT_INIT;
133 this.UpperBoundTime = RANGE_RIGHT_INIT;
134 this.LowerBoundTimeTarget = this.LowerBoundTime;
135 this.UpperBoundTimeTarget = this.UpperBoundTime;
136 this.LastTimeLowerBound = 0;
137 this.LastTimeUpperBound = 0;
138 this.IsCanvasDirty = true;
139 this.IsHighlightDirty = true;
140 this.IsAnimating = false;
141 this.IpmiVizHistogramImageData = {};
142 this.IpmiVizHistHighlighted = {};
143 this.HighlightedRequests = [];
144 this.Canvas = undefined;
145 this.TitleDispLengthLimit = 32; // display this many chars for title
146 this.IsTimeDistributionEnabled = false;
147 this.AccentColor = '#000';
148 this.CurrentFileName = '';
149 this.VisualLineStartIdx = 0;
152 this.GroupBy = [];
153 this.GroupByStr = '';
156 this.CurrDeltaX = 0;
157 this.CurrDeltaZoom = 0;
158 this.CurrShiftFlag = false;
159 this.MouseState = {
169 return (this.drag_begin_y != undefined);
172 this.drag_begin_y = undefined;
173 this.drag_begin_title_start_idx = undefined;
176 if (this.hoveredSide == "top_horizontal_scrollbar") return true;
177 else if (this.hoveredSide == "bottom_horizontal_scrollbar") return true;
181 this.ScrollBarState = {
185 this.HighlightedRegion = {t0: -999, t1: -999};
187 // The linked view will move and zoom with this view
188 this.linked_views = [];
194 this.Heights = [];
197 for (let i=0; i<this.Titles.length; i++) {
201 const title_data = this.Titles[i];
207 const line = this.Intervals[intervals_idxes[0]];
231 this.Heights.push(ymax+1);
237 this.Heights.forEach((h) => {
245 if (this.Heights.length < 1) return undefined;
246 let lb = 0, ub = this.Heights[0]-1;
247 for (let i=0; i<this.Heights.length; i++) {
248 ub = lb + this.Heights[i] - 1;
258 return (this.Intervals.length < 1);
262 if (this.IsTimeDistributionEnabled == true) {
279 if (this.CurrShiftFlag) dz *= 2;
282 mid = (this.LowerBoundTime + this.UpperBoundTime) / 2;
284 this.LowerBoundTime = mid - (mid - this.LowerBoundTime) * (1 - dz);
285 this.UpperBoundTime = mid + (this.UpperBoundTime - mid) * (1 - dz);
286 this.IsCanvasDirty = true;
287 this.IsAnimating = false;
291 this.linked_views.forEach(function(v) {
299 mid = (this.LowerBoundTime + this.UpperBoundTime) / 2;
301 this.LowerBoundTimeTarget = mid - (mid - this.LowerBoundTime) * (1 - dz);
302 this.UpperBoundTimeTarget = mid + (this.UpperBoundTime - mid) * (1 - dz);
303 this.IsCanvasDirty = true;
304 this.IsAnimating = true;
307 this.linked_views.forEach(function(v) {
314 let deltat = (this.UpperBoundTime - this.LowerBoundTime) * delta_screens;
315 this.BeginSetBoundaryAnimation(
316 this.LowerBoundTime + deltat, this.UpperBoundTime + deltat);
319 this.linked_views.forEach(function(v) {
326 this.IsAnimating = true;
327 this.LowerBoundTimeTarget = lt;
328 this.UpperBoundTimeTarget = rt;
331 this.linked_views.forEach(function(v) {
339 let mid = (this.LowerBoundTime + this.UpperBoundTime) / 2;
340 let lt = this.LowerBoundTime + (mid_new - mid);
341 let rt = this.UpperBoundTime + (mid_new - mid);
342 this.BeginSetBoundaryAnimation(lt, rt, 0);
344 this.linked_views.forEach(function(v) {
351 if (Math.abs(this.LowerBoundTime - this.LowerBoundTimeTarget) < EPS &&
352 Math.abs(this.UpperBoundTime - this.UpperBoundTimeTarget) < EPS) {
353 this.LowerBoundTime = this.LowerBoundTimeTarget;
354 this.UpperBoundTime = this.UpperBoundTimeTarget;
355 this.IsAnimating = false;
357 if (this.IsAnimating) {
359 this.LowerBoundTime =
360 this.LowerBoundTime * t + this.LowerBoundTimeTarget * (1 - t);
361 this.UpperBoundTime =
362 this.UpperBoundTime * t + this.UpperBoundTimeTarget * (1 - t);
363 this.IsCanvasDirty = true;
369 this.HighlightedRegion.t0 != -999 && this.HighlightedRegion.t1 != -999);
376 if (this.IpmiVizHistogramImageData[key] == undefined) {
381 this.IpmiVizHistogramImageData[key], xMid - HISTOGRAM_W / 2,
406 return this.MouseState.x > LEFT_MARGIN;
411 (this.UpperBoundTime - this.LowerBoundTime) +
412 this.LowerBoundTime;
413 ret = Math.max(ret, this.LowerBoundTime);
414 ret = Math.min(ret, this.UpperBoundTime);
419 this.HighlightedRegion.t0 = -999;
420 this.HighlightedRegion.t1 = -999;
425 if (this.MouseState.pressed == true) {
426 const h = this.MouseState.hoveredSide;
429 this.HighlightedRegion.t1 =
430 this.MouseXToTimestamp(this.MouseState.x);
435 if (this.MouseState.x < LEFT_MARGIN)
436 this.MouseState.hovered = false;
437 else if (this.MouseState.x > RIGHT_MARGIN)
438 this.MouseState.hovered = false;
440 this.MouseState.hovered = true;
442 this.IsCanvasDirty = true;
444 Math.floor((this.MouseState.y - YBEGIN + TEXT_Y0) / LINE_SPACING);
446 if (this.MouseState.x <= 0 ||
447 this.MouseState.x >= RIGHT_MARGIN) {
451 const old_hoveredSide = this.MouseState.hoveredSide;
454 this.MouseState.hoveredVisibleLineIndex = -999;
455 if (this.MouseState.hoveredSide != "scrollbar" &&
456 this.MouseState.pressed == false) {
458 this.MouseState.hoveredVisibleLineIndex = lineIndex;
462 if (this.MouseState.x <= PAD + LINE_SPACING / 2 + LEFT_MARGIN &&
463 this.MouseState.x >= PAD + LEFT_MARGIN) {
464 this.MouseState.hoveredSide = 'left';
465 this.IsCanvasDirty = true;
467 this.MouseState.x <= RIGHT_MARGIN - PAD &&
468 this.MouseState.x >= RIGHT_MARGIN - PAD - LINE_SPACING / 2) {
469 this.MouseState.hoveredSide = 'right';
470 this.IsCanvasDirty = true;
471 } else if (this.MouseState.x >= PAD + LEFT_MARGIN &&
472 this.MouseState.y <= TOP_HORIZONTAL_SCROLLBAR_HEIGHT &&
473 this.MouseState.y > 0) {
474 this.MouseState.hoveredVisibleLineIndex = undefined;
475 this.MouseState.hoveredSide = 'top_horizontal_scrollbar';
476 } else if (this.MouseState.x >= PAD + LEFT_MARGIN &&
477 this.MouseState.y >= this.Canvas.height - BOTTOM_HORIZONTAL_SCROLLBAR_HEIGHT &&
478 this.MouseState.y <= this.Canvas.height) {
479 this.MouseState.hoveredVisibleLineIndex = undefined;
480 this.MouseState.hoveredSide = 'bottom_horizontal_scrollbar';
482 this.MouseState.hoveredSide = undefined;
488 if (this.MouseState.pressed == true) {
490 if (this.MouseState.hoveredSide == "top_horizontal_scrollbar" ||
491 this.MouseState.hoveredSide == "bottom_horizontal_scrollbar") {
492 …const sec_per_px = (this.MouseState.begin_UpperBoundTime - this.MouseState.begin_LowerBoundTime) /…
493 const pan_secs = (this.MouseState.x - this.MouseState.begin_drag_x) * sec_per_px;
495 const new_lb = this.MouseState.begin_LowerBoundTime - pan_secs;
496 const new_ub = this.MouseState.begin_UpperBoundTime - pan_secs;
497 this.LowerBoundTime = new_lb;
498 this.UpperBoundTime = new_ub;
501 this.linked_views.forEach((v) => {
506 const tvh = this.TotalVisualHeight();
507 if (this.MouseState.hoveredSide == 'scrollbar') {
508 const diff_y = this.MouseState.y - this.MouseState.drag_begin_y;
509 const diff_title_idx = tvh * diff_y / this.Canvas.height;
510 … let new_title_start_idx = this.MouseState.drag_begin_title_start_idx + parseInt(diff_title_idx);
515 this.VisualLineStartIdx = new_title_start_idx;
523 if (this.MouseState.hoveredSide == 'scrollbar') {
526 this.MouseState.hovered = false;
527 this.MouseState.hoveredSide = undefined;
528 this.IsCanvasDirty = true;
529 this.MouseState.hoveredVisibleLineIndex = undefined;
530 this.MouseState.y = undefined;
531 this.MouseState.x = undefined;
539 if (this.MouseState.hoveredVisibleLineIndex >= 0 &&
540 this.MouseState.hoveredVisibleLineIndex < this.Intervals.length &&
541 this.MouseState.hoveredSide != undefined) {
542 const x = this.VisualLineIndexToDataLineIndex(this.MouseState.hoveredVisibleLineIndex);
544 const line = this.Intervals[x[0]];
545 if (this.MouseState.hoveredSide == 'left') {
547 if (line[i][1] <= this.LowerBoundTime) {
548 this.BeginWarpToRequestAnimation(line[i]);
553 } else if (this.MouseState.hoveredSide == 'right') {
555 if (line[i][0] >= this.UpperBoundTime) {
557 this.BeginWarpToRequestAnimation(line[i]);
564 let tx = this.MouseXToTimestamp(this.MouseState.x);
565 let t0 = Math.min(this.HighlightedRegion.t0, this.HighlightedRegion.t1),
566 t1 = Math.max(this.HighlightedRegion.t0, this.HighlightedRegion.t1);
567 if (this.MouseState.x > LEFT_MARGIN) {
570 if (this.MouseState.hoveredSide == "top_horizontal_scrollbar" ||
571 this.MouseState.hoveredSide == "bottom_horizontal_scrollbar") {
572 this.MouseState.pressed = true;
573 this.MouseState.begin_drag_x = this.MouseState.x;
574 this.MouseState.begin_LowerBoundTime = this.LowerBoundTime;
575 this.MouseState.begin_UpperBoundTime = this.UpperBoundTime;
578 this.BeginSetBoundaryAnimation(t0, t1);
579 this.Unhighlight();
580 this.IsCanvasDirty = true;
582 this.linked_views.forEach(function(v) {
588 this.MouseState.hoveredSide = 'timeline';
589 this.MouseState.pressed = true;
590 this.HighlightedRegion.t0 = this.MouseXToTimestamp(this.MouseState.x);
591 this.HighlightedRegion.t1 = this.HighlightedRegion.t0;
592 this.IsCanvasDirty = true;
594 } else if (this.MouseState.x < SCROLL_BAR_WIDTH) { // Todo: draagging the scroll bar
596 if (this.MouseState.y >= this.ScrollBarState.y0 - THRESH &&
597 this.MouseState.y <= this.ScrollBarState.y1 + THRESH) {
598 this.MouseState.pressed = true;
599 this.MouseState.drag_begin_y = this.MouseState.y;
600 this.MouseState.drag_begin_title_start_idx = this.VisualLineStartIdx;
601 this.MouseState.hoveredSide = 'scrollbar';
606 if (this.MouseState.x < LEFT_MARGIN &&
607 this.MouseState.hoveredVisibleLineIndex != undefined) {
608 …const x = this.VisualLineIndexToDataLineIndex(this.VisualLineStartIdx + this.MouseState.hoveredVis…
611 if (this.Titles[tidx] != undefined && this.Titles[tidx].header == true) {
614 … this.HeaderCollapsed[this.Titles[tidx].title] = !(this.HeaderCollapsed[this.Titles[tidx].title]);
623 this.MouseState.EndDragScrollBar();
624 this.MouseState.pressed = false;
625 this.IsCanvasDirty = true;
626 this.UnhighlightIfEmpty();
627 this.IsHighlightDirty = true;
628 this.MouseState.hoveredSide = undefined;
635 if (this.HighlightedRegion.t0 == this.HighlightedRegion.t1) {
636 this.Unhighlight();
637 this.IsCanvasDirty = true;
645 const v = this;
648 if (this.MouseState.y > 0 && this.MouseState.y < TOP_HORIZONTAL_SCROLLBAR_HEIGHT)
650 if (this.MouseState.y > this.Canvas.height - BOTTOM_HORIZONTAL_SCROLLBAR_HEIGHT &&
651 this.MouseState.y < this.Canvas.height)
672 this.VisualLineStartIdx += delta;
673 if (this.VisualLineStartIdx < 0) {
674 this.VisualLineStartIdx = 0;
675 } else if (this.VisualLineStartIdx >= this.TotalVisualHeight()) {
676 this.VisualLineStartIdx = this.TotalVisualHeight() - 1;
680 // This function is called in Render to draw a line of Intervals.
706 if (this.IsHighlighted()) {
714 if (ub < this.LowerBoundTime) {
718 if (lb > this.UpperBoundTime) {
723 if (ub == undefined && lb < this.UpperBoundTime) {
729 lb, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
730 this.UpperBoundTime),
732 ub, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
733 this.UpperBoundTime);
754 [this.MouseState.x, this.MouseState.x]) &&
756 [dy0, dy1], [this.MouseState.y, this.MouseState.y])) {
767 // If this request is taking too long/is quick enough, use red/green
768 let entry = HistogramThresholds[this.Titles[data_line_idx].title];
801 // This keeps track of the current "cluster" of requests
803 // This can greatly reduce overdraw and keep render time under
822 this.numVisibleRequests++;
824 // This entry has only a beginning and not an end
839 // Affects whether this req will be reflected in the aggregate info
852 if (GetHistoryHistogram()[this.Titles[data_line_idx].title] != undefined) {
853 let histogramEntry = GetHistoryHistogram()[this.Titles[data_line_idx].title];
861 if (this.IpmiVizHistHighlighted[this.Titles[data_line_idx].title] == undefined) {
862 this.IpmiVizHistHighlighted[this.Titles[data_line_idx].title] = new Set();
864 let entry = this.IpmiVizHistHighlighted[this.Titles[data_line_idx].title];
894 if (this.HeaderCollapsed[header.title] == false) { // Expanded
964 if (this.IsHighlighted()) {
971 if (ub < this.LowerBoundTime) continue;
972 if (lb > this.UpperBoundTime) continue;
977 lb, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
978 this.UpperBoundTime),
980 ub, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
981 this.UpperBoundTime);
986 // Draw this interval
1023 if (this.Canvas == undefined) return;
1027 const extent = this.UpperBoundTime - this.LowerBoundTime;
1036 let dx = this.CurrDeltaX;
1038 if (this.CurrShiftFlag) dx *= 5;
1039 this.LowerBoundTime += dx * extent;
1040 this.UpperBoundTime += dx * extent;
1041 this.IsCanvasDirty = true;
1049 let dz = this.CurrDeltaZoom;
1050 this.Zoom(dz);
1051 this.UpdateAnimation();
1053 this.LastTimeLowerBound = this.LowerBoundTime;
1054 this.LastTimeUpperBound = this.UpperBoundTime;
1056 if (this.IsCanvasDirty) {
1057 this.IsCanvasDirty = false;
1065 if (this.IsHighlighted()) {
1066 t0 = Math.min(this.HighlightedRegion.t0, this.HighlightedRegion.t1);
1067 t1 = Math.max(this.HighlightedRegion.t0, this.HighlightedRegion.t1);
1070 this.IpmiVizHistHighlighted = {};
1072 const width = this.Canvas.width;
1073 const height = this.Canvas.height;
1084 if (this.MouseState.hoveredVisibleLineIndex != undefined) {
1085 const hv_lidx = this.MouseState.hoveredVisibleLineIndex + this.VisualLineStartIdx;
1087 hv_lidx < this.Titles.length) {
1089 let dy = YBEGIN + LINE_SPACING * this.MouseState.hoveredVisibleLineIndex -
1098 if (this.MouseState.hoveredSide == "top_horizontal_scrollbar") {
1100 } else if (this.MouseState.hoveredSide == "bottom_horizontal_scrollbar") {
1109 '' + this.LowerBoundTime.toFixed(toFixedPrecision) + 's',
1113 '' + this.UpperBoundTime.toFixed(toFixedPrecision) + 's',
1119 '' + this.LowerBoundTime.toFixed(toFixedPrecision) + 's',
1123 '' + this.UpperBoundTime.toFixed(toFixedPrecision) + 's',
1142 if (this.GroupByStr.length > 0) {
1143 columnTitle = this.GroupByStr;
1149 let lines = this.ToLines(columnTitle, this.TitleDispLengthLimit)
1155 if (this.IsTimeDistributionEnabled) {
1168 if (this.IsHighlighted()) {
1186 const BreakDrawLimit = 1000; // Only draw up to this many grid lines
1190 breakWidths[bidx] > this.UpperBoundTime - this.LowerBoundTime) {
1198 while (t2 + breakWidths[bidx] < this.LowerBoundTime) {
1201 if (t2 + breakWidths[bidx] >= this.LowerBoundTime &&
1202 t2 + breakWidths[bidx] <= this.UpperBoundTime) {
1209 for (; t2 < this.UpperBoundTime; t2 += breakWidth) {
1210 if (t2 > this.LowerBoundTime) {
1213 t2, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
1214 this.UpperBoundTime);
1241 if (this.IsHighlighted()) isAggregateSelection = true;
1247 let title_start_idx = this.VisualLineStartIdx, title_end_idx = title_start_idx;
1249 const tvh = this.TotalVisualHeight();
1251 // This is used to handle Intervals that have overlapping entries
1252 let last_data_line_idx = -999;//this.VisualLineIndexToDataLineIndex(this.VisualLineStartIdx);
1256 let j0 = this.VisualLineStartIdx;
1257 while (j0 > 0 && this.VisualLineIndexToDataLineIndex(j0)[1] > 0) { j0--; }
1271 if (j >= this.VisualLineStartIdx) { should_render = true; }
1274 const tmp = this.VisualLineIndexToDataLineIndex(j);
1280 … (j == this.VisualLineStartIdx); // The first visible line should always be drawn
1287 if (NetFnCmdToDescription[this.Titles[data_line_idx].title] != undefined) {
1288 let desc = ' (' + NetFnCmdToDescription[this.Titles[data_line_idx].title] + ')';
1296 if (this.IsTimeDistributionEnabled == true) {
1297 const t = this.Titles[data_line_idx].title;
1299 if (this.IpmiVizHistogramImageData[t] == undefined) {
1301 this.IpmiVizHistogramImageData[t] = tmp[0];
1304 this.RenderHistogram(ctx, t, HISTOGRAM_X, y);
1311 if (this.Titles[data_line_idx].header == false) {
1316 let tj_draw = this.Titles[data_line_idx].title;
1317 const title_disp_length_limit = this.GetTitleWidthLimit();
1334 const intervals_idxes = this.Titles[data_line_idx].intervals_idxes;
1338 intervals_j = this.Intervals[intervals_idxes[0]];
1342 // The drawing method depends on whether this data line is a header or not
1359 if (this.Titles[data_line_idx].header == false) {
1361 this.do_RenderIntervals(ctx, intervals_j, j, dy0, dy1,
1365 this.do_RenderHeader(ctx, this.Titles[data_line_idx],
1385 if (this.MouseState.hoveredVisibleLineIndex + this.VisualLineStartIdx == data_line_idx &&
1386 this.MouseState.hoveredSide == 'left') {
1405 if (this.MouseState.hoveredVisibleLineIndex + this.VisualLineStartIdx == j &&
1406 this.MouseState.hoveredSide == 'right') {
1449 let nbreaks = this.TotalVisualHeight();
1458 if (this.MouseState.IsDraggingScrollBar()) {
1461 this.ScrollBarState.highlighted = highlighted;
1465 if (!this.MouseState.IsDraggingScrollBar()) {
1466 this.ScrollBarState.y0 = y0;
1467 this.ScrollBarState.y1 = y1;
1473 ctx.fillStyle = this.AccentColor;
1478 this.ScrollBarState.y0 = undefined;
1479 this.ScrollBarState.y1 = undefined;
1480 this.ScrollBarState.highlighted = false;
1485 if (this.IsTimeDistributionEnabled) {
1487 for (let j = this.TitleStartIdx; j < this.Intervals.length; j++) {
1488 if (this.IpmiVizHistHighlighted[this.Titles[data_line_idx].title] != undefined) {
1489 let entry = HistogramThresholds[this.Titles[data_line_idx].title];
1491 Array.from(this.IpmiVizHistHighlighted[this.Titles[data_line_idx].title]);
1527 if (this.IsHighlighted()) {
1541 for (let j = this.VisualLineStartIdx, i = 0;
1543 const x = this.VisualLineIndexToDataLineIndex(j);
1578 // This does not get displayed correctly, so disabling for now
1590 if (this.IsHighlightDirty) {
1591 this.HighlightedRequests = currHighlightedReqs;
1592 this.IsHighlightDirty = false;
1594 // Todo: This callback will be different for the DBus pane
1599 if (this.IsHighlighted()) {
1602 t0, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
1603 this.UpperBoundTime);
1605 t1, LEFT_MARGIN, RIGHT_MARGIN, this.LowerBoundTime,
1606 this.UpperBoundTime);
1629 // This was calculated earlier
1639 if (this.MouseState.hoveredSide == "top_horizontal_scrollbar" ||
1640 this.MouseState.hoveredSide == "bottom_horizontal_scrollbar") {
1643 this.linked_views.forEach((v) => {
1650 if (this.MouseState.hovered == true &&
1651 this.MouseState.hoveredSide == undefined &&
1656 if (this.IsHighlighted()) {
1657 ctx.moveTo(this.MouseState.x, 0);
1658 ctx.lineTo(this.MouseState.x, height);
1660 ctx.moveTo(this.MouseState.x, LINE_SPACING * 2);
1661 ctx.lineTo(this.MouseState.x, height - LINE_SPACING * 2);
1665 if (this.IsHighlighted() == false) {
1666 let dispWidth = this.MouseState.x - LEFT_MARGIN;
1668 this.MouseXToTimestamp(this.MouseState.x)
1675 ctx.fillText(label, this.MouseState.x, height - LINE_SPACING);
1677 ctx.fillText(label, this.MouseState.x, LINE_SPACING + TEXT_Y0);
1683 this.RenderToolTip(
1693 if (this.HighlightedRegion.t0 == -999 || this.HighlightedRegion.t1 == -999) { return ret; }
1694 const lb = Math.min(this.HighlightedRegion.t0, this.HighlightedRegion.t1);
1695 const ub = Math.max(this.HighlightedRegion.t0, this.HighlightedRegion.t1);
1696 for (let i=0; i<this.Titles.length; i++) {
1697 const title = this.Titles[i];
1702 const intervals_i = this.Intervals[interval_idx];
1764 let dy = this.MouseState.y + DELTA_Y;
1768 let dx = this.MouseState.x;
1837 let dy = this.MouseState.y + DELTA_Y;
1841 let dx = this.MouseState.x;
1885 let dy = this.MouseState.y + DELTA_Y;
1889 let dx = this.MouseState.x;