Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1595)

Unified Diff: Source/devtools/front_end/FlameChart.js

Issue 214633002: FlameChart: vertical scroll implementation (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/flameChart.css » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/FlameChart.js
diff --git a/Source/devtools/front_end/FlameChart.js b/Source/devtools/front_end/FlameChart.js
index b9eca50502bc01fe764d6458c9e95a1b58f18d8c..41b89fea9b1f78aa4abb3743af24e3cc80ceaa7e 100644
--- a/Source/devtools/front_end/FlameChart.js
+++ b/Source/devtools/front_end/FlameChart.js
@@ -43,7 +43,7 @@ WebInspector.FlameChartDelegate.prototype = {
/**
* @constructor
- * @extends {WebInspector.VBox}
+ * @extends {WebInspector.HBox}
* @param {!WebInspector.FlameChartDataProvider} dataProvider
* @param {!WebInspector.FlameChartDelegate} flameChartDelegate
* @param {boolean} isTopDown
@@ -51,19 +51,21 @@ WebInspector.FlameChartDelegate.prototype = {
*/
WebInspector.FlameChart = function(dataProvider, flameChartDelegate, isTopDown, timeBasedWindow)
{
- WebInspector.VBox.call(this);
+ WebInspector.HBox.call(this);
this.element.classList.add("flame-chart-main-pane");
this._flameChartDelegate = flameChartDelegate;
this._isTopDown = isTopDown;
this._timeBasedWindow = timeBasedWindow;
this._calculator = new WebInspector.FlameChart.Calculator();
-
this._canvas = this.element.createChild("canvas");
this._canvas.addEventListener("mousemove", this._onMouseMove.bind(this));
this._canvas.addEventListener("mousewheel", this._onMouseWheel.bind(this), false);
this._canvas.addEventListener("click", this._onClick.bind(this), false);
WebInspector.installDragHandle(this._canvas, this._startCanvasDragging.bind(this), this._canvasDragging.bind(this), this._endCanvasDragging.bind(this), "move", null);
+ this._vScrollElement = this.element.createChild("div", "flame-chart-v-scroll");
+ this._vScrollContent = this._vScrollElement.createChild("div");
+ this._vScrollElement.addEventListener("scroll", this._scheduleUpdate.bind(this), false);
this._entryInfo = this.element.createChild("div", "profile-entry-info");
this._highlightElement = this.element.createChild("div", "flame-chart-highlight-element");
@@ -437,11 +439,14 @@ WebInspector.FlameChart.prototype = {
var windowRight = this._timeWindowRight !== Infinity ? this._timeWindowRight : this._dataProvider.zeroTime() + this._dataProvider.totalTime();
if (e.wheelDeltaY) {
- const mouseWheelZoomSpeed = 1 / 120;
- var zoom = Math.pow(1.2, -e.wheelDeltaY * mouseWheelZoomSpeed) - 1;
- var cursorTime = this._cursorTime(e.offsetX);
- windowLeft += (windowLeft - cursorTime) * zoom;
- windowRight += (windowRight - cursorTime) * zoom;
+ if (e.altKey) {
+ const mouseWheelZoomSpeed = 1 / 120;
+ var zoom = Math.pow(1.2, -e.wheelDeltaY * mouseWheelZoomSpeed) - 1;
+ var cursorTime = this._cursorTime(e.offsetX);
+ windowLeft += (windowLeft - cursorTime) * zoom;
+ windowRight += (windowRight - cursorTime) * zoom;
+ } else
+ this._vScrollElement.scrollTop += -e.wheelDeltaY / 120 * this._offsetHeight / 8;
pfeldman 2014/03/27 12:48:04 += - ?
alph 2014/03/27 13:15:36 nit: perhaps move "e.wheelDeltaY / 120" out of the
} else {
var shift = e.wheelDeltaX * this._pixelToTime;
shift = Number.constrain(shift, this._zeroTime - windowLeft, this._totalTime + this._zeroTime - windowRight);
@@ -468,6 +473,7 @@ WebInspector.FlameChart.prototype = {
*/
_coordinatesToEntryIndex: function(x, y)
{
+ y += this._scrollTop;
pfeldman 2014/03/27 12:48:04 How does this work with the retina?
var timelineData = this._timelineData();
if (!timelineData)
return -1;
@@ -525,28 +531,30 @@ WebInspector.FlameChart.prototype = {
lastDrawOffset[i] = -1;
var barHeight = this._barHeight;
- this._baseHeight = this._isTopDown ? WebInspector.FlameChart.DividersBarHeight : height - barHeight;
var offsetToPosition = this._offsetToPosition.bind(this);
var textBaseHeight = this._baseHeight + barHeight - this._dataProvider.textBaseline();
var colorBuckets = {};
- var maxBarLevel = Math.min(this._dataProvider.maxStackDepth(), Math.ceil(height / barHeight));
+ var minVisibleBarLevel = Math.max(0, Math.floor((this._scrollTop - this._baseHeight) / barHeight));
+ var maxVisibleBarLevel = Math.min(this._dataProvider.maxStackDepth(), Math.ceil((height + this._scrollTop) / barHeight));
+ var visibleBarsCount = maxVisibleBarLevel - minVisibleBarLevel + 1;
+ context.translate(0, -this._scrollTop * ratio);
var levelsCompleted = 0;
var lastEntryOnLevelPainted = [];
- for (var i = 0; i < maxBarLevel; ++i)
+ for (var i = 0; i < visibleBarsCount; ++i)
lastEntryOnLevelPainted[i] = false;
- for (var entryIndex = 0; levelsCompleted < maxBarLevel && entryIndex < entryOffsets.length; ++entryIndex) {
+ for (var entryIndex = 0; levelsCompleted < visibleBarsCount && entryIndex < entryOffsets.length; ++entryIndex) {
// skip if it is not visible (top/bottom side)
var barLevel = entryLevels[entryIndex];
- if (barLevel > maxBarLevel || lastEntryOnLevelPainted[barLevel])
+ if (barLevel < minVisibleBarLevel || barLevel > maxVisibleBarLevel || lastEntryOnLevelPainted[barLevel - minVisibleBarLevel])
continue;
// stop if we reached right border in time (entries were ordered by start time).
var entryOffset = entryOffsets[entryIndex];
if (entryOffset > timeWindowRight) {
- lastEntryOnLevelPainted[barLevel] = true;
+ lastEntryOnLevelPainted[barLevel - minVisibleBarLevel] = true;
levelsCompleted++;
continue;
}
@@ -652,7 +660,7 @@ WebInspector.FlameChart.prototype = {
if (barRight === 0 || barX === this._canvas.width)
return;
var barWidth = Math.max(barRight - barX, this._minWidth);
- var barY = this._levelToHeight(timelineData.entryLevels[entryIndex]);
+ var barY = this._levelToHeight(timelineData.entryLevels[entryIndex]) - this._scrollTop;
var style = element.style;
style.left = barX + "px";
style.top = barY + "px";
@@ -756,11 +764,17 @@ WebInspector.FlameChart.prototype = {
this._timeToPixel = this._totalPixels / this._totalTime;
this._pixelToTime = this._totalTime / this._totalPixels;
this._paddingLeftTime = this._paddingLeft / this._timeToPixel;
+
+ this._baseHeight = this._isTopDown ? WebInspector.FlameChart.DividersBarHeight : this._offsetHeight - this._barHeight;
+
+ var totalHeight = this._levelToHeight(this._dataProvider.maxStackDepth());
+ this._vScrollContent.style.height = totalHeight + "px";
+ this._scrollTop = this._vScrollElement.scrollTop;
},
onResize: function()
{
- this._offsetWidth = this.element.offsetWidth;
+ this._offsetWidth = this.element.offsetWidth - this._vScrollElement.offsetWidth;
this._offsetHeight = this.element.offsetHeight;
this._canvas.style.width = this._offsetWidth + "px";
this._canvas.style.height = this._offsetHeight + "px";
@@ -793,5 +807,5 @@ WebInspector.FlameChart.prototype = {
this.update();
},
- __proto__: WebInspector.VBox.prototype
+ __proto__: WebInspector.HBox.prototype
}
« no previous file with comments | « no previous file | Source/devtools/front_end/flameChart.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698