diff options
Diffstat (limited to 'js/logger.js')
-rw-r--r-- | js/logger.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/js/logger.js b/js/logger.js new file mode 100644 index 0000000..896fbdf --- /dev/null +++ b/js/logger.js @@ -0,0 +1,93 @@ +/******************************************************************************* + + ηMatrix - a browser extension to black/white list requests. + Copyright (C) 2015-2019 Raymond Hill + Copyright (C) 2019 Alessio Vanni + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + uMatrix Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +µMatrix.logger = (function() { + + var LogEntry = function(args) { + this.init(args); + }; + + LogEntry.prototype.init = function(args) { + this.tstamp = Date.now(); + this.tab = args[0] || ''; + this.cat = args[1] || ''; + this.d0 = args[2]; + this.d1 = args[3]; + this.d2 = args[4]; + this.d3 = args[5]; + }; + + var buffer = null; + var lastReadTime = 0; + var writePtr = 0; + + // After 60 seconds without being read, a buffer will be considered + // unused, and thus removed from memory. + var logBufferObsoleteAfter = 30 * 1000; + + var janitor = function() { + if ( + buffer !== null && + lastReadTime < (Date.now() - logBufferObsoleteAfter) + ) { + buffer = null; + writePtr = 0; + api.ownerId = undefined; + } + if ( buffer !== null ) { + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + }; + + var api = { + ownerId: undefined, + writeOne: function() { + if ( buffer === null ) { return; } + if ( writePtr === buffer.length ) { + buffer.push(new LogEntry(arguments)); + } else { + buffer[writePtr].init(arguments); + } + writePtr += 1; + }, + readAll: function(ownerId) { + this.ownerId = ownerId; + if ( buffer === null ) { + buffer = []; + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + var out = buffer.slice(0, writePtr); + writePtr = 0; + lastReadTime = Date.now(); + return out; + } + }; + + return api; +})(); + +/******************************************************************************/ |