mirror of
https://github.com/coder/code-server.git
synced 2026-05-05 12:05:18 +02:00
97 lines
2.4 KiB
JavaScript
97 lines
2.4 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
'use strict';
|
|
|
|
//@ts-check
|
|
|
|
function _factory(sharedObj) {
|
|
|
|
sharedObj.MonacoPerformanceMarks = sharedObj.MonacoPerformanceMarks || [];
|
|
|
|
const _dataLen = 2;
|
|
const _nativeMark = typeof performance === 'object' && typeof performance.mark === 'function' ? performance.mark.bind(performance) : () => { };
|
|
|
|
function importEntries(entries) {
|
|
sharedObj.MonacoPerformanceMarks.splice(0, 0, ...entries);
|
|
}
|
|
|
|
function exportEntries() {
|
|
return sharedObj.MonacoPerformanceMarks.slice(0);
|
|
}
|
|
|
|
function getEntries() {
|
|
const result = [];
|
|
const entries = sharedObj.MonacoPerformanceMarks;
|
|
for (let i = 0; i < entries.length; i += _dataLen) {
|
|
result.push({
|
|
name: entries[i],
|
|
startTime: entries[i + 1],
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function getDuration(from, to) {
|
|
const entries = sharedObj.MonacoPerformanceMarks;
|
|
let target = to;
|
|
let endIndex = 0;
|
|
for (let i = entries.length - _dataLen; i >= 0; i -= _dataLen) {
|
|
if (entries[i] === target) {
|
|
if (target === to) {
|
|
// found `to` (end of interval)
|
|
endIndex = i;
|
|
target = from;
|
|
} else {
|
|
// found `from` (start of interval)
|
|
return entries[endIndex + 1] - entries[i + 1];
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function mark(name) {
|
|
sharedObj.MonacoPerformanceMarks.push(name, Date.now());
|
|
_nativeMark(name);
|
|
}
|
|
|
|
const exports = {
|
|
mark: mark,
|
|
getEntries: getEntries,
|
|
getDuration: getDuration,
|
|
importEntries: importEntries,
|
|
exportEntries: exportEntries
|
|
};
|
|
|
|
return exports;
|
|
}
|
|
|
|
// This module can be loaded in an amd and commonjs-context.
|
|
// Because we want both instances to use the same perf-data
|
|
// we store them globally
|
|
|
|
// eslint-disable-next-line no-var
|
|
var sharedObj;
|
|
if (typeof global === 'object') {
|
|
// nodejs
|
|
sharedObj = global;
|
|
} else if (typeof self === 'object') {
|
|
// browser
|
|
sharedObj = self;
|
|
} else {
|
|
sharedObj = {};
|
|
}
|
|
|
|
if (typeof define === 'function') {
|
|
// amd
|
|
define([], function () { return _factory(sharedObj); });
|
|
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
|
// commonjs
|
|
module.exports = _factory(sharedObj);
|
|
} else {
|
|
sharedObj.perf = _factory(sharedObj);
|
|
}
|