Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: test/js-perf-test/Keys/keys.js

Issue 1702613002: [js-perf-test] Adding micro benchmarks for for-in and keys patterns. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixing license date Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/js-perf-test/JSTests.json ('k') | test/js-perf-test/Keys/run.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 function ObjectWithKeys(count, keyOffset, keyGen) { 5 function ObjectWithKeys(count, keyOffset, keyGen) {
6 if (keyOffset === undefined) keyOffset = 0; 6 if (keyOffset === undefined) keyOffset = 0;
7 if (keyGen === undefined) keyGen = (i) => { return "key" + i }; 7 if (keyGen === undefined) keyGen = (i) => { return "key" + i };
8 var o = {}; 8 var o = {};
9 for (var i = 0; i < count; i++) { 9 for (var i = 0; i < count; i++) {
10 var key = keyGen(i + keyOffset); 10 var key = keyGen(i + keyOffset);
11 o[key] = "value"; 11 o[key] = "value";
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 for (var i = 0; i < size; i++) { 51 for (var i = 0; i < size; i++) {
52 array[i] = i; 52 array[i] = i;
53 } 53 }
54 return array; 54 return array;
55 } 55 }
56 56
57 // ============================================================================ 57 // ============================================================================
58 var object_empty = {}; 58 var object_empty = {};
59 var array_empty = []; 59 var array_empty = [];
60 60
61 var array_int_100 = IntArray(100); 61 var array_int_50 = IntArray(50);
62 var array_int_100_proto_elements = IntArray(100); 62 var array_int_50_proto_elements = IntArray(50);
63 array_int_100_proto_elements.__proto__ = [101, 102, 103, 104]; 63 array_int_50_proto_elements.__proto__ = [51, 52, 53, 54];
64 var array_int_holey_100 = HoleyIntArray(100); 64 var array_int_holey_50 = HoleyIntArray(50);
65 65
66 var empty_proto_5_10 = ObjectWithKeys(5); 66 var empty_proto_5_10 = ObjectWithKeys(5);
67 empty_proto_5_10.__proto__ = ObjectWithProtoKeys(10, 0); 67 empty_proto_5_10.__proto__ = ObjectWithProtoKeys(10, 0);
68 68
69 var empty_proto_5_5_slow = ObjectWithKeys(5); 69 var empty_proto_5_5_slow = ObjectWithKeys(5);
70 empty_proto_5_5_slow.__proto__ = ObjectWithProtoKeys(5, 0, false); 70 empty_proto_5_5_slow.__proto__ = ObjectWithProtoKeys(5, 0, false);
71 71
72 var object_elements_proto_5_10 = ObjectWithKeys(5); 72 var object_elements_proto_5_10 = ObjectWithKeys(5);
73 object_elements_proto_5_10.__proto__ = ObjectWithProtoKeys(10, 0); 73 object_elements_proto_5_10.__proto__ = ObjectWithProtoKeys(10, 0);
74 // Add some properties further up the prototype chain, the rest stays 74 // Add some properties further up the prototype chain, the rest stays
75 // empty. 75 // empty.
76 for (var i = 0; i < 5; i++) { 76 for (var i = 0; i < 5; i++) {
77 object_elements_proto_5_10.__proto__.__proto__.__proto__["proto" + i] = true; 77 object_elements_proto_5_10.__proto__.__proto__.__proto__["proto" + i] = true;
78 } 78 }
79 79
80 var TestObjects = { 80 var TestObjects = {
81 object_empty: object_empty, 81 object_empty: object_empty,
82 array_empty: array_empty, 82 array_empty: array_empty,
83 array_int_100: array_int_100, 83 array_int_50: array_int_50,
84 array_int_holey_100: array_int_holey_100, 84 array_int_holey_50: array_int_holey_50,
85 array_int_100_proto_elements: array_int_100_proto_elements, 85 array_int_50_proto_elements: array_int_50_proto_elements,
86 empty_proto_5_10: empty_proto_5_10, 86 empty_proto_5_10: empty_proto_5_10,
87 empty_proto_5_5_slow: empty_proto_5_5_slow, 87 empty_proto_5_5_slow: empty_proto_5_5_slow,
88 object_elements_proto_5_10: object_elements_proto_5_10 88 object_elements_proto_5_10: object_elements_proto_5_10
89 } 89 }
90 90
91 var TestArrays = 91 var TestArrays = {
92 { 92 array_empty: array_empty,
93 array_empty: array_empty, 93 array_int_50: array_int_50,
94 array_int_100: array_int_100, 94 array_int_holey_50: array_int_holey_50,
95 array_int_holey_100: array_int_holey_100, 95 array_int_50_proto_elements: array_int_50_proto_elements,
96 array_int_100_proto_elements: array_int_100_proto_elements 96 }
97 }
98 97
99 // ============================================================================ 98 // ============================================================================
100 99
101 function CreateTestFunctionGen(fn) { 100 function CreateTestFunctionGen(fn) {
102 // Force a new function for each test-object to avoid side-effects due to ICs. 101 // Force a new function for each test-object to avoid side-effects due to ICs.
103 return (object) => { 102 return (object) => {
104 var random_comment = "\n// random comment" + Math.random() + "\n"; 103 var random_comment = "\n// random comment" + Math.random() + "\n";
105 return eval(random_comment + fn.toString()); 104 return eval(random_comment + fn.toString());
106 } 105 }
107 } 106 }
108 107
109 var TestFunctions = { 108 var TestFunctions = {
110 "Object.keys()": CreateTestFunctionGen(() => {return Object.keys(object)}), 109 "Object.keys()": CreateTestFunctionGen(() => {return Object.keys(object)}),
111 "for (in)": CreateTestFunctionGen(() => { 110 "for-in": CreateTestFunctionGen(() => {
112 var count = 0; 111 var count = 0;
113 var result; 112 var result;
114 for (var key in object) { 113 for (var key in object) {
115 count++; 114 count++;
116 result = object[key]; 115 result = object[key];
117 }; 116 };
118 return [result, count]; 117 return [result, count];
119 }), 118 }),
120 "for (in) hasOwnProperty()": CreateTestFunctionGen(() => { 119 "for-in hasOwnProperty()": CreateTestFunctionGen(() => {
121 var count = 0; 120 var count = 0;
122 var result; 121 var result;
123 for (var key in object) { 122 for (var key in object) {
124 if (!object.hasOwnProperty(key)) continue; 123 if (!object.hasOwnProperty(key)) continue;
125 count++; 124 count++;
126 result = object[key]; 125 result = object[key];
127 }; 126 };
128 return [result, count]; 127 return [result, count];
129 }), 128 }),
130 "for (i < Object.keys().length)": CreateTestFunctionGen(() => { 129 "for (i < Object.keys().length)": CreateTestFunctionGen(() => {
131 var count = 0; 130 var count = 0;
132 var result; 131 var result;
133 var keys = Object.keys(object) for (var i = 0; i < keys.length; i++) { 132 var keys = Object.keys(object);
133 for (var i = 0; i < keys.length; i++) {
134 count++; 134 count++;
135 result = object[keys[i]]; 135 result = object[keys[i]];
136 }; 136 };
137 return [result, count]; 137 return [result, count];
138 }), 138 }),
139 "Object.keys().forEach()": CreateTestFunctionGen(() => { 139 "Object.keys().forEach()": CreateTestFunctionGen(() => {
140 var count = 0; 140 var count = 0;
141 var result; 141 var result;
142 Object.keys(object).forEach((value, index, obj) => { 142 Object.keys(object).forEach((value, index, obj) => {
143 count++; 143 count++;
(...skipping 19 matching lines...) Expand all
163 var length = object.length; 163 var length = object.length;
164 for (var i = 0; i < length; i++) { 164 for (var i = 0; i < length; i++) {
165 count++; 165 count++;
166 result = object[i]; 166 result = object[i];
167 }; 167 };
168 return [result, count]; 168 return [result, count];
169 }) 169 })
170 } 170 }
171 171
172 // ============================================================================ 172 // ============================================================================
173 173 // Create the benchmark suites. We create a suite for each of the test
174 // functions above and each suite contains benchmarks for each object type.
174 var Benchmarks = []; 175 var Benchmarks = [];
175 176
176 function NewBenchmark( 177 function NewBenchmark(
177 test_function_gen, test_function_name, test_object, test_object_name) { 178 test_function_gen, test_function_name, test_object, test_object_name) {
178 var object = test_object; 179 var object = test_object;
179 var name = test_function_name + " " + test_object_name; 180 var name = test_function_name + " " + test_object_name;
180 var test_function = test_function_gen(object); 181 var test_function = test_function_gen(object);
181 return new Benchmark(name, false, false, 0, test_function) 182 return new Benchmark(name, false, false, 0, test_function)
182 } 183 }
183 184
184 for (var test_function_name in TestFunctions) { 185 for (var test_function_name in TestFunctions) {
185 var test_function_gen = TestFunctions[test_function_name]; 186 var test_function_gen = TestFunctions[test_function_name];
186 var benchmarks = []; 187 var benchmarks = [];
187 for (var test_object_name in TestObjects) { 188 for (var test_object_name in TestObjects) {
188 var test_object = TestObjects[test_object_name]; 189 var test_object = TestObjects[test_object_name];
189 var benchmark = NewBenchmark( 190 var benchmark = NewBenchmark(
190 test_function_gen, test_function_name, test_object, test_object_name); 191 test_function_gen, test_function_name, test_object, test_object_name);
191 benchmarks.push(benchmark); 192 benchmarks.push(benchmark);
192 } 193 }
193 Benchmarks.push(new BenchmarkSuite(test_function_name, [1000], benchmarks)); 194 Benchmarks.push(new BenchmarkSuite(test_function_name, [100], benchmarks));
194 } 195 }
195 196
196 for (var test_function_name in TestFunctionsArrays) { 197 for (var test_function_name in TestFunctionsArrays) {
197 var test_function_gen = TestFunctionsArrays[test_function_name]; 198 var test_function_gen = TestFunctionsArrays[test_function_name];
198 var benchmarks = []; 199 var benchmarks = [];
199 for (var test_array_name in TestArrays) { 200 for (var test_array_name in TestArrays) {
200 var test_array = TestArrays[test_array_name]; 201 var test_array = TestArrays[test_array_name];
201 var benchmark = NewBenchmark( 202 var benchmark = NewBenchmark(
202 test_function_gen, test_function_name, test_array, test_array_name); 203 test_function_gen, test_function_name, test_array, test_array_name);
203 benchmarks.push(benchmark); 204 benchmarks.push(benchmark);
204 } 205 }
205 Benchmarks.push(new BenchmarkSuite(test_function_name, [1000], benchmarks)); 206 Benchmarks.push(new BenchmarkSuite(test_function_name, [100], benchmarks));
206 } 207 }
207 208
208 // ============================================================================ 209 // ============================================================================
OLDNEW
« no previous file with comments | « test/js-perf-test/JSTests.json ('k') | test/js-perf-test/Keys/run.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698