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 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 DART_CHECK_VALID(result); | 346 DART_CHECK_VALID(result); |
347 } | 347 } |
348 | 348 |
349 BENCHMARK(Dart2JSCompileAll) { | 349 BENCHMARK(Dart2JSCompileAll) { |
350 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); | 350 bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary); |
351 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); | 351 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); |
352 SetupDart2JSPackagePath(); | 352 SetupDart2JSPackagePath(); |
353 char* dart_root = ComputeDart2JSPath(Benchmark::Executable()); | 353 char* dart_root = ComputeDart2JSPath(Benchmark::Executable()); |
354 char* script = NULL; | 354 char* script = NULL; |
355 if (dart_root != NULL) { | 355 if (dart_root != NULL) { |
356 Isolate* isolate = Isolate::Current(); | 356 HANDLESCOPE(thread); |
357 HANDLESCOPE(isolate); | |
358 const char* kFormatStr = | 357 const char* kFormatStr = |
359 "import '%s/pkg/compiler/lib/compiler.dart';"; | 358 "import '%s/pkg/compiler/lib/compiler.dart';"; |
360 intptr_t len = OS::SNPrint(NULL, 0, kFormatStr, dart_root) + 1; | 359 intptr_t len = OS::SNPrint(NULL, 0, kFormatStr, dart_root) + 1; |
361 script = reinterpret_cast<char*>(malloc(len)); | 360 script = reinterpret_cast<char*>(malloc(len)); |
362 EXPECT(script != NULL); | 361 EXPECT(script != NULL); |
363 OS::SNPrint(script, len, kFormatStr, dart_root); | 362 OS::SNPrint(script, len, kFormatStr, dart_root); |
364 Dart_Handle lib = TestCase::LoadTestScript( | 363 Dart_Handle lib = TestCase::LoadTestScript( |
365 script, | 364 script, |
366 reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver)); | 365 reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver)); |
367 EXPECT_VALID(lib); | 366 EXPECT_VALID(lib); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 static uint8_t message_buffer[64]; | 587 static uint8_t message_buffer[64]; |
589 static uint8_t* message_allocator( | 588 static uint8_t* message_allocator( |
590 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 589 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
591 return message_buffer; | 590 return message_buffer; |
592 } | 591 } |
593 | 592 |
594 | 593 |
595 BENCHMARK(SerializeNull) { | 594 BENCHMARK(SerializeNull) { |
596 const Object& null_object = Object::Handle(); | 595 const Object& null_object = Object::Handle(); |
597 const intptr_t kLoopCount = 1000000; | 596 const intptr_t kLoopCount = 1000000; |
598 Isolate* isolate = Isolate::Current(); | 597 Isolate* isolate = thread->isolate(); |
599 uint8_t* buffer; | 598 uint8_t* buffer; |
600 Timer timer(true, "Serialize Null"); | 599 Timer timer(true, "Serialize Null"); |
601 timer.Start(); | 600 timer.Start(); |
602 for (intptr_t i = 0; i < kLoopCount; i++) { | 601 for (intptr_t i = 0; i < kLoopCount; i++) { |
603 StackZone zone(isolate); | 602 StackZone zone(isolate); |
604 MessageWriter writer(&buffer, &message_allocator, true); | 603 MessageWriter writer(&buffer, &message_allocator, true); |
605 writer.WriteMessage(null_object); | 604 writer.WriteMessage(null_object); |
606 intptr_t buffer_len = writer.BytesWritten(); | 605 intptr_t buffer_len = writer.BytesWritten(); |
607 | 606 |
608 // Read object back from the snapshot. | 607 // Read object back from the snapshot. |
609 MessageSnapshotReader reader(buffer, | 608 MessageSnapshotReader reader(buffer, |
610 buffer_len, | 609 buffer_len, |
611 isolate, | 610 thread); |
612 zone.GetZone()); | |
613 reader.ReadObject(); | 611 reader.ReadObject(); |
614 } | 612 } |
615 timer.Stop(); | 613 timer.Stop(); |
616 int64_t elapsed_time = timer.TotalElapsedTime(); | 614 int64_t elapsed_time = timer.TotalElapsedTime(); |
617 benchmark->set_score(elapsed_time); | 615 benchmark->set_score(elapsed_time); |
618 } | 616 } |
619 | 617 |
620 | 618 |
621 BENCHMARK(SerializeSmi) { | 619 BENCHMARK(SerializeSmi) { |
622 const Integer& smi_object = Integer::Handle(Smi::New(42)); | 620 const Integer& smi_object = Integer::Handle(Smi::New(42)); |
623 const intptr_t kLoopCount = 1000000; | 621 const intptr_t kLoopCount = 1000000; |
624 Isolate* isolate = Isolate::Current(); | 622 Isolate* isolate = thread->isolate(); |
625 uint8_t* buffer; | 623 uint8_t* buffer; |
626 Timer timer(true, "Serialize Smi"); | 624 Timer timer(true, "Serialize Smi"); |
627 timer.Start(); | 625 timer.Start(); |
628 for (intptr_t i = 0; i < kLoopCount; i++) { | 626 for (intptr_t i = 0; i < kLoopCount; i++) { |
629 StackZone zone(isolate); | 627 StackZone zone(isolate); |
630 MessageWriter writer(&buffer, &message_allocator, true); | 628 MessageWriter writer(&buffer, &message_allocator, true); |
631 writer.WriteMessage(smi_object); | 629 writer.WriteMessage(smi_object); |
632 intptr_t buffer_len = writer.BytesWritten(); | 630 intptr_t buffer_len = writer.BytesWritten(); |
633 | 631 |
634 // Read object back from the snapshot. | 632 // Read object back from the snapshot. |
635 MessageSnapshotReader reader(buffer, | 633 MessageSnapshotReader reader(buffer, |
636 buffer_len, | 634 buffer_len, |
637 isolate, | 635 thread); |
638 zone.GetZone()); | |
639 reader.ReadObject(); | 636 reader.ReadObject(); |
640 } | 637 } |
641 timer.Stop(); | 638 timer.Stop(); |
642 int64_t elapsed_time = timer.TotalElapsedTime(); | 639 int64_t elapsed_time = timer.TotalElapsedTime(); |
643 benchmark->set_score(elapsed_time); | 640 benchmark->set_score(elapsed_time); |
644 } | 641 } |
645 | 642 |
646 | 643 |
647 BENCHMARK(SimpleMessage) { | 644 BENCHMARK(SimpleMessage) { |
648 const Array& array_object = Array::Handle(Array::New(2)); | 645 const Array& array_object = Array::Handle(Array::New(2)); |
649 array_object.SetAt(0, Integer::Handle(Smi::New(42))); | 646 array_object.SetAt(0, Integer::Handle(Smi::New(42))); |
650 array_object.SetAt(1, Object::Handle()); | 647 array_object.SetAt(1, Object::Handle()); |
651 const intptr_t kLoopCount = 1000000; | 648 const intptr_t kLoopCount = 1000000; |
652 Isolate* isolate = Isolate::Current(); | 649 Isolate* isolate = thread->isolate(); |
653 uint8_t* buffer; | 650 uint8_t* buffer; |
654 Timer timer(true, "Simple Message"); | 651 Timer timer(true, "Simple Message"); |
655 timer.Start(); | 652 timer.Start(); |
656 for (intptr_t i = 0; i < kLoopCount; i++) { | 653 for (intptr_t i = 0; i < kLoopCount; i++) { |
657 StackZone zone(isolate); | 654 StackZone zone(isolate); |
658 MessageWriter writer(&buffer, &malloc_allocator, true); | 655 MessageWriter writer(&buffer, &malloc_allocator, true); |
659 writer.WriteMessage(array_object); | 656 writer.WriteMessage(array_object); |
660 intptr_t buffer_len = writer.BytesWritten(); | 657 intptr_t buffer_len = writer.BytesWritten(); |
661 | 658 |
662 // Read object back from the snapshot. | 659 // Read object back from the snapshot. |
663 MessageSnapshotReader reader(buffer, | 660 MessageSnapshotReader reader(buffer, |
664 buffer_len, | 661 buffer_len, |
665 isolate, | 662 thread); |
666 zone.GetZone()); | |
667 reader.ReadObject(); | 663 reader.ReadObject(); |
668 free(buffer); | 664 free(buffer); |
669 } | 665 } |
670 timer.Stop(); | 666 timer.Stop(); |
671 int64_t elapsed_time = timer.TotalElapsedTime(); | 667 int64_t elapsed_time = timer.TotalElapsedTime(); |
672 benchmark->set_score(elapsed_time); | 668 benchmark->set_score(elapsed_time); |
673 } | 669 } |
674 | 670 |
675 | 671 |
676 BENCHMARK(LargeMap) { | 672 BENCHMARK(LargeMap) { |
677 const char* kScript = | 673 const char* kScript = |
678 "makeMap() {\n" | 674 "makeMap() {\n" |
679 " Map m = {};\n" | 675 " Map m = {};\n" |
680 " for (int i = 0; i < 100000; ++i) m[i*13+i*(i>>7)] = i;\n" | 676 " for (int i = 0; i < 100000; ++i) m[i*13+i*(i>>7)] = i;\n" |
681 " return m;\n" | 677 " return m;\n" |
682 "}"; | 678 "}"; |
| 679 Isolate* isolate = thread->isolate(); |
683 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); | 680 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); |
684 EXPECT_VALID(h_lib); | 681 EXPECT_VALID(h_lib); |
685 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL); | 682 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL); |
686 EXPECT_VALID(h_result); | 683 EXPECT_VALID(h_result); |
687 Instance& map = Instance::Handle(); | 684 Instance& map = Instance::Handle(); |
688 map ^= Api::UnwrapHandle(h_result); | 685 map ^= Api::UnwrapHandle(h_result); |
689 const intptr_t kLoopCount = 100; | 686 const intptr_t kLoopCount = 100; |
690 Isolate* isolate = Isolate::Current(); | |
691 uint8_t* buffer; | 687 uint8_t* buffer; |
692 Timer timer(true, "Large Map"); | 688 Timer timer(true, "Large Map"); |
693 timer.Start(); | 689 timer.Start(); |
694 for (intptr_t i = 0; i < kLoopCount; i++) { | 690 for (intptr_t i = 0; i < kLoopCount; i++) { |
695 StackZone zone(isolate); | 691 StackZone zone(isolate); |
696 MessageWriter writer(&buffer, &malloc_allocator, true); | 692 MessageWriter writer(&buffer, &malloc_allocator, true); |
697 writer.WriteMessage(map); | 693 writer.WriteMessage(map); |
698 intptr_t buffer_len = writer.BytesWritten(); | 694 intptr_t buffer_len = writer.BytesWritten(); |
699 | 695 |
700 // Read object back from the snapshot. | 696 // Read object back from the snapshot. |
701 MessageSnapshotReader reader(buffer, | 697 MessageSnapshotReader reader(buffer, |
702 buffer_len, | 698 buffer_len, |
703 isolate, | 699 thread); |
704 zone.GetZone()); | |
705 reader.ReadObject(); | 700 reader.ReadObject(); |
706 free(buffer); | 701 free(buffer); |
707 } | 702 } |
708 timer.Stop(); | 703 timer.Stop(); |
709 int64_t elapsed_time = timer.TotalElapsedTime(); | 704 int64_t elapsed_time = timer.TotalElapsedTime(); |
710 benchmark->set_score(elapsed_time); | 705 benchmark->set_score(elapsed_time); |
711 } | 706 } |
712 | 707 |
713 } // namespace dart | 708 } // namespace dart |
OLD | NEW |