Index: netlog_viewer/time_util.js |
diff --git a/netlog_viewer/time_util.js b/netlog_viewer/time_util.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c5907ffe50ad380393cca209116bef161410e27c |
--- /dev/null |
+++ b/netlog_viewer/time_util.js |
@@ -0,0 +1,174 @@ |
+// Copyright (c) 2012 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. |
+ |
+var timeutil = (function() { |
+ 'use strict'; |
+ |
+ /** |
+ * Offset needed to convert event times to Date objects. |
+ * Updated whenever constants are loaded. |
+ */ |
+ var timeTickOffset = 0; |
+ |
+ /** |
+ * The time of the first observed event. Used for more friendly time display. |
+ */ |
+ var baseTime = 0; |
+ |
+ /** |
+ * Sets the offset used to convert tick counts to dates. |
+ */ |
+ function setTimeTickOffset(offset) { |
+ // Note that the subtraction by 0 is to cast to a number (probably a float |
+ // since the numbers are big). |
+ timeTickOffset = offset - 0; |
+ } |
+ |
+ /** |
+ * The browser gives us times in terms of "time ticks" in milliseconds. |
+ * This function converts the tick count to a Javascript "time", which is |
+ * the UTC time in milliseconds. |
+ * |
+ * @param {string} timeTicks A time represented in "time ticks". |
+ * @return {number} The Javascript time that |timeTicks| represents. |
+ */ |
+ function convertTimeTicksToTime(timeTicks) { |
+ return timeTickOffset + (timeTicks - 0); |
+ } |
+ |
+ /** |
+ * 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 A time represented in "time ticks". |
+ * @return {Date} The time that |timeTicks| represents. |
+ */ |
+ function convertTimeTicksToDate(timeTicks) { |
+ return new Date(convertTimeTicksToTime(timeTicks)); |
+ } |
+ |
+ /** |
+ * Returns the current time. |
+ * |
+ * @return {number} Milliseconds since the Unix epoch. |
+ */ |
+ function getCurrentTime() { |
+ return Date.now(); |
+ } |
+ |
+ /** |
+ * Returns the curent time in time ticks. |
+ * |
+ * @return {number} Current time, in TimeTicks. |
+ */ |
+ function getCurrentTimeTicks() { |
+ return getCurrentTime() - timeTickOffset; |
+ } |
+ |
+ /** |
+ * Sets the base time more friendly display. |
+ * |
+ * @param {string} firstEventTime The time of the first event, as a Javascript |
+ * numeric time. Other times can be displayed relative to this time. |
+ */ |
+ function setBaseTime(firstEventTime) { |
+ baseTime = firstEventTime; |
+ } |
+ |
+ /** |
+ * Sets the base time more friendly display. |
+ * |
+ * @return {number} Time set by setBaseTime, or 0 if no time has been set. |
+ */ |
+ function getBaseTime() { |
+ return baseTime; |
+ } |
+ |
+ /** |
+ * Clears the base time, so isBaseTimeSet() returns 0. |
+ */ |
+ function clearBaseTime() { |
+ baseTime = 0; |
+ } |
+ |
+ /** |
+ * Returns true if the base time has been initialized. |
+ * |
+ * @return {bool} True if the base time is set. |
+ */ |
+ function isBaseTimeSet() { |
+ return baseTime != 0; |
+ } |
+ |
+ /** |
+ * Takes in a "time ticks" and returns it as a time since the base time, in |
+ * milliseconds. |
+ * |
+ * @param {string} timeTicks A time represented in "time ticks". |
+ * @return {number} Milliseconds since the base time. |
+ */ |
+ function convertTimeTicksToRelativeTime(timeTicks) { |
+ return convertTimeTicksToTime(timeTicks) - baseTime; |
+ } |
+ |
+ /** |
+ * Adds an HTML representation of |date| to |parentNode|. |
+ * |
+ * @param {DomNode} parentNode The node that will contain the new node. |
+ * @param {Date} date The date to be displayed. |
+ * @return {DomNode} The new node containing the date/time. |
+ */ |
+ function addNodeWithDate(parentNode, date) { |
+ var span = addNodeWithText(parentNode, 'span', dateToString(date)); |
+ span.title = 't=' + date.getTime(); |
+ return span; |
+ } |
+ |
+ /** |
+ * Returns a string representation of |date|. |
+ * |
+ * @param {Date} date The date to be represented. |
+ * @return {string} A string representation of |date|. |
+ */ |
+ function dateToString(date) { |
+ var dateStr = date.getFullYear() + '-' + |
+ zeroPad_(date.getMonth() + 1, 2) + '-' + |
+ zeroPad_(date.getDate(), 2); |
+ |
+ var timeStr = zeroPad_(date.getHours(), 2) + ':' + |
+ zeroPad_(date.getMinutes(), 2) + ':' + |
+ zeroPad_(date.getSeconds(), 2) + '.' + |
+ zeroPad_(date.getMilliseconds(), 3); |
+ |
+ return dateStr + ' ' + timeStr; |
+ } |
+ |
+ /** |
+ * Prefixes enough zeros to |num| so that it has length |len|. |
+ * @param {number} num The number to be padded. |
+ * @param {number} len The desired length of the returned string. |
+ * @return {string} The zero-padded representation of |num|. |
+ */ |
+ function zeroPad_(num, len) { |
+ var str = num + ''; |
+ while (str.length < len) |
+ str = '0' + str; |
+ return str; |
+ } |
+ |
+ return { |
+ setTimeTickOffset: setTimeTickOffset, |
+ convertTimeTicksToTime: convertTimeTicksToTime, |
+ convertTimeTicksToDate: convertTimeTicksToDate, |
+ getCurrentTime: getCurrentTime, |
+ getCurrentTimeTicks: getCurrentTimeTicks, |
+ setBaseTime: setBaseTime, |
+ getBaseTime: getBaseTime, |
+ clearBaseTime: clearBaseTime, |
+ isBaseTimeSet: isBaseTimeSet, |
+ convertTimeTicksToRelativeTime: convertTimeTicksToRelativeTime, |
+ addNodeWithDate: addNodeWithDate, |
+ dateToString: dateToString, |
+ }; |
+})(); |