| // 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, |
| }; |
| })(); |