mirror of https://github.com/gorhill/uBlock.git
Add more benchmark tools to devtool page
This commit is contained in:
parent
9215fefab4
commit
80b66c849a
|
@ -29,6 +29,8 @@
|
||||||
<button id="snfe-todnr" type="button">SNFE: DNR<span class="hover"></span></button>
|
<button id="snfe-todnr" type="button">SNFE: DNR<span class="hover"></span></button>
|
||||||
<button id="snfe-benchmark" type="button" disabled>SNFE: Benchmark<span class="hover"></span></button>
|
<button id="snfe-benchmark" type="button" disabled>SNFE: Benchmark<span class="hover"></span></button>
|
||||||
<button id="cfe-dump" type="button">CFE: Dump<span class="hover"></span></button>
|
<button id="cfe-dump" type="button">CFE: Dump<span class="hover"></span></button>
|
||||||
|
<button id="cfe-benchmark" type="button">CFE: Benchmark<span class="hover"></span></button>
|
||||||
|
<button id="sfe-benchmark" type="button">SFE: Benchmark<span class="hover"></span></button>
|
||||||
<button id="purge-all-caches" type="button" data-i18n-title="3pPurgeAll"><span data-i18n="3pPurgeAll">_</span><span class="hover"></span></button>
|
<button id="purge-all-caches" type="button" data-i18n-title="3pPurgeAll"><span data-i18n="3pPurgeAll">_</span><span class="hover"></span></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="console" class="codeMirrorContainer"></div>
|
<div id="console" class="codeMirrorContainer"></div>
|
||||||
|
|
|
@ -74,8 +74,8 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
datasetPromise = undefined;
|
datasetPromise = undefined;
|
||||||
});
|
});
|
||||||
|
|
||||||
return function() {
|
return async function() {
|
||||||
ttlTimer.offon({ min: 5 });
|
ttlTimer.offon({ min: 2 });
|
||||||
|
|
||||||
if ( datasetPromise !== undefined ) {
|
if ( datasetPromise !== undefined ) {
|
||||||
return datasetPromise;
|
return datasetPromise;
|
||||||
|
@ -84,7 +84,7 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
const datasetURL = µb.hiddenSettings.benchmarkDatasetURL;
|
const datasetURL = µb.hiddenSettings.benchmarkDatasetURL;
|
||||||
if ( datasetURL === 'unset' ) {
|
if ( datasetURL === 'unset' ) {
|
||||||
console.info(`No benchmark dataset available.`);
|
console.info(`No benchmark dataset available.`);
|
||||||
return Promise.resolve();
|
return;
|
||||||
}
|
}
|
||||||
console.info(`Loading benchmark dataset...`);
|
console.info(`Loading benchmark dataset...`);
|
||||||
datasetPromise = io.fetchText(datasetURL).then(details => {
|
datasetPromise = io.fetchText(datasetURL).then(details => {
|
||||||
|
@ -136,7 +136,7 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
|
|
||||||
// action: 1=test
|
// action: 1=test
|
||||||
|
|
||||||
µb.benchmarkStaticNetFiltering = async function(options = {}) {
|
export async function benchmarkStaticNetFiltering(options = {}) {
|
||||||
const { target, redirectEngine } = options;
|
const { target, redirectEngine } = options;
|
||||||
|
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
|
@ -231,11 +231,11 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
const s = output.join('\n');
|
const s = output.join('\n');
|
||||||
console.info(s);
|
console.info(s);
|
||||||
return s;
|
return s;
|
||||||
};
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µb.tokenHistograms = async function() {
|
export async function tokenHistogramsfunction() {
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
||||||
console.info('No requests found to benchmark');
|
console.info('No requests found to benchmark');
|
||||||
|
@ -272,11 +272,11 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
const tophits = Array.from(hitTokenMap).sort(customSort).slice(0, 100);
|
const tophits = Array.from(hitTokenMap).sort(customSort).slice(0, 100);
|
||||||
console.info('Misses:', JSON.stringify(topmisses));
|
console.info('Misses:', JSON.stringify(topmisses));
|
||||||
console.info('Hits:', JSON.stringify(tophits));
|
console.info('Hits:', JSON.stringify(tophits));
|
||||||
};
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µb.benchmarkDynamicNetFiltering = async function() {
|
export async function benchmarkDynamicNetFiltering() {
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
||||||
console.info('No requests found to benchmark');
|
console.info('No requests found to benchmark');
|
||||||
|
@ -299,17 +299,19 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
const dur = t1 - t0;
|
const dur = t1 - t0;
|
||||||
console.info(`Evaluated ${requests.length} requests in ${dur.toFixed(0)} ms`);
|
console.info(`Evaluated ${requests.length} requests in ${dur.toFixed(0)} ms`);
|
||||||
console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
|
console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
|
||||||
};
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µb.benchmarkCosmeticFiltering = async function() {
|
export async function benchmarkCosmeticFiltering() {
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
||||||
console.info('No requests found to benchmark');
|
console.info('No requests found to benchmark');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.info('Benchmarking cosmeticFilteringEngine.retrieveSpecificSelectors()...');
|
const output = [
|
||||||
|
'Benchmarking cosmeticFilteringEngine.retrieveSpecificSelectors()...',
|
||||||
|
];
|
||||||
const details = {
|
const details = {
|
||||||
tabId: undefined,
|
tabId: undefined,
|
||||||
frameId: undefined,
|
frameId: undefined,
|
||||||
|
@ -320,6 +322,7 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
const options = {
|
const options = {
|
||||||
noSpecificCosmeticFiltering: false,
|
noSpecificCosmeticFiltering: false,
|
||||||
noGenericCosmeticFiltering: false,
|
noGenericCosmeticFiltering: false,
|
||||||
|
dontInject: true,
|
||||||
};
|
};
|
||||||
let count = 0;
|
let count = 0;
|
||||||
const t0 = performance.now();
|
const t0 = performance.now();
|
||||||
|
@ -334,19 +337,26 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
}
|
}
|
||||||
const t1 = performance.now();
|
const t1 = performance.now();
|
||||||
const dur = t1 - t0;
|
const dur = t1 - t0;
|
||||||
console.info(`Evaluated ${count} requests in ${dur.toFixed(0)} ms`);
|
output.push(
|
||||||
console.info(`\tAverage: ${(dur / count).toFixed(3)} ms per request`);
|
`Evaluated ${count} retrieval in ${dur.toFixed(0)} ms`,
|
||||||
};
|
`\tAverage: ${(dur / count).toFixed(3)} ms per document`
|
||||||
|
);
|
||||||
|
const s = output.join('\n');
|
||||||
|
console.info(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µb.benchmarkScriptletFiltering = async function() {
|
export async function benchmarkScriptletFiltering() {
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
||||||
console.info('No requests found to benchmark');
|
console.info('No requests found to benchmark');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.info('Benchmarking scriptletFilteringEngine.retrieve()...');
|
const output = [
|
||||||
|
'Benchmarking scriptletFilteringEngine.retrieve()...',
|
||||||
|
];
|
||||||
const details = {
|
const details = {
|
||||||
domain: '',
|
domain: '',
|
||||||
entity: '',
|
entity: '',
|
||||||
|
@ -369,13 +379,18 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
}
|
}
|
||||||
const t1 = performance.now();
|
const t1 = performance.now();
|
||||||
const dur = t1 - t0;
|
const dur = t1 - t0;
|
||||||
console.info(`Evaluated ${count} requests in ${dur.toFixed(0)} ms`);
|
output.push(
|
||||||
console.info(`\tAverage: ${(dur / count).toFixed(3)} ms per request`);
|
`Evaluated ${count} retrieval in ${dur.toFixed(0)} ms`,
|
||||||
};
|
`\tAverage: ${(dur / count).toFixed(3)} ms per document`
|
||||||
|
);
|
||||||
|
const s = output.join('\n');
|
||||||
|
console.info(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µb.benchmarkOnBeforeRequest = async function() {
|
export async function benchmarkOnBeforeRequest() {
|
||||||
const requests = await loadBenchmarkDataset();
|
const requests = await loadBenchmarkDataset();
|
||||||
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
if ( Array.isArray(requests) === false || requests.length === 0 ) {
|
||||||
console.info('No requests found to benchmark');
|
console.info('No requests found to benchmark');
|
||||||
|
@ -417,6 +432,6 @@ const loadBenchmarkDataset = (( ) => {
|
||||||
console.info(`\tBlocked ${blockCount} requests`);
|
console.info(`\tBlocked ${blockCount} requests`);
|
||||||
console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
|
console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -930,7 +930,7 @@ FilterContainer.prototype.retrieveSpecificSelectors = function(
|
||||||
if ( injectedCSS.length !== 0 ) {
|
if ( injectedCSS.length !== 0 ) {
|
||||||
out.injectedCSS = injectedCSS.join('\n\n');
|
out.injectedCSS = injectedCSS.join('\n\n');
|
||||||
details.code = out.injectedCSS;
|
details.code = out.injectedCSS;
|
||||||
if ( request.tabId !== undefined ) {
|
if ( request.tabId !== undefined && options.dontInject !== true ) {
|
||||||
vAPI.tabs.insertCSS(request.tabId, details);
|
vAPI.tabs.insertCSS(request.tabId, details);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -940,7 +940,7 @@ FilterContainer.prototype.retrieveSpecificSelectors = function(
|
||||||
const networkFilters = [];
|
const networkFilters = [];
|
||||||
if ( cacheEntry.retrieveNet(networkFilters) ) {
|
if ( cacheEntry.retrieveNet(networkFilters) ) {
|
||||||
details.code = `${networkFilters.join('\n')}\n{display:none!important;}`;
|
details.code = `${networkFilters.join('\n')}\n{display:none!important;}`;
|
||||||
if ( request.tabId !== undefined ) {
|
if ( request.tabId !== undefined && options.dontInject !== true ) {
|
||||||
vAPI.tabs.insertCSS(request.tabId, details);
|
vAPI.tabs.insertCSS(request.tabId, details);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,6 +187,26 @@ vAPI.messaging.send('dashboard', {
|
||||||
dom.attr(button, 'disabled', null);
|
dom.attr(button, 'disabled', null);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
dom.on('#cfe-benchmark', 'click', ev => {
|
||||||
|
const button = ev.target;
|
||||||
|
dom.attr(button, 'disabled', '');
|
||||||
|
vAPI.messaging.send('devTools', {
|
||||||
|
what: 'cfeBenchmark',
|
||||||
|
}).then(result => {
|
||||||
|
log(result);
|
||||||
|
dom.attr(button, 'disabled', null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
dom.on('#sfe-benchmark', 'click', ev => {
|
||||||
|
const button = ev.target;
|
||||||
|
dom.attr(button, 'disabled', '');
|
||||||
|
vAPI.messaging.send('devTools', {
|
||||||
|
what: 'sfeBenchmark',
|
||||||
|
}).then(result => {
|
||||||
|
log(result);
|
||||||
|
dom.attr(button, 'disabled', null);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -64,8 +64,6 @@ import {
|
||||||
isNetworkURI,
|
isNetworkURI,
|
||||||
} from './uri-utils.js';
|
} from './uri-utils.js';
|
||||||
|
|
||||||
import './benchmarks.js';
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/710
|
// https://github.com/uBlockOrigin/uBlock-issues/issues/710
|
||||||
|
@ -1847,9 +1845,27 @@ const onMessage = function(request, sender, callback) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'snfeBenchmark':
|
case 'snfeBenchmark':
|
||||||
µb.benchmarkStaticNetFiltering({ redirectEngine }).then(result => {
|
import('/js/benchmarks.js').then(module => {
|
||||||
|
module.benchmarkStaticNetFiltering({ redirectEngine }).then(result => {
|
||||||
callback(result);
|
callback(result);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
|
||||||
|
case 'cfeBenchmark':
|
||||||
|
import('/js/benchmarks.js').then(module => {
|
||||||
|
module.benchmarkCosmeticFiltering().then(result => {
|
||||||
|
callback(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
|
||||||
|
case 'sfeBenchmark':
|
||||||
|
import('/js/benchmarks.js').then(module => {
|
||||||
|
module.benchmarkScriptletFiltering().then(result => {
|
||||||
|
callback(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'snfeToDNR': {
|
case 'snfeToDNR': {
|
||||||
|
|
Loading…
Reference in New Issue