80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
/*
|
|
Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
const { PrincipalUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/dom/quota/test/modules/PrincipalUtils.sys.mjs"
|
|
);
|
|
const { IndexedDBUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/dom/indexedDB/test/modules/IndexedDBUtils.sys.mjs"
|
|
);
|
|
|
|
/**
|
|
* This is not a formal performance test — see the dedicated perf tests for
|
|
* actual metrics.
|
|
*
|
|
* This test exists to:
|
|
* - Provide fast, local verification during development.
|
|
* - May detect early regressions in scheduling logic before perf test
|
|
* results are available.
|
|
*
|
|
* It simulates multiple open requests to the same database, issued one after
|
|
* another. Only one should run at a time, and each should start promptly after
|
|
* the previous finishes.
|
|
*
|
|
* If scheduling or cleanup is slow, this test may fail due to timeout.
|
|
*
|
|
* Note: Not only the number of requests, but also the number of live (open)
|
|
* databases may affect performance.
|
|
*
|
|
* Note: This test could theoretically be combined with its counterpart in a
|
|
* single file with multiple tasks, but they are intentionally split to:
|
|
* - Avoid interference between test cases
|
|
* - Make it obvious which scenario timed out (serial vs. parallel)
|
|
*/
|
|
|
|
/* exported testSteps */
|
|
async function testSteps() {
|
|
const principal = PrincipalUtils.createPrincipal("https://example.com");
|
|
const name = "multipleOpensInSequence";
|
|
|
|
info("Opening databases");
|
|
|
|
{
|
|
const startTime = Cu.now();
|
|
|
|
const databases = [];
|
|
|
|
for (let index = 0; index < 1000; index++) {
|
|
const request = indexedDB.openForPrincipal(principal, name);
|
|
const database = await IndexedDBUtils.requestFinished(request);
|
|
databases.push(database);
|
|
}
|
|
|
|
for (const database of databases) {
|
|
database.close();
|
|
}
|
|
|
|
const endTime = Cu.now();
|
|
|
|
const timeDelta = endTime - startTime;
|
|
|
|
info(`Opened databases in ${timeDelta} msec`);
|
|
}
|
|
|
|
info("Deleting database");
|
|
|
|
{
|
|
const startTime = Cu.now();
|
|
|
|
const request = indexedDB.deleteForPrincipal(principal, name);
|
|
await IndexedDBUtils.requestFinished(request);
|
|
|
|
const endTime = Cu.now();
|
|
|
|
const timeDelta = endTime - startTime;
|
|
|
|
info(`Deleted database in ${timeDelta} msec`);
|
|
}
|
|
}
|