| 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" | 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 | 9 |
| 10 #include "platform/assert.h" | 10 #include "platform/assert.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 Dart_Handle result = Dart_SetNativeInstanceField(recv, 0, 7); | 99 Dart_Handle result = Dart_SetNativeInstanceField(recv, 0, 7); |
| 100 EXPECT_VALID(result); | 100 EXPECT_VALID(result); |
| 101 | 101 |
| 102 Dart_ExitScope(); | 102 Dart_ExitScope(); |
| 103 } | 103 } |
| 104 | 104 |
| 105 | 105 |
| 106 // The specific api functions called here are a bit arbitrary. We are | 106 // The specific api functions called here are a bit arbitrary. We are |
| 107 // trying to get a sense of the overhead for using the dart api. | 107 // trying to get a sense of the overhead for using the dart api. |
| 108 static void UseDartApi(Dart_NativeArguments args) { | 108 static void UseDartApi(Dart_NativeArguments args) { |
| 109 Dart_EnterScope(); | |
| 110 int count = Dart_GetNativeArgumentCount(args); | 109 int count = Dart_GetNativeArgumentCount(args); |
| 111 EXPECT_EQ(3, count); | 110 EXPECT_EQ(3, count); |
| 112 | 111 |
| 113 // Get native field from receiver. | 112 // Get native field from receiver. |
| 114 intptr_t receiver_value; | 113 intptr_t receiver_value; |
| 115 Dart_Handle result = Dart_GetNativeReceiver(args, &receiver_value); | 114 Dart_Handle result = Dart_GetNativeReceiver(args, &receiver_value); |
| 116 EXPECT_VALID(result); | 115 EXPECT_VALID(result); |
| 117 EXPECT_EQ(7, receiver_value); | 116 EXPECT_EQ(7, receiver_value); |
| 118 | 117 |
| 119 // Get param1. | 118 // Get param1. |
| 120 Dart_Handle param1 = Dart_GetNativeArgument(args, 1); | 119 Dart_Handle param1 = Dart_GetNativeArgument(args, 1); |
| 121 EXPECT_VALID(param1); | 120 EXPECT_VALID(param1); |
| 122 EXPECT(Dart_IsInteger(param1)); | 121 EXPECT(Dart_IsInteger(param1)); |
| 123 bool fits = false; | 122 bool fits = false; |
| 124 result = Dart_IntegerFitsIntoInt64(param1, &fits); | 123 result = Dart_IntegerFitsIntoInt64(param1, &fits); |
| 125 EXPECT_VALID(result); | 124 EXPECT_VALID(result); |
| 126 EXPECT(fits); | 125 EXPECT(fits); |
| 127 int64_t value1; | 126 int64_t value1; |
| 128 result = Dart_IntegerToInt64(param1, &value1); | 127 result = Dart_IntegerToInt64(param1, &value1); |
| 129 EXPECT_VALID(result); | 128 EXPECT_VALID(result); |
| 130 EXPECT_LE(0, value1); | 129 EXPECT_LE(0, value1); |
| 131 EXPECT_LE(value1, 1000000); | 130 EXPECT_LE(value1, 1000000); |
| 132 | 131 |
| 133 // Return param + receiver.field. | 132 // Return param + receiver.field. |
| 134 Dart_SetReturnValue(args, Dart_NewInteger(value1 * receiver_value)); | 133 Dart_SetReturnValue(args, Dart_NewInteger(value1 * receiver_value)); |
| 135 Dart_ExitScope(); | |
| 136 } | 134 } |
| 137 | 135 |
| 138 | 136 |
| 139 static Dart_NativeFunction bm_uda_lookup(Dart_Handle name, int argument_count) { | 137 static Dart_NativeFunction bm_uda_lookup(Dart_Handle name, int argument_count) { |
| 140 const char* cstr = NULL; | 138 const char* cstr = NULL; |
| 141 Dart_Handle result = Dart_StringToCString(name, &cstr); | 139 Dart_Handle result = Dart_StringToCString(name, &cstr); |
| 142 EXPECT_VALID(result); | 140 EXPECT_VALID(result); |
| 143 if (strcmp(cstr, "init") == 0) { | 141 if (strcmp(cstr, "init") == 0) { |
| 144 return InitNativeFields; | 142 return InitNativeFields; |
| 145 } else { | 143 } else { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 free(dart_root); | 297 free(dart_root); |
| 300 free(script); | 298 free(script); |
| 301 } | 299 } |
| 302 | 300 |
| 303 | 301 |
| 304 // | 302 // |
| 305 // Measure frame lookup during stack traversal. | 303 // Measure frame lookup during stack traversal. |
| 306 // | 304 // |
| 307 static void StackFrame_accessFrame(Dart_NativeArguments args) { | 305 static void StackFrame_accessFrame(Dart_NativeArguments args) { |
| 308 const int kNumIterations = 100; | 306 const int kNumIterations = 100; |
| 309 Dart_EnterScope(); | |
| 310 Code& code = Code::Handle(); | 307 Code& code = Code::Handle(); |
| 311 Timer timer(true, "LookupDartCode benchmark"); | 308 Timer timer(true, "LookupDartCode benchmark"); |
| 312 timer.Start(); | 309 timer.Start(); |
| 313 for (int i = 0; i < kNumIterations; i++) { | 310 for (int i = 0; i < kNumIterations; i++) { |
| 314 StackFrameIterator frames(StackFrameIterator::kDontValidateFrames); | 311 StackFrameIterator frames(StackFrameIterator::kDontValidateFrames); |
| 315 StackFrame* frame = frames.NextFrame(); | 312 StackFrame* frame = frames.NextFrame(); |
| 316 while (frame != NULL) { | 313 while (frame != NULL) { |
| 317 if (frame->IsStubFrame()) { | 314 if (frame->IsStubFrame()) { |
| 318 code = frame->LookupDartCode(); | 315 code = frame->LookupDartCode(); |
| 319 EXPECT(code.function() == Function::null()); | 316 EXPECT(code.function() == Function::null()); |
| 320 } else if (frame->IsDartFrame()) { | 317 } else if (frame->IsDartFrame()) { |
| 321 code = frame->LookupDartCode(); | 318 code = frame->LookupDartCode(); |
| 322 EXPECT(code.function() != Function::null()); | 319 EXPECT(code.function() != Function::null()); |
| 323 } | 320 } |
| 324 frame = frames.NextFrame(); | 321 frame = frames.NextFrame(); |
| 325 } | 322 } |
| 326 } | 323 } |
| 327 timer.Stop(); | 324 timer.Stop(); |
| 328 int64_t elapsed_time = timer.TotalElapsedTime(); | 325 int64_t elapsed_time = timer.TotalElapsedTime(); |
| 329 Dart_SetReturnValue(args, Dart_NewInteger(elapsed_time)); | 326 Dart_SetReturnValue(args, Dart_NewInteger(elapsed_time)); |
| 330 Dart_ExitScope(); | |
| 331 } | 327 } |
| 332 | 328 |
| 333 | 329 |
| 334 static Dart_NativeFunction StackFrameNativeResolver(Dart_Handle name, | 330 static Dart_NativeFunction StackFrameNativeResolver(Dart_Handle name, |
| 335 int arg_count) { | 331 int arg_count) { |
| 336 return &StackFrame_accessFrame; | 332 return &StackFrame_accessFrame; |
| 337 } | 333 } |
| 338 | 334 |
| 339 | 335 |
| 340 // Unit test case to verify stack frame iteration. | 336 // Unit test case to verify stack frame iteration. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 | 460 |
| 465 Timer timer(true, "currentMirrorSystem() benchmark"); | 461 Timer timer(true, "currentMirrorSystem() benchmark"); |
| 466 timer.Start(); | 462 timer.Start(); |
| 467 Dart_Invoke(lib, NewString("benchmark"), 0, NULL); | 463 Dart_Invoke(lib, NewString("benchmark"), 0, NULL); |
| 468 timer.Stop(); | 464 timer.Stop(); |
| 469 int64_t elapsed_time = timer.TotalElapsedTime(); | 465 int64_t elapsed_time = timer.TotalElapsedTime(); |
| 470 benchmark->set_score(elapsed_time); | 466 benchmark->set_score(elapsed_time); |
| 471 } | 467 } |
| 472 | 468 |
| 473 } // namespace dart | 469 } // namespace dart |
| OLD | NEW |