aboutsummaryrefslogtreecommitdiffstats
path: root/js/logger.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/logger.js')
-rw-r--r--js/logger.js93
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;
+})();
+
+/******************************************************************************/