Index: chrome/browser/resources/gpu/util.js |
=================================================================== |
--- chrome/browser/resources/gpu/util.js (revision 0) |
+++ chrome/browser/resources/gpu/util.js (revision 0) |
@@ -0,0 +1,250 @@ |
+// Copyright (c) 2010 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. |
+ |
+/** |
+* Helper that binds the |this| object to a method to create a callback. |
+*/ |
+Function.prototype.bind = function(thisObj) { |
+ var func = this; |
+ var args = Array.prototype.slice.call(arguments, 1); |
+ return function() { |
+ return func.apply(thisObj, |
+ args.concat(Array.prototype.slice.call(arguments, 0))) |
+ }; |
+}; |
+ |
+/** |
+ * Inherit the prototype methods from one constructor into another. |
+ */ |
+function inherits(childCtor, parentCtor) { |
+ function tempCtor() {}; |
+ tempCtor.prototype = parentCtor.prototype; |
+ childCtor.superClass_ = parentCtor.prototype; |
+ childCtor.prototype = new tempCtor(); |
+ childCtor.prototype.constructor = childCtor; |
+}; |
+ |
+/** |
+ * Sets the width (in pixels) on a DOM node. |
+ */ |
+function setNodeWidth(node, widthPx) { |
+ node.style.width = widthPx.toFixed(0) + "px"; |
+} |
+ |
+/** |
+ * Sets the height (in pixels) on a DOM node. |
+ */ |
+function setNodeHeight(node, heightPx) { |
+ node.style.height = heightPx.toFixed(0) + "px"; |
+} |
+ |
+/** |
+ * Sets the position and size of a DOM node (in pixels). |
+ */ |
+function setNodePosition(node, leftPx, topPx, widthPx, heightPx) { |
+ node.style.left = leftPx.toFixed(0) + "px"; |
+ node.style.top = topPx.toFixed(0) + "px"; |
+ setNodeWidth(node, widthPx); |
+ setNodeHeight(node, heightPx); |
+} |
+ |
+/** |
+ * Sets the visibility for a DOM node. |
+ */ |
+function setNodeDisplay(node, isVisible) { |
+ node.style.display = isVisible ? '' : 'none'; |
+} |
+ |
+/** |
+ * Adds a node to |parentNode|, of type |tagName|. |
+ */ |
+function addNode(parentNode, tagName) { |
+ var elem = parentNode.ownerDocument.createElement(tagName); |
+ parentNode.appendChild(elem); |
+ return elem; |
+} |
+ |
+/** |
+ * Adds |text| to node |parentNode|. |
+ */ |
+function addTextNode(parentNode, text) { |
+ var textNode = parentNode.ownerDocument.createTextNode(text); |
+ parentNode.appendChild(textNode); |
+ return textNode; |
+} |
+ |
+/** |
+ * Adds a node to |parentNode|, of type |tagName|. Then adds |
+ * |text| to the new node. |
+ */ |
+function addNodeWithText(parentNode, tagName, text) { |
+ var elem = parentNode.ownerDocument.createElement(tagName); |
+ parentNode.appendChild(elem); |
+ addTextNode(elem, text); |
+ return elem; |
+} |
+ |
+/** |
+ * Adds or removes a CSS class to |node|. |
+ */ |
+function changeClassName(node, classNameToAddOrRemove, isAdd) { |
+ // Multiple classes can be separated by spaces. |
+ var currentNames = node.className.split(" "); |
+ |
+ if (isAdd) { |
+ if (!(classNameToAddOrRemove in currentNames)) { |
+ currentNames.push(classNameToAddOrRemove); |
+ } |
+ } else { |
+ for (var i = 0; i < currentNames.length; ++i) { |
+ if (currentNames[i] == classNameToAddOrRemove) { |
+ currentNames.splice(i, 1); |
+ break; |
+ } |
+ } |
+ } |
+ |
+ node.className = currentNames.join(" "); |
+} |
+ |
+function getKeyWithValue(map, value) { |
+ for (key in map) { |
+ if (map[key] == value) |
+ return key; |
+ } |
+ return '?'; |
+} |
+ |
+/** |
+ * Builds a string by repeating |str| |count| times. |
+ */ |
+function makeRepeatedString(str, count) { |
+ var out = []; |
+ for (var i = 0; i < count; ++i) |
+ out.push(str); |
+ return out.join(''); |
+} |
+ |
+/** |
+ * TablePrinter is a helper to format a table as ascii art. |
+ * |
+ * Usage: call addRow() and addCell() repeatedly to specify the data. Ones |
+ * all the fields have been inputted, call toText() to format it as text. |
+ */ |
+function TablePrinter() { |
+ this.rows_ = []; |
+} |
+ |
+function TablePrinterCell(value) { |
+ this.text = '' + value; |
+ this.alignRight = false; |
+ this.allowOverflow = false; |
+} |
+ |
+/** |
+ * Starts a new row. |
+ */ |
+TablePrinter.prototype.addRow = function() { |
+ this.rows_.push([]); |
+}; |
+ |
+/** |
+ * Adds a column to the current row, setting its value to cellText. |
+ * |
+ * @returns {!TablePrinterCell} the cell that was added. |
+ */ |
+TablePrinter.prototype.addCell = function(cellText) { |
+ var r = this.rows_[this.rows_.length - 1]; |
+ var cell = new TablePrinterCell(cellText); |
+ r.push(cell); |
+ return cell; |
+}; |
+ |
+/** |
+ * Returns the maximum number of columns this table contains. |
+ */ |
+TablePrinter.prototype.getNumColumns = function() { |
+ var numColumns = 0; |
+ for (var i = 0; i < this.rows_.length; ++i) { |
+ numColumns = Math.max(numColumns, this.rows_[i].length); |
+ } |
+ return numColumns; |
+} |
+ |
+/** |
+ * Returns the cell at position (rowIndex, columnIndex), or null if there is |
+ * no such cell. |
+ */ |
+TablePrinter.prototype.getCell_ = function(rowIndex, columnIndex) { |
+ if (rowIndex >= this.rows_.length) |
+ return null; |
+ var row = this.rows_[rowIndex]; |
+ if (columnIndex >= row.length) |
+ return null; |
+ return row[columnIndex]; |
+}; |
+ |
+/** |
+ * Returns a formatted text representation of the table data. |
+ */ |
+TablePrinter.prototype.toText = function() { |
+ var numRows = this.rows_.length; |
+ var numColumns = this.getNumColumns(); |
+ |
+ // Figure out the maximum width of each column. |
+ var columnWidths = []; |
+ columnWidths.length = numColumns; |
+ for (var i = 0; i < numColumns; ++i) |
+ columnWidths[i] = 0; |
+ |
+ for (var c = 0; c < numColumns; ++c) { |
+ for (var r = 0; r < numRows; ++r) { |
+ var cell = this.getCell_(r, c); |
+ if (cell && !cell.allowOverflow) { |
+ columnWidths[c] = Math.max(columnWidths[c], cell.text.length); |
+ } |
+ } |
+ } |
+ |
+ // Print each row. |
+ var out = []; |
+ for (var r = 0; r < numRows; ++r) { |
+ for (var c = 0; c < numColumns; ++c) { |
+ var cell = this.getCell_(r, c); |
+ if (cell) { |
+ // Padd the cell with spaces to make it fit the maximum column width. |
+ var padding = columnWidths[c] - cell.text.length; |
+ var paddingStr = makeRepeatedString(' ', padding); |
+ |
+ if (cell.alignRight) { |
+ out.push(paddingStr); |
+ out.push(cell.text); |
+ } else { |
+ out.push(cell.text); |
+ out.push(paddingStr); |
+ } |
+ } |
+ } |
+ out.push('\n'); |
+ } |
+ |
+ return out.join(''); |
+}; |
+ |
+/** |
+ * The browser gives us times in terms of "time ticks" in milliseconds. |
+ * This function converts the tick count to a Date() object. |
+ * |
+ * @param {String} timeTicks. |
+ * @returns {Date} The time that |timeTicks| represents. |
+ */ |
+function convertTimeTicksToDate(timeTicks) { |
+ // Note that the subtraction by 0 is to cast to a number (probably a float |
+ // since the numbers are big). |
+ var timeStampMs = (this.timeTickOffset_ - 0) + (timeTicks - 0); |
+ var d = new Date(); |
+ d.setTime(timeStampMs); |
+ return d; |
+}; |
+ |
Property changes on: chrome\browser\resources\gpu\util.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |