Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,78 @@
/*global performance */
'use strict';
/**
* This module allows wrapping all the methods on an object to log their calls
* and their first argument. There is an option to try to log methods that take
* too long too, but it is very coarse. This is mostly useful when wanting to
* see a stream of calls in realtime in the log to try to figure out where a
* bug is happening. It should just be used in debugging and not used for code
* that is committed to the repo.
*/
define(function() {
return function debugTraceMethods(obj, moduleId, perfLogThreshold) {
// 16 ms threshold for 60 fps, set to 0 to just log all calls,
// without timings. Unless set to 0, log calls are batched
// and written to the console later, so they will not appear
// in the correct order as compared to console logs done outside
// this module. Plus they will appear out of order since the log
// call does not complete until after the wrapped function
// completes. So if other function calls complete inside that
// function, they will be logged before the containing function
// is logged.
perfLogThreshold = perfLogThreshold || 0;
var logQueue = [],
logTimeoutId = 0;
function logPerf() {
logQueue.forEach(function(msg) {
console.log(msg);
});
logQueue = [];
logTimeoutId = 0;
}
function queueLog(prop, time, arg0) {
var arg0Type = typeof arg0;
logQueue.push(moduleId + ': ' + prop +
(arg0Type === 'number' ||
arg0Type === 'boolean' ||
arg0Type === 'string' ?
': (' + arg0 + ')' : '') +
(perfLogThreshold === 0 ? '' : ': ' + time));
if (perfLogThreshold === 0) {
logPerf();
} else {
if (!logTimeoutId) {
logTimeoutId = setTimeout(logPerf, 2000);
}
}
}
function perfWrap(prop, fn) {
return function() {
var start = performance.now();
if (perfLogThreshold === 0) {
queueLog(prop, 0, arguments[0]);
}
var result = fn.apply(this, arguments);
var end = performance.now();
var time = end - start;
if (perfLogThreshold > 0 && time > perfLogThreshold) {
queueLog(prop, end - start, arguments[0]);
}
return result;
};
}
if (perfLogThreshold > -1) {
Object.keys(obj).forEach(function (prop) {
var proto = obj;
if (typeof proto[prop] === 'function') {
proto[prop] = perfWrap(prop, proto[prop]);
}
});
}
};
});