OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/benchmark_test.h" | |
6 | |
7 #include "bin/file.h" | |
8 | |
5 #include "platform/assert.h" | 9 #include "platform/assert.h" |
6 | 10 |
7 #include "vm/benchmark_test.h" | |
8 #include "vm/dart_api_impl.h" | 11 #include "vm/dart_api_impl.h" |
9 #include "vm/stack_frame.h" | 12 #include "vm/stack_frame.h" |
10 #include "vm/unit_test.h" | 13 #include "vm/unit_test.h" |
11 | 14 |
12 namespace dart { | 15 namespace dart { |
13 | 16 |
14 Benchmark* Benchmark::first_ = NULL; | 17 Benchmark* Benchmark::first_ = NULL; |
15 Benchmark* Benchmark::tail_ = NULL; | 18 Benchmark* Benchmark::tail_ = NULL; |
19 const char* Benchmark::executable_ = NULL; | |
16 | 20 |
17 void Benchmark::RunAll() { | 21 void Benchmark::RunAll(const char* executable) { |
22 SetExecutable(executable); | |
18 Benchmark* benchmark = first_; | 23 Benchmark* benchmark = first_; |
19 while (benchmark != NULL) { | 24 while (benchmark != NULL) { |
20 benchmark->RunBenchmark(); | 25 benchmark->RunBenchmark(); |
21 benchmark = benchmark->next_; | 26 benchmark = benchmark->next_; |
22 } | 27 } |
23 } | 28 } |
24 | 29 |
25 | 30 |
26 // Compiler only implemented on IA32 and X64 now. | 31 // Compiler only implemented on IA32 and X64 now. |
27 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) | 32 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
174 Dart_Invoke(lib, | 179 Dart_Invoke(lib, |
175 Dart_NewString("benchmark"), | 180 Dart_NewString("benchmark"), |
176 1, | 181 1, |
177 args); | 182 args); |
178 timer.Stop(); | 183 timer.Stop(); |
179 int64_t elapsed_time = timer.TotalElapsedTime(); | 184 int64_t elapsed_time = timer.TotalElapsedTime(); |
180 benchmark->set_score(elapsed_time); | 185 benchmark->set_score(elapsed_time); |
181 } | 186 } |
182 | 187 |
183 | 188 |
184 #if 0 | |
185 // | 189 // |
186 // Measure compile of all dart2js(compiler) functions. | 190 // Measure compile of all dart2js(compiler) functions. |
187 // | 191 // |
192 static char* ComputeDart2JSPath(const char* arg) { | |
193 char buffer[2048]; | |
194 char* dart2js_path = strdup(File::GetCanonicalPath(arg)); | |
195 const char* compiler_path = "%s%slib%scompiler%scompiler.dart"; | |
196 char* ptr = strrchr(dart2js_path, File::PathSeparatorCharacter()); | |
cshapiro
2012/05/01 21:41:52
Why not assert that the path separator is 1 charac
siva
2012/05/01 22:02:49
Done.
| |
197 while (ptr != NULL) { | |
198 *ptr = '\0'; | |
199 OS::SNPrint(buffer, 2048, compiler_path, | |
200 dart2js_path, | |
201 File::PathSeparator(), | |
202 File::PathSeparator(), | |
203 File::PathSeparator()); | |
204 if (File::Exists(buffer)) { | |
205 break; | |
206 } | |
207 ptr = strrchr(dart2js_path, File::PathSeparatorCharacter()); | |
cshapiro
2012/05/01 21:41:52
Same here.
siva
2012/05/01 22:02:49
Done.
| |
208 } | |
209 if (ptr == NULL) { | |
210 free(dart2js_path); | |
211 dart2js_path = NULL; | |
212 } | |
213 return dart2js_path; | |
214 } | |
215 | |
216 | |
188 static void func(Dart_NativeArguments args) { | 217 static void func(Dart_NativeArguments args) { |
189 } | 218 } |
190 | 219 |
191 | 220 |
192 static Dart_NativeFunction NativeResolver(Dart_Handle name, | 221 static Dart_NativeFunction NativeResolver(Dart_Handle name, |
193 int arg_count) { | 222 int arg_count) { |
194 return &func; | 223 return &func; |
195 } | 224 } |
196 | 225 |
197 | 226 |
198 BENCHMARK(Dart2JSCompileAll) { | 227 BENCHMARK(Dart2JSCompileAll) { |
199 const char* kScriptChars = "#import('lib/compiler/compiler.dart');"; | 228 char* dart_root = ComputeDart2JSPath(Benchmark::Executable()); |
229 Dart_Handle import_map; | |
230 if (dart_root != NULL) { | |
231 import_map = Dart_NewList(2); | |
232 Dart_ListSetAt(import_map, 0, Dart_NewString("DART_ROOT")); | |
233 Dart_ListSetAt(import_map, 1, Dart_NewString(dart_root)); | |
234 } else { | |
235 import_map = Dart_NewList(0); | |
236 } | |
237 const char* kScriptChars = | |
238 "#import('${DART_ROOT}/lib/compiler/compiler.dart');"; | |
200 Dart_Handle lib = TestCase::LoadTestScript( | 239 Dart_Handle lib = TestCase::LoadTestScript( |
201 kScriptChars, | 240 kScriptChars, |
202 reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver)); | 241 reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver), |
242 import_map); | |
203 EXPECT(!Dart_IsError(lib)); | 243 EXPECT(!Dart_IsError(lib)); |
204 Timer timer(true, "Compile all of dart2js benchmark"); | 244 Timer timer(true, "Compile all of dart2js benchmark"); |
205 timer.Start(); | 245 timer.Start(); |
206 Dart_Handle result = Dart_CompileAll(); | 246 Dart_Handle result = Dart_CompileAll(); |
207 EXPECT(!Dart_IsError(result)); | 247 EXPECT(!Dart_IsError(result)); |
208 timer.Stop(); | 248 timer.Stop(); |
209 int64_t elapsed_time = timer.TotalElapsedTime(); | 249 int64_t elapsed_time = timer.TotalElapsedTime(); |
210 benchmark->set_score(elapsed_time); | 250 benchmark->set_score(elapsed_time); |
251 free(dart_root); | |
211 } | 252 } |
212 #endif | |
213 | 253 |
214 | 254 |
215 // | 255 // |
216 // Measure frame lookup during stack traversal. | 256 // Measure frame lookup during stack traversal. |
217 // | 257 // |
218 static void StackFrame_accessFrame(Dart_NativeArguments args) { | 258 static void StackFrame_accessFrame(Dart_NativeArguments args) { |
219 const int kNumIterations = 100; | 259 const int kNumIterations = 100; |
220 Dart_EnterScope(); | 260 Dart_EnterScope(); |
221 Code& code = Code::Handle(); | 261 Code& code = Code::Handle(); |
222 Timer timer(true, "LookupDartCode benchmark"); | 262 Timer timer(true, "LookupDartCode benchmark"); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
293 reinterpret_cast<Dart_NativeEntryResolver>(StackFrameNativeResolver)); | 333 reinterpret_cast<Dart_NativeEntryResolver>(StackFrameNativeResolver)); |
294 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("StackFrameTest")); | 334 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("StackFrameTest")); |
295 Dart_Handle result = Dart_Invoke(cls, Dart_NewString("testMain"), 0, NULL); | 335 Dart_Handle result = Dart_Invoke(cls, Dart_NewString("testMain"), 0, NULL); |
296 EXPECT_VALID(result); | 336 EXPECT_VALID(result); |
297 int64_t elapsed_time = 0; | 337 int64_t elapsed_time = 0; |
298 EXPECT(!Dart_IsError(Dart_IntegerToInt64(result, &elapsed_time))); | 338 EXPECT(!Dart_IsError(Dart_IntegerToInt64(result, &elapsed_time))); |
299 benchmark->set_score(elapsed_time); | 339 benchmark->set_score(elapsed_time); |
300 } | 340 } |
301 | 341 |
302 } // namespace dart | 342 } // namespace dart |
OLD | NEW |