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

Side by Side Diff: runtime/vm/benchmark_test.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 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 | « runtime/vm/benchmark_test.h ('k') | runtime/vm/bigint_test.cc » ('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 (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" 5 #include "vm/benchmark_test.h"
6 6
7 #include "bin/builtin.h" 7 #include "bin/builtin.h"
8 #include "bin/file.h" 8 #include "bin/file.h"
9 #include "bin/isolate_data.h" 9 #include "bin/isolate_data.h"
10 10
11 #include "platform/assert.h" 11 #include "platform/assert.h"
12 #include "platform/globals.h" 12 #include "platform/globals.h"
13 13
14 #include "vm/clustered_snapshot.h" 14 #include "vm/clustered_snapshot.h"
15 #include "vm/compiler_stats.h" 15 #include "vm/compiler_stats.h"
16 #include "vm/dart_api_impl.h" 16 #include "vm/dart_api_impl.h"
17 #include "vm/stack_frame.h" 17 #include "vm/stack_frame.h"
18 #include "vm/unit_test.h" 18 #include "vm/unit_test.h"
19 19
20 using dart::bin::File; 20 using dart::bin::File;
21 21
22 namespace dart { 22 namespace dart {
23 23
24 Benchmark* Benchmark::first_ = NULL; 24 Benchmark* Benchmark::first_ = NULL;
25 Benchmark* Benchmark::tail_ = NULL; 25 Benchmark* Benchmark::tail_ = NULL;
26 const char* Benchmark::executable_ = NULL; 26 const char* Benchmark::executable_ = NULL;
27 27
28
29 // 28 //
30 // Measure compile of all dart2js(compiler) functions. 29 // Measure compile of all dart2js(compiler) functions.
31 // 30 //
32 static char* ComputeDart2JSPath(const char* arg) { 31 static char* ComputeDart2JSPath(const char* arg) {
33 char buffer[2048]; 32 char buffer[2048];
34 char* dart2js_path = strdup(File::GetCanonicalPath(arg)); 33 char* dart2js_path = strdup(File::GetCanonicalPath(arg));
35 const char* compiler_path = "%s%spkg%scompiler%slib%scompiler.dart"; 34 const char* compiler_path = "%s%spkg%scompiler%slib%scompiler.dart";
36 const char* path_separator = File::PathSeparator(); 35 const char* path_separator = File::PathSeparator();
37 ASSERT(path_separator != NULL && strlen(path_separator) == 1); 36 ASSERT(path_separator != NULL && strlen(path_separator) == 1);
38 char* ptr = strrchr(dart2js_path, *path_separator); 37 char* ptr = strrchr(dart2js_path, *path_separator);
39 while (ptr != NULL) { 38 while (ptr != NULL) {
40 *ptr = '\0'; 39 *ptr = '\0';
41 OS::SNPrint(buffer, 2048, compiler_path, dart2js_path, path_separator, 40 OS::SNPrint(buffer, 2048, compiler_path, dart2js_path, path_separator,
42 path_separator, path_separator, path_separator, path_separator); 41 path_separator, path_separator, path_separator, path_separator);
43 if (File::Exists(buffer)) { 42 if (File::Exists(buffer)) {
44 break; 43 break;
45 } 44 }
46 ptr = strrchr(dart2js_path, *path_separator); 45 ptr = strrchr(dart2js_path, *path_separator);
47 } 46 }
48 if (ptr == NULL) { 47 if (ptr == NULL) {
49 free(dart2js_path); 48 free(dart2js_path);
50 dart2js_path = NULL; 49 dart2js_path = NULL;
51 } 50 }
52 return dart2js_path; 51 return dart2js_path;
53 } 52 }
54 53
55
56 static void func(Dart_NativeArguments args) {} 54 static void func(Dart_NativeArguments args) {}
57 55
58
59 static Dart_NativeFunction NativeResolver(Dart_Handle name, 56 static Dart_NativeFunction NativeResolver(Dart_Handle name,
60 int arg_count, 57 int arg_count,
61 bool* auto_setup_scope) { 58 bool* auto_setup_scope) {
62 ASSERT(auto_setup_scope != NULL); 59 ASSERT(auto_setup_scope != NULL);
63 *auto_setup_scope = false; 60 *auto_setup_scope = false;
64 return &func; 61 return &func;
65 } 62 }
66 63
67
68 static void SetupDart2JSPackagePath() { 64 static void SetupDart2JSPackagePath() {
69 bool worked = bin::DartUtils::SetOriginalWorkingDirectory(); 65 bool worked = bin::DartUtils::SetOriginalWorkingDirectory();
70 EXPECT(worked); 66 EXPECT(worked);
71 67
72 Dart_Handle result = bin::DartUtils::PrepareForScriptLoading(false, false); 68 Dart_Handle result = bin::DartUtils::PrepareForScriptLoading(false, false);
73 DART_CHECK_VALID(result); 69 DART_CHECK_VALID(result);
74 70
75 // Setup package root. 71 // Setup package root.
76 char buffer[2048]; 72 char buffer[2048];
77 char* executable_path = 73 char* executable_path =
78 strdup(File::GetCanonicalPath(Benchmark::Executable())); 74 strdup(File::GetCanonicalPath(Benchmark::Executable()));
79 const char* packages_path = "%s%s..%spackages"; 75 const char* packages_path = "%s%s..%spackages";
80 const char* path_separator = File::PathSeparator(); 76 const char* path_separator = File::PathSeparator();
81 OS::SNPrint(buffer, 2048, packages_path, executable_path, path_separator, 77 OS::SNPrint(buffer, 2048, packages_path, executable_path, path_separator,
82 path_separator); 78 path_separator);
83 result = bin::DartUtils::SetupPackageRoot(buffer, NULL); 79 result = bin::DartUtils::SetupPackageRoot(buffer, NULL);
84 DART_CHECK_VALID(result); 80 DART_CHECK_VALID(result);
85 } 81 }
86 82
87
88 void Benchmark::RunAll(const char* executable) { 83 void Benchmark::RunAll(const char* executable) {
89 SetExecutable(executable); 84 SetExecutable(executable);
90 Benchmark* benchmark = first_; 85 Benchmark* benchmark = first_;
91 while (benchmark != NULL) { 86 while (benchmark != NULL) {
92 benchmark->RunBenchmark(); 87 benchmark->RunBenchmark();
93 benchmark = benchmark->next_; 88 benchmark = benchmark->next_;
94 } 89 }
95 } 90 }
96 91
97
98 Dart_Isolate Benchmark::CreateIsolate(const uint8_t* snapshot_data, 92 Dart_Isolate Benchmark::CreateIsolate(const uint8_t* snapshot_data,
99 const uint8_t* snapshot_instructions) { 93 const uint8_t* snapshot_instructions) {
100 char* err = NULL; 94 char* err = NULL;
101 isolate_ = Dart_CreateIsolate(NULL, NULL, snapshot_data, 95 isolate_ = Dart_CreateIsolate(NULL, NULL, snapshot_data,
102 snapshot_instructions, NULL, NULL, &err); 96 snapshot_instructions, NULL, NULL, &err);
103 EXPECT(isolate_ != NULL); 97 EXPECT(isolate_ != NULL);
104 free(err); 98 free(err);
105 return isolate_; 99 return isolate_;
106 } 100 }
107 101
108
109 // 102 //
110 // Measure compile of all functions in dart core lib classes. 103 // Measure compile of all functions in dart core lib classes.
111 // 104 //
112 BENCHMARK(CorelibCompileAll) { 105 BENCHMARK(CorelibCompileAll) {
113 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); 106 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
114 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); 107 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
115 TransitionNativeToVM transition(thread); 108 TransitionNativeToVM transition(thread);
116 Timer timer(true, "Compile all of Core lib benchmark"); 109 Timer timer(true, "Compile all of Core lib benchmark");
117 timer.Start(); 110 timer.Start();
118 const Error& error = Error::Handle(Library::CompileAll()); 111 const Error& error = Error::Handle(Library::CompileAll());
119 if (!error.IsNull()) { 112 if (!error.IsNull()) {
120 OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s", 113 OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s",
121 error.ToErrorCString()); 114 error.ToErrorCString());
122 } 115 }
123 timer.Stop(); 116 timer.Stop();
124 int64_t elapsed_time = timer.TotalElapsedTime(); 117 int64_t elapsed_time = timer.TotalElapsedTime();
125 benchmark->set_score(elapsed_time); 118 benchmark->set_score(elapsed_time);
126 } 119 }
127 120
128
129 #ifndef PRODUCT 121 #ifndef PRODUCT
130 122
131
132 BENCHMARK(CorelibCompilerStats) { 123 BENCHMARK(CorelibCompilerStats) {
133 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); 124 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
134 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); 125 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
135 TransitionNativeToVM transition(thread); 126 TransitionNativeToVM transition(thread);
136 CompilerStats* stats = thread->isolate()->aggregate_compiler_stats(); 127 CompilerStats* stats = thread->isolate()->aggregate_compiler_stats();
137 ASSERT(stats != NULL); 128 ASSERT(stats != NULL);
138 stats->EnableBenchmark(); 129 stats->EnableBenchmark();
139 Timer timer(true, "Compiler stats compiling all of Core lib"); 130 Timer timer(true, "Compiler stats compiling all of Core lib");
140 timer.Start(); 131 timer.Start();
141 const Error& error = Error::Handle(Library::CompileAll()); 132 const Error& error = Error::Handle(Library::CompileAll());
142 if (!error.IsNull()) { 133 if (!error.IsNull()) {
143 OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s", 134 OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s",
144 error.ToErrorCString()); 135 error.ToErrorCString());
145 } 136 }
146 timer.Stop(); 137 timer.Stop();
147 int64_t elapsed_time = timer.TotalElapsedTime(); 138 int64_t elapsed_time = timer.TotalElapsedTime();
148 benchmark->set_score(elapsed_time); 139 benchmark->set_score(elapsed_time);
149 } 140 }
150 141
151
152 BENCHMARK(Dart2JSCompilerStats) { 142 BENCHMARK(Dart2JSCompilerStats) {
153 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); 143 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
154 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); 144 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
155 SetupDart2JSPackagePath(); 145 SetupDart2JSPackagePath();
156 char* dart_root = ComputeDart2JSPath(Benchmark::Executable()); 146 char* dart_root = ComputeDart2JSPath(Benchmark::Executable());
157 char* script = NULL; 147 char* script = NULL;
158 if (dart_root != NULL) { 148 if (dart_root != NULL) {
159 HANDLESCOPE(thread); 149 HANDLESCOPE(thread);
160 script = OS::SCreate(NULL, "import '%s/pkg/compiler/lib/compiler.dart';", 150 script = OS::SCreate(NULL, "import '%s/pkg/compiler/lib/compiler.dart';",
161 dart_root); 151 dart_root);
(...skipping 21 matching lines...) Expand all
183 FLAG_background_compilation = old_flag; 173 FLAG_background_compilation = old_flag;
184 #endif 174 #endif
185 EXPECT_VALID(result); 175 EXPECT_VALID(result);
186 timer.Stop(); 176 timer.Stop();
187 int64_t elapsed_time = timer.TotalElapsedTime(); 177 int64_t elapsed_time = timer.TotalElapsedTime();
188 benchmark->set_score(elapsed_time); 178 benchmark->set_score(elapsed_time);
189 free(dart_root); 179 free(dart_root);
190 free(script); 180 free(script);
191 } 181 }
192 182
193
194 #endif // !PRODUCT 183 #endif // !PRODUCT
195 184
196
197 // 185 //
198 // Measure creation of core isolate from a snapshot. 186 // Measure creation of core isolate from a snapshot.
199 // 187 //
200 BENCHMARK(CorelibIsolateStartup) { 188 BENCHMARK(CorelibIsolateStartup) {
201 const int kNumIterations = 1000; 189 const int kNumIterations = 1000;
202 Timer timer(true, "CorelibIsolateStartup"); 190 Timer timer(true, "CorelibIsolateStartup");
203 Isolate* isolate = thread->isolate(); 191 Isolate* isolate = thread->isolate();
204 Dart_ExitIsolate(); 192 Dart_ExitIsolate();
205 for (int i = 0; i < kNumIterations; i++) { 193 for (int i = 0; i < kNumIterations; i++) {
206 timer.Start(); 194 timer.Start();
207 TestCase::CreateTestIsolate(); 195 TestCase::CreateTestIsolate();
208 timer.Stop(); 196 timer.Stop();
209 Dart_ShutdownIsolate(); 197 Dart_ShutdownIsolate();
210 } 198 }
211 benchmark->set_score(timer.TotalElapsedTime() / kNumIterations); 199 benchmark->set_score(timer.TotalElapsedTime() / kNumIterations);
212 Dart_EnterIsolate(reinterpret_cast<Dart_Isolate>(isolate)); 200 Dart_EnterIsolate(reinterpret_cast<Dart_Isolate>(isolate));
213 } 201 }
214 202
215
216 // 203 //
217 // Measure invocation of Dart API functions. 204 // Measure invocation of Dart API functions.
218 // 205 //
219 static void InitNativeFields(Dart_NativeArguments args) { 206 static void InitNativeFields(Dart_NativeArguments args) {
220 Dart_EnterScope(); 207 Dart_EnterScope();
221 int count = Dart_GetNativeArgumentCount(args); 208 int count = Dart_GetNativeArgumentCount(args);
222 EXPECT_EQ(1, count); 209 EXPECT_EQ(1, count);
223 210
224 Dart_Handle recv = Dart_GetNativeArgument(args, 0); 211 Dart_Handle recv = Dart_GetNativeArgument(args, 0);
225 EXPECT_VALID(recv); 212 EXPECT_VALID(recv);
226 Dart_Handle result = Dart_SetNativeInstanceField(recv, 0, 7); 213 Dart_Handle result = Dart_SetNativeInstanceField(recv, 0, 7);
227 EXPECT_VALID(result); 214 EXPECT_VALID(result);
228 215
229 Dart_ExitScope(); 216 Dart_ExitScope();
230 } 217 }
231 218
232
233 // The specific api functions called here are a bit arbitrary. We are 219 // The specific api functions called here are a bit arbitrary. We are
234 // trying to get a sense of the overhead for using the dart api. 220 // trying to get a sense of the overhead for using the dart api.
235 static void UseDartApi(Dart_NativeArguments args) { 221 static void UseDartApi(Dart_NativeArguments args) {
236 int count = Dart_GetNativeArgumentCount(args); 222 int count = Dart_GetNativeArgumentCount(args);
237 EXPECT_EQ(3, count); 223 EXPECT_EQ(3, count);
238 224
239 // Get native field from receiver. 225 // Get native field from receiver.
240 intptr_t receiver_value; 226 intptr_t receiver_value;
241 Dart_Handle result = Dart_GetNativeReceiver(args, &receiver_value); 227 Dart_Handle result = Dart_GetNativeReceiver(args, &receiver_value);
242 EXPECT_VALID(result); 228 EXPECT_VALID(result);
(...skipping 10 matching lines...) Expand all
253 int64_t value1; 239 int64_t value1;
254 result = Dart_IntegerToInt64(param1, &value1); 240 result = Dart_IntegerToInt64(param1, &value1);
255 EXPECT_VALID(result); 241 EXPECT_VALID(result);
256 EXPECT_LE(0, value1); 242 EXPECT_LE(0, value1);
257 EXPECT_LE(value1, 1000000); 243 EXPECT_LE(value1, 1000000);
258 244
259 // Return param + receiver.field. 245 // Return param + receiver.field.
260 Dart_SetReturnValue(args, Dart_NewInteger(value1 * receiver_value)); 246 Dart_SetReturnValue(args, Dart_NewInteger(value1 * receiver_value));
261 } 247 }
262 248
263
264 static Dart_NativeFunction bm_uda_lookup(Dart_Handle name, 249 static Dart_NativeFunction bm_uda_lookup(Dart_Handle name,
265 int argument_count, 250 int argument_count,
266 bool* auto_setup_scope) { 251 bool* auto_setup_scope) {
267 ASSERT(auto_setup_scope != NULL); 252 ASSERT(auto_setup_scope != NULL);
268 *auto_setup_scope = true; 253 *auto_setup_scope = true;
269 const char* cstr = NULL; 254 const char* cstr = NULL;
270 Dart_Handle result = Dart_StringToCString(name, &cstr); 255 Dart_Handle result = Dart_StringToCString(name, &cstr);
271 EXPECT_VALID(result); 256 EXPECT_VALID(result);
272 if (strcmp(cstr, "init") == 0) { 257 if (strcmp(cstr, "init") == 0) {
273 return InitNativeFields; 258 return InitNativeFields;
274 } else { 259 } else {
275 return UseDartApi; 260 return UseDartApi;
276 } 261 }
277 } 262 }
278 263
279
280 BENCHMARK(UseDartApi) { 264 BENCHMARK(UseDartApi) {
281 const int kNumIterations = 1000000; 265 const int kNumIterations = 1000000;
282 const char* kScriptChars = 266 const char* kScriptChars =
283 "class Class extends NativeFieldsWrapper{\n" 267 "class Class extends NativeFieldsWrapper{\n"
284 " int init() native 'init';\n" 268 " int init() native 'init';\n"
285 " int method(int param1, int param2) native 'method';\n" 269 " int method(int param1, int param2) native 'method';\n"
286 "}\n" 270 "}\n"
287 "\n" 271 "\n"
288 "void benchmark(int count) {\n" 272 "void benchmark(int count) {\n"
289 " Class c = new Class();\n" 273 " Class c = new Class();\n"
(...skipping 21 matching lines...) Expand all
311 Dart_Invoke(lib, NewString("benchmark"), 1, args); 295 Dart_Invoke(lib, NewString("benchmark"), 1, args);
312 296
313 Timer timer(true, "UseDartApi benchmark"); 297 Timer timer(true, "UseDartApi benchmark");
314 timer.Start(); 298 timer.Start();
315 Dart_Invoke(lib, NewString("benchmark"), 1, args); 299 Dart_Invoke(lib, NewString("benchmark"), 1, args);
316 timer.Stop(); 300 timer.Stop();
317 int64_t elapsed_time = timer.TotalElapsedTime(); 301 int64_t elapsed_time = timer.TotalElapsedTime();
318 benchmark->set_score(elapsed_time); 302 benchmark->set_score(elapsed_time);
319 } 303 }
320 304
321
322 // 305 //
323 // Measure time accessing internal and external strings. 306 // Measure time accessing internal and external strings.
324 // 307 //
325 BENCHMARK(DartStringAccess) { 308 BENCHMARK(DartStringAccess) {
326 const int kNumIterations = 10000000; 309 const int kNumIterations = 10000000;
327 Timer timer(true, "DartStringAccess benchmark"); 310 Timer timer(true, "DartStringAccess benchmark");
328 timer.Start(); 311 timer.Start();
329 Dart_EnterScope(); 312 Dart_EnterScope();
330 313
331 // Create strings. 314 // Create strings.
(...skipping 18 matching lines...) Expand all
350 EXPECT_EQ(4, str_len); 333 EXPECT_EQ(4, str_len);
351 EXPECT_EQ(&external_peer_data, external_peer); 334 EXPECT_EQ(&external_peer_data, external_peer);
352 } 335 }
353 336
354 Dart_ExitScope(); 337 Dart_ExitScope();
355 timer.Stop(); 338 timer.Stop();
356 int64_t elapsed_time = timer.TotalElapsedTime(); 339 int64_t elapsed_time = timer.TotalElapsedTime();
357 benchmark->set_score(elapsed_time); 340 benchmark->set_score(elapsed_time);
358 } 341 }
359 342
360
361 BENCHMARK(Dart2JSCompileAll) { 343 BENCHMARK(Dart2JSCompileAll) {
362 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); 344 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
363 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); 345 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
364 SetupDart2JSPackagePath(); 346 SetupDart2JSPackagePath();
365 char* dart_root = ComputeDart2JSPath(Benchmark::Executable()); 347 char* dart_root = ComputeDart2JSPath(Benchmark::Executable());
366 char* script = NULL; 348 char* script = NULL;
367 if (dart_root != NULL) { 349 if (dart_root != NULL) {
368 HANDLESCOPE(thread); 350 HANDLESCOPE(thread);
369 script = OS::SCreate(NULL, "import '%s/pkg/compiler/lib/compiler.dart';", 351 script = OS::SCreate(NULL, "import '%s/pkg/compiler/lib/compiler.dart';",
370 dart_root); 352 dart_root);
(...skipping 17 matching lines...) Expand all
388 FLAG_background_compilation = old_flag; 370 FLAG_background_compilation = old_flag;
389 #endif 371 #endif
390 EXPECT_VALID(result); 372 EXPECT_VALID(result);
391 timer.Stop(); 373 timer.Stop();
392 int64_t elapsed_time = timer.TotalElapsedTime(); 374 int64_t elapsed_time = timer.TotalElapsedTime();
393 benchmark->set_score(elapsed_time); 375 benchmark->set_score(elapsed_time);
394 free(dart_root); 376 free(dart_root);
395 free(script); 377 free(script);
396 } 378 }
397 379
398
399 // 380 //
400 // Measure frame lookup during stack traversal. 381 // Measure frame lookup during stack traversal.
401 // 382 //
402 static void StackFrame_accessFrame(Dart_NativeArguments args) { 383 static void StackFrame_accessFrame(Dart_NativeArguments args) {
403 const int kNumIterations = 100; 384 const int kNumIterations = 100;
404 Code& code = Code::Handle(); 385 Code& code = Code::Handle();
405 Timer timer(true, "LookupDartCode benchmark"); 386 Timer timer(true, "LookupDartCode benchmark");
406 timer.Start(); 387 timer.Start();
407 for (int i = 0; i < kNumIterations; i++) { 388 for (int i = 0; i < kNumIterations; i++) {
408 StackFrameIterator frames(StackFrameIterator::kDontValidateFrames, 389 StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
409 Thread::Current(), 390 Thread::Current(),
410 StackFrameIterator::kNoCrossThreadIteration); 391 StackFrameIterator::kNoCrossThreadIteration);
411 StackFrame* frame = frames.NextFrame(); 392 StackFrame* frame = frames.NextFrame();
412 while (frame != NULL) { 393 while (frame != NULL) {
413 if (frame->IsStubFrame()) { 394 if (frame->IsStubFrame()) {
414 code = frame->LookupDartCode(); 395 code = frame->LookupDartCode();
415 EXPECT(code.function() == Function::null()); 396 EXPECT(code.function() == Function::null());
416 } else if (frame->IsDartFrame()) { 397 } else if (frame->IsDartFrame()) {
417 code = frame->LookupDartCode(); 398 code = frame->LookupDartCode();
418 EXPECT(code.function() != Function::null()); 399 EXPECT(code.function() != Function::null());
419 } 400 }
420 frame = frames.NextFrame(); 401 frame = frames.NextFrame();
421 } 402 }
422 } 403 }
423 timer.Stop(); 404 timer.Stop();
424 int64_t elapsed_time = timer.TotalElapsedTime(); 405 int64_t elapsed_time = timer.TotalElapsedTime();
425 Dart_SetReturnValue(args, Dart_NewInteger(elapsed_time)); 406 Dart_SetReturnValue(args, Dart_NewInteger(elapsed_time));
426 } 407 }
427 408
428
429 static Dart_NativeFunction StackFrameNativeResolver(Dart_Handle name, 409 static Dart_NativeFunction StackFrameNativeResolver(Dart_Handle name,
430 int arg_count, 410 int arg_count,
431 bool* auto_setup_scope) { 411 bool* auto_setup_scope) {
432 ASSERT(auto_setup_scope != NULL); 412 ASSERT(auto_setup_scope != NULL);
433 *auto_setup_scope = false; 413 *auto_setup_scope = false;
434 return &StackFrame_accessFrame; 414 return &StackFrame_accessFrame;
435 } 415 }
436 416
437
438 // Unit test case to verify stack frame iteration. 417 // Unit test case to verify stack frame iteration.
439 BENCHMARK(FrameLookup) { 418 BENCHMARK(FrameLookup) {
440 const char* kScriptChars = 419 const char* kScriptChars =
441 "class StackFrame {" 420 "class StackFrame {"
442 " static int accessFrame() native \"StackFrame_accessFrame\";" 421 " static int accessFrame() native \"StackFrame_accessFrame\";"
443 "} " 422 "} "
444 "class First {" 423 "class First {"
445 " First() { }" 424 " First() { }"
446 " int method1(int param) {" 425 " int method1(int param) {"
447 " if (param == 1) {" 426 " if (param == 1) {"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 reinterpret_cast<Dart_NativeEntryResolver>(StackFrameNativeResolver)); 459 reinterpret_cast<Dart_NativeEntryResolver>(StackFrameNativeResolver));
481 Dart_Handle cls = Dart_GetClass(lib, NewString("StackFrameTest")); 460 Dart_Handle cls = Dart_GetClass(lib, NewString("StackFrameTest"));
482 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL); 461 Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL);
483 EXPECT_VALID(result); 462 EXPECT_VALID(result);
484 int64_t elapsed_time = 0; 463 int64_t elapsed_time = 0;
485 result = Dart_IntegerToInt64(result, &elapsed_time); 464 result = Dart_IntegerToInt64(result, &elapsed_time);
486 EXPECT_VALID(result); 465 EXPECT_VALID(result);
487 benchmark->set_score(elapsed_time); 466 benchmark->set_score(elapsed_time);
488 } 467 }
489 468
490
491 static uint8_t* malloc_allocator(uint8_t* ptr, 469 static uint8_t* malloc_allocator(uint8_t* ptr,
492 intptr_t old_size, 470 intptr_t old_size,
493 intptr_t new_size) { 471 intptr_t new_size) {
494 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); 472 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size));
495 } 473 }
496 474
497
498 static void malloc_deallocator(uint8_t* ptr) { 475 static void malloc_deallocator(uint8_t* ptr) {
499 free(ptr); 476 free(ptr);
500 } 477 }
501 478
502
503 BENCHMARK_SIZE(CoreSnapshotSize) { 479 BENCHMARK_SIZE(CoreSnapshotSize) {
504 const char* kScriptChars = 480 const char* kScriptChars =
505 "import 'dart:async';\n" 481 "import 'dart:async';\n"
506 "import 'dart:core';\n" 482 "import 'dart:core';\n"
507 "import 'dart:collection';\n" 483 "import 'dart:collection';\n"
508 "import 'dart:_internal';\n" 484 "import 'dart:_internal';\n"
509 "import 'dart:math';\n" 485 "import 'dart:math';\n"
510 "import 'dart:isolate';\n" 486 "import 'dart:isolate';\n"
511 "import 'dart:mirrors';\n" 487 "import 'dart:mirrors';\n"
512 "import 'dart:typed_data';\n" 488 "import 'dart:typed_data';\n"
(...skipping 14 matching lines...) Expand all
527 writer.WriteFullSnapshot(); 503 writer.WriteFullSnapshot();
528 const Snapshot* snapshot = 504 const Snapshot* snapshot =
529 Snapshot::SetupFromBuffer(isolate_snapshot_data_buffer); 505 Snapshot::SetupFromBuffer(isolate_snapshot_data_buffer);
530 ASSERT(snapshot->kind() == Snapshot::kFull); 506 ASSERT(snapshot->kind() == Snapshot::kFull);
531 benchmark->set_score(snapshot->length()); 507 benchmark->set_score(snapshot->length());
532 508
533 free(vm_snapshot_data_buffer); 509 free(vm_snapshot_data_buffer);
534 free(isolate_snapshot_data_buffer); 510 free(isolate_snapshot_data_buffer);
535 } 511 }
536 512
537
538 BENCHMARK_SIZE(StandaloneSnapshotSize) { 513 BENCHMARK_SIZE(StandaloneSnapshotSize) {
539 const char* kScriptChars = 514 const char* kScriptChars =
540 "import 'dart:async';\n" 515 "import 'dart:async';\n"
541 "import 'dart:core';\n" 516 "import 'dart:core';\n"
542 "import 'dart:collection';\n" 517 "import 'dart:collection';\n"
543 "import 'dart:_internal';\n" 518 "import 'dart:_internal';\n"
544 "import 'dart:convert';\n" 519 "import 'dart:convert';\n"
545 "import 'dart:math';\n" 520 "import 'dart:math';\n"
546 "import 'dart:isolate';\n" 521 "import 'dart:isolate';\n"
547 "import 'dart:mirrors';\n" 522 "import 'dart:mirrors';\n"
(...skipping 17 matching lines...) Expand all
565 writer.WriteFullSnapshot(); 540 writer.WriteFullSnapshot();
566 const Snapshot* snapshot = 541 const Snapshot* snapshot =
567 Snapshot::SetupFromBuffer(isolate_snapshot_data_buffer); 542 Snapshot::SetupFromBuffer(isolate_snapshot_data_buffer);
568 ASSERT(snapshot->kind() == Snapshot::kFull); 543 ASSERT(snapshot->kind() == Snapshot::kFull);
569 benchmark->set_score(snapshot->length()); 544 benchmark->set_score(snapshot->length());
570 545
571 free(vm_snapshot_data_buffer); 546 free(vm_snapshot_data_buffer);
572 free(isolate_snapshot_data_buffer); 547 free(isolate_snapshot_data_buffer);
573 } 548 }
574 549
575
576 BENCHMARK(CreateMirrorSystem) { 550 BENCHMARK(CreateMirrorSystem) {
577 const char* kScriptChars = 551 const char* kScriptChars =
578 "import 'dart:mirrors';\n" 552 "import 'dart:mirrors';\n"
579 "\n" 553 "\n"
580 "void benchmark() {\n" 554 "void benchmark() {\n"
581 " currentMirrorSystem();\n" 555 " currentMirrorSystem();\n"
582 "}\n"; 556 "}\n";
583 557
584 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 558 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
585 559
586 Timer timer(true, "currentMirrorSystem() benchmark"); 560 Timer timer(true, "currentMirrorSystem() benchmark");
587 timer.Start(); 561 timer.Start();
588 Dart_Invoke(lib, NewString("benchmark"), 0, NULL); 562 Dart_Invoke(lib, NewString("benchmark"), 0, NULL);
589 timer.Stop(); 563 timer.Stop();
590 int64_t elapsed_time = timer.TotalElapsedTime(); 564 int64_t elapsed_time = timer.TotalElapsedTime();
591 benchmark->set_score(elapsed_time); 565 benchmark->set_score(elapsed_time);
592 } 566 }
593 567
594
595 BENCHMARK(EnterExitIsolate) { 568 BENCHMARK(EnterExitIsolate) {
596 const char* kScriptChars = 569 const char* kScriptChars =
597 "import 'dart:core';\n" 570 "import 'dart:core';\n"
598 "\n"; 571 "\n";
599 const intptr_t kLoopCount = 1000000; 572 const intptr_t kLoopCount = 1000000;
600 TestCase::LoadTestScript(kScriptChars, NULL); 573 TestCase::LoadTestScript(kScriptChars, NULL);
601 Api::CheckAndFinalizePendingClasses(thread); 574 Api::CheckAndFinalizePendingClasses(thread);
602 Dart_Isolate isolate = Dart_CurrentIsolate(); 575 Dart_Isolate isolate = Dart_CurrentIsolate();
603 Timer timer(true, "Enter and Exit isolate"); 576 Timer timer(true, "Enter and Exit isolate");
604 timer.Start(); 577 timer.Start();
605 for (intptr_t i = 0; i < kLoopCount; i++) { 578 for (intptr_t i = 0; i < kLoopCount; i++) {
606 Dart_ExitIsolate(); 579 Dart_ExitIsolate();
607 Dart_EnterIsolate(isolate); 580 Dart_EnterIsolate(isolate);
608 } 581 }
609 timer.Stop(); 582 timer.Stop();
610 int64_t elapsed_time = timer.TotalElapsedTime(); 583 int64_t elapsed_time = timer.TotalElapsedTime();
611 benchmark->set_score(elapsed_time); 584 benchmark->set_score(elapsed_time);
612 } 585 }
613 586
614
615 static uint8_t message_buffer[64]; 587 static uint8_t message_buffer[64];
616 static uint8_t* message_allocator(uint8_t* ptr, 588 static uint8_t* message_allocator(uint8_t* ptr,
617 intptr_t old_size, 589 intptr_t old_size,
618 intptr_t new_size) { 590 intptr_t new_size) {
619 return message_buffer; 591 return message_buffer;
620 } 592 }
621 static void message_deallocator(uint8_t* ptr) {} 593 static void message_deallocator(uint8_t* ptr) {}
622 594
623
624 BENCHMARK(SerializeNull) { 595 BENCHMARK(SerializeNull) {
625 const Object& null_object = Object::Handle(); 596 const Object& null_object = Object::Handle();
626 const intptr_t kLoopCount = 1000000; 597 const intptr_t kLoopCount = 1000000;
627 uint8_t* buffer; 598 uint8_t* buffer;
628 Timer timer(true, "Serialize Null"); 599 Timer timer(true, "Serialize Null");
629 timer.Start(); 600 timer.Start();
630 for (intptr_t i = 0; i < kLoopCount; i++) { 601 for (intptr_t i = 0; i < kLoopCount; i++) {
631 StackZone zone(thread); 602 StackZone zone(thread);
632 MessageWriter writer(&buffer, &message_allocator, &message_deallocator, 603 MessageWriter writer(&buffer, &message_allocator, &message_deallocator,
633 true); 604 true);
634 writer.WriteMessage(null_object); 605 writer.WriteMessage(null_object);
635 intptr_t buffer_len = writer.BytesWritten(); 606 intptr_t buffer_len = writer.BytesWritten();
636 607
637 // Read object back from the snapshot. 608 // Read object back from the snapshot.
638 MessageSnapshotReader reader(buffer, buffer_len, thread); 609 MessageSnapshotReader reader(buffer, buffer_len, thread);
639 reader.ReadObject(); 610 reader.ReadObject();
640 } 611 }
641 timer.Stop(); 612 timer.Stop();
642 int64_t elapsed_time = timer.TotalElapsedTime(); 613 int64_t elapsed_time = timer.TotalElapsedTime();
643 benchmark->set_score(elapsed_time); 614 benchmark->set_score(elapsed_time);
644 } 615 }
645 616
646
647 BENCHMARK(SerializeSmi) { 617 BENCHMARK(SerializeSmi) {
648 const Integer& smi_object = Integer::Handle(Smi::New(42)); 618 const Integer& smi_object = Integer::Handle(Smi::New(42));
649 const intptr_t kLoopCount = 1000000; 619 const intptr_t kLoopCount = 1000000;
650 uint8_t* buffer; 620 uint8_t* buffer;
651 Timer timer(true, "Serialize Smi"); 621 Timer timer(true, "Serialize Smi");
652 timer.Start(); 622 timer.Start();
653 for (intptr_t i = 0; i < kLoopCount; i++) { 623 for (intptr_t i = 0; i < kLoopCount; i++) {
654 StackZone zone(thread); 624 StackZone zone(thread);
655 MessageWriter writer(&buffer, &message_allocator, &message_deallocator, 625 MessageWriter writer(&buffer, &message_allocator, &message_deallocator,
656 true); 626 true);
657 writer.WriteMessage(smi_object); 627 writer.WriteMessage(smi_object);
658 intptr_t buffer_len = writer.BytesWritten(); 628 intptr_t buffer_len = writer.BytesWritten();
659 629
660 // Read object back from the snapshot. 630 // Read object back from the snapshot.
661 MessageSnapshotReader reader(buffer, buffer_len, thread); 631 MessageSnapshotReader reader(buffer, buffer_len, thread);
662 reader.ReadObject(); 632 reader.ReadObject();
663 } 633 }
664 timer.Stop(); 634 timer.Stop();
665 int64_t elapsed_time = timer.TotalElapsedTime(); 635 int64_t elapsed_time = timer.TotalElapsedTime();
666 benchmark->set_score(elapsed_time); 636 benchmark->set_score(elapsed_time);
667 } 637 }
668 638
669
670 BENCHMARK(SimpleMessage) { 639 BENCHMARK(SimpleMessage) {
671 TransitionNativeToVM transition(thread); 640 TransitionNativeToVM transition(thread);
672 const Array& array_object = Array::Handle(Array::New(2)); 641 const Array& array_object = Array::Handle(Array::New(2));
673 array_object.SetAt(0, Integer::Handle(Smi::New(42))); 642 array_object.SetAt(0, Integer::Handle(Smi::New(42)));
674 array_object.SetAt(1, Object::Handle()); 643 array_object.SetAt(1, Object::Handle());
675 const intptr_t kLoopCount = 1000000; 644 const intptr_t kLoopCount = 1000000;
676 uint8_t* buffer; 645 uint8_t* buffer;
677 Timer timer(true, "Simple Message"); 646 Timer timer(true, "Simple Message");
678 timer.Start(); 647 timer.Start();
679 for (intptr_t i = 0; i < kLoopCount; i++) { 648 for (intptr_t i = 0; i < kLoopCount; i++) {
680 StackZone zone(thread); 649 StackZone zone(thread);
681 MessageWriter writer(&buffer, &malloc_allocator, &malloc_deallocator, true); 650 MessageWriter writer(&buffer, &malloc_allocator, &malloc_deallocator, true);
682 writer.WriteMessage(array_object); 651 writer.WriteMessage(array_object);
683 intptr_t buffer_len = writer.BytesWritten(); 652 intptr_t buffer_len = writer.BytesWritten();
684 653
685 // Read object back from the snapshot. 654 // Read object back from the snapshot.
686 MessageSnapshotReader reader(buffer, buffer_len, thread); 655 MessageSnapshotReader reader(buffer, buffer_len, thread);
687 reader.ReadObject(); 656 reader.ReadObject();
688 free(buffer); 657 free(buffer);
689 } 658 }
690 timer.Stop(); 659 timer.Stop();
691 int64_t elapsed_time = timer.TotalElapsedTime(); 660 int64_t elapsed_time = timer.TotalElapsedTime();
692 benchmark->set_score(elapsed_time); 661 benchmark->set_score(elapsed_time);
693 } 662 }
694 663
695
696 BENCHMARK(LargeMap) { 664 BENCHMARK(LargeMap) {
697 const char* kScript = 665 const char* kScript =
698 "makeMap() {\n" 666 "makeMap() {\n"
699 " Map m = {};\n" 667 " Map m = {};\n"
700 " for (int i = 0; i < 100000; ++i) m[i*13+i*(i>>7)] = i;\n" 668 " for (int i = 0; i < 100000; ++i) m[i*13+i*(i>>7)] = i;\n"
701 " return m;\n" 669 " return m;\n"
702 "}"; 670 "}";
703 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); 671 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
704 EXPECT_VALID(h_lib); 672 EXPECT_VALID(h_lib);
705 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL); 673 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL);
(...skipping 13 matching lines...) Expand all
719 // Read object back from the snapshot. 687 // Read object back from the snapshot.
720 MessageSnapshotReader reader(buffer, buffer_len, thread); 688 MessageSnapshotReader reader(buffer, buffer_len, thread);
721 reader.ReadObject(); 689 reader.ReadObject();
722 free(buffer); 690 free(buffer);
723 } 691 }
724 timer.Stop(); 692 timer.Stop();
725 int64_t elapsed_time = timer.TotalElapsedTime(); 693 int64_t elapsed_time = timer.TotalElapsedTime();
726 benchmark->set_score(elapsed_time); 694 benchmark->set_score(elapsed_time);
727 } 695 }
728 696
729
730 BENCHMARK_MEMORY(InitialRSS) { 697 BENCHMARK_MEMORY(InitialRSS) {
731 benchmark->set_score(OS::MaxRSS()); 698 benchmark->set_score(OS::MaxRSS());
732 } 699 }
733 700
734 } // namespace dart 701 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/benchmark_test.h ('k') | runtime/vm/bigint_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698