- a/PerformanceTests/ChangeLog +14 lines
Lines 1-3 a/PerformanceTests/ChangeLog_sec1
1
2016-12-12  Commit Queue  <commit-queue@webkit.org>
2
3
        Unreviewed, rolling out r209672.
4
        https://bugs.webkit.org/show_bug.cgi?id=165766
5
6
        IndexedDB/objectstore-cursor.html perf test always times out
7
        (Requested by ap on #webkit).
8
9
        Reverted changeset:
10
11
        "More IndexedDB perf tests."
12
        https://bugs.webkit.org/show_bug.cgi?id=165634
13
        http://trac.webkit.org/changeset/209672
14
1
2016-12-10  Brady Eidson  <beidson@apple.com>
15
2016-12-10  Brady Eidson  <beidson@apple.com>
2
16
3
        More IndexedDB perf tests.
17
        More IndexedDB perf tests.
- a/PerformanceTests/IndexedDB/index-multientry.html -7 / +5 lines
Lines 4-17 a/PerformanceTests/IndexedDB/index-multientry.html_sec1
4
<script src="../resources/runner.js"></script>
4
<script src="../resources/runner.js"></script>
5
<script>
5
<script>
6
6
7
var iterationCount = 20;
7
var iterationCount = 11;
8
var numberDeleted = 0;
8
var numberDeleted = 0;
9
9
10
// Delete all databases for the test ahead of time.
10
// Delete all databases for the test ahead of time.
11
var databaseNamePrefix = "index-multientry-DB-";
11
for (var i = 0; i < iterationCount; ++i) {
12
for (var i = 0; i < iterationCount + 1; ++i) {
12
    indexedDB.deleteDatabase("index-multientry-DB-" + i).onsuccess = function() {
13
    req = indexedDB.deleteDatabase(databaseNamePrefix + i);
14
    req.onsuccess = function() {
15
        if (++numberDeleted == iterationCount)
13
        if (++numberDeleted == iterationCount)
16
            startIteration();
14
            startIteration();
17
    }
15
    }
Lines 46-59 function nextStep() a/PerformanceTests/IndexedDB/index-multientry.html_sec2
46
}
44
}
47
45
48
var object = { test: 'yo', indexKeys: [] };
46
var object = { test: 'yo', indexKeys: [] };
49
for (var i = 0; i < 5000; i++)
47
for (var i = 0; i < 1000; i++)
50
    object.indexKeys.push('index_no_' + i);
48
    object.indexKeys.push('index_no_' + i);
51
49
52
function *runIteration()
50
function *runIteration()
53
{
51
{
54
    var startTime = PerfTestRunner.now();
52
    var startTime = PerfTestRunner.now();
55
53
56
    var openRequest = indexedDB.open(databaseNamePrefix + currentIteration);
54
    var openRequest = indexedDB.open("index-multientry-DB-" + currentIteration);
57
    openRequest.onupgradeneeded = function(event) {
55
    openRequest.onupgradeneeded = function(event) {
58
        db = event.target.result;
56
        db = event.target.result;
59
        db.createObjectStore('store').createIndex('index', 'indexKeys', { multiEntry: true });
57
        db.createObjectStore('store').createIndex('index', 'indexKeys', { multiEntry: true });
- a/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html -83 lines
Lines 1-83 a/PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html_sec1
1
<!DOCTYPE html>
2
<html>
3
<body>
4
<script src="../resources/runner.js"></script>
5
<script>
6
7
var iterationCount = 20;
8
var numberDeleted = 0;
9
10
// Delete all databases for the test ahead of time.
11
var databasePrefix = "large-number-of-inserts-responsiveness-DB-";
12
for (var i = 0; i < iterationCount + 1; ++i) {
13
    indexedDB.deleteDatabase(databasePrefix + i).onsuccess = function() {
14
        if (++numberDeleted == iterationCount)
15
            startIteration();
16
    }
17
}
18
19
var testGenerator = null;
20
var db = null;
21
var currentIteration = 0;
22
23
PerfTestRunner.prepareToMeasureValuesAsync({
24
    customIterationCount: iterationCount,
25
    unit: 'ms',
26
    done: function () {
27
        db = null;
28
        largestDelay = 0;
29
        testGenerator = null;
30
        PerfTestRunner.gc();
31
        ++currentIteration;
32
    }
33
});
34
35
function startIteration()
36
{
37
    testGenerator = runIteration();
38
    nextStep();
39
}
40
41
function nextStep()
42
{
43
    testGenerator.next();
44
}
45
46
var numberOfObjects = 50000;
47
var objectsToInsert = new Array(numberOfObjects);
48
for (var i = 0; i < numberOfObjects; ++i) {
49
    objectsToInsert[i] = { data: Math.random() };
50
    objectsToInsert[i].id = 'object_' + i;
51
}
52
53
function *runIteration()
54
{
55
    var openRequest = indexedDB.open(databasePrefix + currentIteration);
56
    openRequest.onupgradeneeded = function(event) {
57
        db = event.target.result;
58
        db.createObjectStore('objects', {keyPath: 'id'});
59
    }
60
    openRequest.onsuccess = nextStep;
61
62
    yield;
63
64
    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
65
    objectStore.transaction.oncomplete = nextStep;
66
    for (var i = 0; i < numberOfObjects; ++i)
67
        objectStore.put(objectsToInsert[i]);
68
69
    PerfTestRunner.startCheckingResponsiveness();
70
71
    yield;
72
73
    PerfTestRunner.stopCheckingResponsiveness();
74
    
75
    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.longestResponsivenessDelay()))
76
        return;
77
78
    setTimeout(startIteration, 0);
79
}
80
81
</script>
82
</body>
83
</html>
- a/PerformanceTests/IndexedDB/large-number-of-inserts.html -80 lines
Lines 1-80 a/PerformanceTests/IndexedDB/large-number-of-inserts.html_sec1
1
<!DOCTYPE html>
2
<html>
3
<body>
4
<script src="../resources/runner.js"></script>
5
<script>
6
7
var iterationCount = 20;
8
var numberDeleted = 0;
9
10
// Delete all databases for the test ahead of time.
11
var databasePrefix = "large-number-of-inserts-DB-";
12
for (var i = 0; i < iterationCount + 1; ++i) {
13
    indexedDB.deleteDatabase(databasePrefix + i).onsuccess = function() {
14
        if (++numberDeleted == iterationCount)
15
            startIteration();
16
    }
17
}
18
19
var testGenerator = null;
20
var db = null;
21
var currentIteration = 0;
22
23
PerfTestRunner.prepareToMeasureValuesAsync({
24
    customIterationCount: iterationCount,
25
    unit: 'ms',
26
    done: function () {
27
        db = null;
28
        testGenerator = null;
29
        PerfTestRunner.gc();
30
        ++currentIteration;
31
    }
32
});
33
34
function startIteration()
35
{
36
    testGenerator = runIteration();
37
    nextStep();
38
}
39
40
function nextStep()
41
{
42
    testGenerator.next();
43
}
44
45
var numberOfObjects = 100000;
46
var objectsToInsert = new Array(numberOfObjects);
47
for (var i = 0; i < numberOfObjects; ++i) {
48
    objectsToInsert[i] = { data: Math.random() };
49
    objectsToInsert[i].id = 'object_' + i;
50
}
51
52
function *runIteration()
53
{
54
    var openRequest = indexedDB.open(databasePrefix + currentIteration);
55
    openRequest.onupgradeneeded = function(event) {
56
        db = event.target.result;
57
        db.createObjectStore('objects', {keyPath: 'id'});
58
    }
59
    openRequest.onsuccess = nextStep;
60
61
    yield;
62
63
    var startTime = PerfTestRunner.now();
64
65
    var objectStore = db.transaction('objects', 'readwrite').objectStore('objects');
66
    objectStore.transaction.oncomplete = nextStep;
67
    for (var i = 0; i < numberOfObjects; ++i)
68
        objectStore.put(objectsToInsert[i]);
69
70
    yield;
71
72
    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
73
        return;
74
75
    setTimeout(startIteration, 0);
76
}
77
78
</script>
79
</body>
80
</html>
- a/PerformanceTests/IndexedDB/objectstore-cursor.html -82 lines
Lines 1-82 a/PerformanceTests/IndexedDB/objectstore-cursor.html_sec1
1
<!DOCTYPE html>
2
<html>
3
<body>
4
<script src="../resources/runner.js"></script>
5
<script>
6
7
var iterationCount = 20;
8
var numberDeleted = 0;
9
// Delete all databases for the test ahead of time.
10
var databaseName = "objectstore-cursor-DB";
11
indexedDB.deleteDatabase(databaseName).onsuccess = function() {
12
    startIteration();
13
}
14
15
var testGenerator = null;
16
var db = null;
17
var currentIteration = 0;
18
19
PerfTestRunner.prepareToMeasureValuesAsync({
20
    customIterationCount: iterationCount,
21
    unit: 'ms',
22
    done: function () {
23
        db = null;
24
        testGenerator = null;
25
        PerfTestRunner.gc();
26
        ++currentIteration;
27
    }
28
});
29
30
function startIteration()
31
{
32
    testGenerator = runIteration();
33
    nextStep();
34
}
35
36
function nextStep()
37
{
38
    testGenerator.next();
39
}
40
41
function *runIteration()
42
{
43
    var openRequest = indexedDB.open(databaseName);
44
    openRequest.onupgradeneeded = function(event) {
45
        db = event.target.result;
46
        var objectStore = db.createObjectStore('store');
47
        for (var i = 0; i < 50000; ++i) {
48
            var suffix = ("0000000" + i).slice(-7);
49
            objectStore.put("bar_value_" + suffix, "foo_key_" + suffix);
50
        }
51
    }
52
    openRequest.onsuccess = nextStep;
53
54
    yield;
55
56
    var startTime = PerfTestRunner.now();
57
    var cursorRequest = db.transaction('store').objectStore('store').openCursor();
58
    var cursorIteration = 0;
59
    cursorRequest.onsuccess = function(event) {
60
        var cursor = event.target.result;
61
        if (cursor) {
62
            var suffix = ("0000000" + cursorIteration).slice(-7);
63
            if (cursor.key != "foo_key_" + suffix)
64
                alert("Incorrect value retrieved: " + cursor.key);
65
            if (cursor.value != "bar_value_" + suffix)
66
                alert("Incorrect value retrieved: " + cursor.key);
67
            ++cursorIteration;
68
            cursor.continue();
69
        } else
70
            nextStep();
71
    };
72
73
    yield;
74
75
    if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
76
        return;
77
78
    setTimeout(startIteration, 0);
79
}
80
</script>
81
</body>
82
</html>
- a/PerformanceTests/resources/runner.js -29 lines
Lines 15-23 if (window.testRunner) { a/PerformanceTests/resources/runner.js_sec1
15
    var jsHeapResults;
15
    var jsHeapResults;
16
    var mallocHeapResults;
16
    var mallocHeapResults;
17
    var iterationCount = undefined;
17
    var iterationCount = undefined;
18
    var lastResponsivenessTimestamp = 0;
19
    var _longestResponsivenessDelay = 0;
20
    var continueCheckingResponsiveness = false;
21
18
22
    var PerfTestRunner = {};
19
    var PerfTestRunner = {};
23
20
Lines 326-357 if (window.testRunner) { a/PerformanceTests/resources/runner.js_sec2
326
        return PerfTestRunner.now() - startTime;
323
        return PerfTestRunner.now() - startTime;
327
    }
324
    }
328
325
329
    PerfTestRunner.startCheckingResponsiveness = function() {
330
        lastResponsivenessTimestamp = PerfTestRunner.now();
331
        _longestResponsivenessDelay = 0;
332
        continueCheckingResponsiveness = true;
333
334
        var timeoutFunction = function() {
335
            var now = PerfTestRunner.now();
336
            var delta = now - lastResponsivenessTimestamp;
337
            if (delta > _longestResponsivenessDelay)
338
                _longestResponsivenessDelay = delta;    
339
340
            lastResponsivenessTimestamp = now;
341
            if (continueCheckingResponsiveness)
342
                setTimeout(timeoutFunction, 0);
343
        }
344
        
345
        timeoutFunction();
346
    }
347
348
    PerfTestRunner.stopCheckingResponsiveness = function() {
349
        continueCheckingResponsiveness = false;
350
    }
351
352
    PerfTestRunner.longestResponsivenessDelay = function() {
353
        return _longestResponsivenessDelay;
354
    }
355
326
356
    PerfTestRunner.measurePageLoadTime = function(test) {
327
    PerfTestRunner.measurePageLoadTime = function(test) {
357
        test.run = function() {
328
        test.run = function() {

Return to Bug 165766