Add IDB perf tests stressing key size.
[WebKit-https.git] / PerformanceTests / IndexedDB / large-binary-keys.html
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-string-keys-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 baseString;
46 for (var i = 0; i < 100000; ++i)
47     baseString += "abcdefghijklmnopqrstuvwxyz";
48
49 var numberOfInserts = 50;
50 var array = new Array(numberOfInserts);
51 for (var i = 0; i < numberOfInserts; ++i) {
52     array[i] = new ArrayBuffer(2097152);
53     var view = new Int32Array(array[i]);
54     view[view.length - 1] = i;
55 }
56
57 function *runIteration()
58 {
59     var openRequest = indexedDB.open(databasePrefix + currentIteration);
60     openRequest.onupgradeneeded = function(event) {
61         db = event.target.result;
62         db.createObjectStore('arrays');
63     }
64     openRequest.onsuccess = nextStep;
65
66     yield;
67
68     var startTime = PerfTestRunner.now();
69
70     var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
71     objectStore.transaction.oncomplete = nextStep;
72
73     for (var i = 0; i < numberOfInserts; ++i)
74         objectStore.put("Some value!!!", array[i]);
75
76     yield;
77
78     if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
79         return;
80
81     setTimeout(startIteration, 0);
82 }
83
84 </script>
85 </body>
86 </html>