Implement a new design for JetStream2
[WebKit-https.git] / PerformanceTests / IndexedDB / large-array-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-array-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 function createSubArray(count)
46 {
47     var array = new Array(count);
48     for (var i = 0; i < count; ++i) {
49         array[i] = createSubArray(count - 1);
50     }
51     return array;
52 }
53
54 var numberOfSubarrays = 6;
55 var array = createSubArray(numberOfSubarrays);
56 array.push("variant");
57
58 function *runIteration()
59 {
60     var openRequest = indexedDB.open(databasePrefix + currentIteration);
61     openRequest.onupgradeneeded = function(event) {
62         db = event.target.result;
63         db.createObjectStore('arrays');
64     }
65     openRequest.onsuccess = nextStep;
66
67     yield;
68
69     var startTime = PerfTestRunner.now();
70
71     var objectStore = db.transaction('arrays', 'readwrite').objectStore('arrays');
72     objectStore.transaction.oncomplete = nextStep;
73
74     var numberOfInserts = 100;
75     for (var i = 0; i < numberOfInserts; ++i) {
76         array[numberOfSubarrays] = i;
77         objectStore.put("Some value!!!", array);
78     }
79
80     yield;
81
82     if (!PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime))
83         return;
84
85     setTimeout(startIteration, 0);
86 }
87
88 </script>
89 </body>
90 </html>