OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 var timeutil = (function() { |
| 6 'use strict'; |
| 7 |
| 8 /** |
| 9 * Offset needed to convert event times to Date objects. |
| 10 * Updated whenever constants are loaded. |
| 11 */ |
| 12 var timeTickOffset = 0; |
| 13 |
| 14 /** |
| 15 * The time of the first observed event. Used for more friendly time display. |
| 16 */ |
| 17 var baseTime = 0; |
| 18 |
| 19 /** |
| 20 * Sets the offset used to convert tick counts to dates. |
| 21 */ |
| 22 function setTimeTickOffset(offset) { |
| 23 // Note that the subtraction by 0 is to cast to a number (probably a float |
| 24 // since the numbers are big). |
| 25 timeTickOffset = offset - 0; |
| 26 } |
| 27 |
| 28 /** |
| 29 * The browser gives us times in terms of "time ticks" in milliseconds. |
| 30 * This function converts the tick count to a Javascript "time", which is |
| 31 * the UTC time in milliseconds. |
| 32 * |
| 33 * @param {string} timeTicks A time represented in "time ticks". |
| 34 * @return {number} The Javascript time that |timeTicks| represents. |
| 35 */ |
| 36 function convertTimeTicksToTime(timeTicks) { |
| 37 return timeTickOffset + (timeTicks - 0); |
| 38 } |
| 39 |
| 40 /** |
| 41 * The browser gives us times in terms of "time ticks" in milliseconds. |
| 42 * This function converts the tick count to a Date() object. |
| 43 * |
| 44 * @param {string} timeTicks A time represented in "time ticks". |
| 45 * @return {Date} The time that |timeTicks| represents. |
| 46 */ |
| 47 function convertTimeTicksToDate(timeTicks) { |
| 48 return new Date(convertTimeTicksToTime(timeTicks)); |
| 49 } |
| 50 |
| 51 /** |
| 52 * Returns the current time. |
| 53 * |
| 54 * @return {number} Milliseconds since the Unix epoch. |
| 55 */ |
| 56 function getCurrentTime() { |
| 57 return Date.now(); |
| 58 } |
| 59 |
| 60 /** |
| 61 * Returns the curent time in time ticks. |
| 62 * |
| 63 * @return {number} Current time, in TimeTicks. |
| 64 */ |
| 65 function getCurrentTimeTicks() { |
| 66 return getCurrentTime() - timeTickOffset; |
| 67 } |
| 68 |
| 69 /** |
| 70 * Sets the base time more friendly display. |
| 71 * |
| 72 * @param {string} firstEventTime The time of the first event, as a Javascript |
| 73 * numeric time. Other times can be displayed relative to this time. |
| 74 */ |
| 75 function setBaseTime(firstEventTime) { |
| 76 baseTime = firstEventTime; |
| 77 } |
| 78 |
| 79 /** |
| 80 * Sets the base time more friendly display. |
| 81 * |
| 82 * @return {number} Time set by setBaseTime, or 0 if no time has been set. |
| 83 */ |
| 84 function getBaseTime() { |
| 85 return baseTime; |
| 86 } |
| 87 |
| 88 /** |
| 89 * Clears the base time, so isBaseTimeSet() returns 0. |
| 90 */ |
| 91 function clearBaseTime() { |
| 92 baseTime = 0; |
| 93 } |
| 94 |
| 95 /** |
| 96 * Returns true if the base time has been initialized. |
| 97 * |
| 98 * @return {bool} True if the base time is set. |
| 99 */ |
| 100 function isBaseTimeSet() { |
| 101 return baseTime != 0; |
| 102 } |
| 103 |
| 104 /** |
| 105 * Takes in a "time ticks" and returns it as a time since the base time, in |
| 106 * milliseconds. |
| 107 * |
| 108 * @param {string} timeTicks A time represented in "time ticks". |
| 109 * @return {number} Milliseconds since the base time. |
| 110 */ |
| 111 function convertTimeTicksToRelativeTime(timeTicks) { |
| 112 return convertTimeTicksToTime(timeTicks) - baseTime; |
| 113 } |
| 114 |
| 115 /** |
| 116 * Adds an HTML representation of |date| to |parentNode|. |
| 117 * |
| 118 * @param {DomNode} parentNode The node that will contain the new node. |
| 119 * @param {Date} date The date to be displayed. |
| 120 * @return {DomNode} The new node containing the date/time. |
| 121 */ |
| 122 function addNodeWithDate(parentNode, date) { |
| 123 var span = addNodeWithText(parentNode, 'span', dateToString(date)); |
| 124 span.title = 't=' + date.getTime(); |
| 125 return span; |
| 126 } |
| 127 |
| 128 /** |
| 129 * Returns a string representation of |date|. |
| 130 * |
| 131 * @param {Date} date The date to be represented. |
| 132 * @return {string} A string representation of |date|. |
| 133 */ |
| 134 function dateToString(date) { |
| 135 var dateStr = date.getFullYear() + '-' + |
| 136 zeroPad_(date.getMonth() + 1, 2) + '-' + |
| 137 zeroPad_(date.getDate(), 2); |
| 138 |
| 139 var timeStr = zeroPad_(date.getHours(), 2) + ':' + |
| 140 zeroPad_(date.getMinutes(), 2) + ':' + |
| 141 zeroPad_(date.getSeconds(), 2) + '.' + |
| 142 zeroPad_(date.getMilliseconds(), 3); |
| 143 |
| 144 return dateStr + ' ' + timeStr; |
| 145 } |
| 146 |
| 147 /** |
| 148 * Prefixes enough zeros to |num| so that it has length |len|. |
| 149 * @param {number} num The number to be padded. |
| 150 * @param {number} len The desired length of the returned string. |
| 151 * @return {string} The zero-padded representation of |num|. |
| 152 */ |
| 153 function zeroPad_(num, len) { |
| 154 var str = num + ''; |
| 155 while (str.length < len) |
| 156 str = '0' + str; |
| 157 return str; |
| 158 } |
| 159 |
| 160 return { |
| 161 setTimeTickOffset: setTimeTickOffset, |
| 162 convertTimeTicksToTime: convertTimeTicksToTime, |
| 163 convertTimeTicksToDate: convertTimeTicksToDate, |
| 164 getCurrentTime: getCurrentTime, |
| 165 getCurrentTimeTicks: getCurrentTimeTicks, |
| 166 setBaseTime: setBaseTime, |
| 167 getBaseTime: getBaseTime, |
| 168 clearBaseTime: clearBaseTime, |
| 169 isBaseTimeSet: isBaseTimeSet, |
| 170 convertTimeTicksToRelativeTime: convertTimeTicksToRelativeTime, |
| 171 addNodeWithDate: addNodeWithDate, |
| 172 dateToString: dateToString, |
| 173 }; |
| 174 })(); |
OLD | NEW |