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

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

Issue 2629533002: Fix leak of message snapshot buffer when attempting to send an illegal object. (Closed)
Patch Set: Created 3 years, 11 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/lib/vmservice.cc ('k') | runtime/vm/dart_api_impl.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
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 } 484 }
485 485
486 486
487 static uint8_t* malloc_allocator(uint8_t* ptr, 487 static uint8_t* malloc_allocator(uint8_t* ptr,
488 intptr_t old_size, 488 intptr_t old_size,
489 intptr_t new_size) { 489 intptr_t new_size) {
490 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); 490 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size));
491 } 491 }
492 492
493 493
494 static void malloc_deallocator(uint8_t* ptr) {
495 free(ptr);
496 }
497
498
494 BENCHMARK_SIZE(CoreSnapshotSize) { 499 BENCHMARK_SIZE(CoreSnapshotSize) {
495 const char* kScriptChars = 500 const char* kScriptChars =
496 "import 'dart:async';\n" 501 "import 'dart:async';\n"
497 "import 'dart:core';\n" 502 "import 'dart:core';\n"
498 "import 'dart:collection';\n" 503 "import 'dart:collection';\n"
499 "import 'dart:_internal';\n" 504 "import 'dart:_internal';\n"
500 "import 'dart:math';\n" 505 "import 'dart:math';\n"
501 "import 'dart:isolate';\n" 506 "import 'dart:isolate';\n"
502 "import 'dart:mirrors';\n" 507 "import 'dart:mirrors';\n"
503 "import 'dart:typed_data';\n" 508 "import 'dart:typed_data';\n"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 benchmark->set_score(elapsed_time); 605 benchmark->set_score(elapsed_time);
601 } 606 }
602 607
603 608
604 static uint8_t message_buffer[64]; 609 static uint8_t message_buffer[64];
605 static uint8_t* message_allocator(uint8_t* ptr, 610 static uint8_t* message_allocator(uint8_t* ptr,
606 intptr_t old_size, 611 intptr_t old_size,
607 intptr_t new_size) { 612 intptr_t new_size) {
608 return message_buffer; 613 return message_buffer;
609 } 614 }
615 static void message_deallocator(uint8_t* ptr) {}
610 616
611 617
612 BENCHMARK(SerializeNull) { 618 BENCHMARK(SerializeNull) {
613 const Object& null_object = Object::Handle(); 619 const Object& null_object = Object::Handle();
614 const intptr_t kLoopCount = 1000000; 620 const intptr_t kLoopCount = 1000000;
615 uint8_t* buffer; 621 uint8_t* buffer;
616 Timer timer(true, "Serialize Null"); 622 Timer timer(true, "Serialize Null");
617 timer.Start(); 623 timer.Start();
618 for (intptr_t i = 0; i < kLoopCount; i++) { 624 for (intptr_t i = 0; i < kLoopCount; i++) {
619 StackZone zone(thread); 625 StackZone zone(thread);
620 MessageWriter writer(&buffer, &message_allocator, true); 626 MessageWriter writer(&buffer, &message_allocator, &message_deallocator,
627 true);
621 writer.WriteMessage(null_object); 628 writer.WriteMessage(null_object);
622 intptr_t buffer_len = writer.BytesWritten(); 629 intptr_t buffer_len = writer.BytesWritten();
623 630
624 // Read object back from the snapshot. 631 // Read object back from the snapshot.
625 MessageSnapshotReader reader(buffer, buffer_len, thread); 632 MessageSnapshotReader reader(buffer, buffer_len, thread);
626 reader.ReadObject(); 633 reader.ReadObject();
627 } 634 }
628 timer.Stop(); 635 timer.Stop();
629 int64_t elapsed_time = timer.TotalElapsedTime(); 636 int64_t elapsed_time = timer.TotalElapsedTime();
630 benchmark->set_score(elapsed_time); 637 benchmark->set_score(elapsed_time);
631 } 638 }
632 639
633 640
634 BENCHMARK(SerializeSmi) { 641 BENCHMARK(SerializeSmi) {
635 const Integer& smi_object = Integer::Handle(Smi::New(42)); 642 const Integer& smi_object = Integer::Handle(Smi::New(42));
636 const intptr_t kLoopCount = 1000000; 643 const intptr_t kLoopCount = 1000000;
637 uint8_t* buffer; 644 uint8_t* buffer;
638 Timer timer(true, "Serialize Smi"); 645 Timer timer(true, "Serialize Smi");
639 timer.Start(); 646 timer.Start();
640 for (intptr_t i = 0; i < kLoopCount; i++) { 647 for (intptr_t i = 0; i < kLoopCount; i++) {
641 StackZone zone(thread); 648 StackZone zone(thread);
642 MessageWriter writer(&buffer, &message_allocator, true); 649 MessageWriter writer(&buffer, &message_allocator, &message_deallocator,
650 true);
643 writer.WriteMessage(smi_object); 651 writer.WriteMessage(smi_object);
644 intptr_t buffer_len = writer.BytesWritten(); 652 intptr_t buffer_len = writer.BytesWritten();
645 653
646 // Read object back from the snapshot. 654 // Read object back from the snapshot.
647 MessageSnapshotReader reader(buffer, buffer_len, thread); 655 MessageSnapshotReader reader(buffer, buffer_len, thread);
648 reader.ReadObject(); 656 reader.ReadObject();
649 } 657 }
650 timer.Stop(); 658 timer.Stop();
651 int64_t elapsed_time = timer.TotalElapsedTime(); 659 int64_t elapsed_time = timer.TotalElapsedTime();
652 benchmark->set_score(elapsed_time); 660 benchmark->set_score(elapsed_time);
653 } 661 }
654 662
655 663
656 BENCHMARK(SimpleMessage) { 664 BENCHMARK(SimpleMessage) {
657 TransitionNativeToVM transition(thread); 665 TransitionNativeToVM transition(thread);
658 const Array& array_object = Array::Handle(Array::New(2)); 666 const Array& array_object = Array::Handle(Array::New(2));
659 array_object.SetAt(0, Integer::Handle(Smi::New(42))); 667 array_object.SetAt(0, Integer::Handle(Smi::New(42)));
660 array_object.SetAt(1, Object::Handle()); 668 array_object.SetAt(1, Object::Handle());
661 const intptr_t kLoopCount = 1000000; 669 const intptr_t kLoopCount = 1000000;
662 uint8_t* buffer; 670 uint8_t* buffer;
663 Timer timer(true, "Simple Message"); 671 Timer timer(true, "Simple Message");
664 timer.Start(); 672 timer.Start();
665 for (intptr_t i = 0; i < kLoopCount; i++) { 673 for (intptr_t i = 0; i < kLoopCount; i++) {
666 StackZone zone(thread); 674 StackZone zone(thread);
667 MessageWriter writer(&buffer, &malloc_allocator, true); 675 MessageWriter writer(&buffer, &malloc_allocator, &malloc_deallocator, true);
668 writer.WriteMessage(array_object); 676 writer.WriteMessage(array_object);
669 intptr_t buffer_len = writer.BytesWritten(); 677 intptr_t buffer_len = writer.BytesWritten();
670 678
671 // Read object back from the snapshot. 679 // Read object back from the snapshot.
672 MessageSnapshotReader reader(buffer, buffer_len, thread); 680 MessageSnapshotReader reader(buffer, buffer_len, thread);
673 reader.ReadObject(); 681 reader.ReadObject();
674 free(buffer); 682 free(buffer);
675 } 683 }
676 timer.Stop(); 684 timer.Stop();
677 int64_t elapsed_time = timer.TotalElapsedTime(); 685 int64_t elapsed_time = timer.TotalElapsedTime();
(...skipping 13 matching lines...) Expand all
691 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL); 699 Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL);
692 EXPECT_VALID(h_result); 700 EXPECT_VALID(h_result);
693 Instance& map = Instance::Handle(); 701 Instance& map = Instance::Handle();
694 map ^= Api::UnwrapHandle(h_result); 702 map ^= Api::UnwrapHandle(h_result);
695 const intptr_t kLoopCount = 100; 703 const intptr_t kLoopCount = 100;
696 uint8_t* buffer; 704 uint8_t* buffer;
697 Timer timer(true, "Large Map"); 705 Timer timer(true, "Large Map");
698 timer.Start(); 706 timer.Start();
699 for (intptr_t i = 0; i < kLoopCount; i++) { 707 for (intptr_t i = 0; i < kLoopCount; i++) {
700 StackZone zone(thread); 708 StackZone zone(thread);
701 MessageWriter writer(&buffer, &malloc_allocator, true); 709 MessageWriter writer(&buffer, &malloc_allocator, &malloc_deallocator, true);
702 writer.WriteMessage(map); 710 writer.WriteMessage(map);
703 intptr_t buffer_len = writer.BytesWritten(); 711 intptr_t buffer_len = writer.BytesWritten();
704 712
705 // Read object back from the snapshot. 713 // Read object back from the snapshot.
706 MessageSnapshotReader reader(buffer, buffer_len, thread); 714 MessageSnapshotReader reader(buffer, buffer_len, thread);
707 reader.ReadObject(); 715 reader.ReadObject();
708 free(buffer); 716 free(buffer);
709 } 717 }
710 timer.Stop(); 718 timer.Stop();
711 int64_t elapsed_time = timer.TotalElapsedTime(); 719 int64_t elapsed_time = timer.TotalElapsedTime();
712 benchmark->set_score(elapsed_time); 720 benchmark->set_score(elapsed_time);
713 } 721 }
714 722
715 723
716 BENCHMARK_MEMORY(InitialRSS) { 724 BENCHMARK_MEMORY(InitialRSS) {
717 benchmark->set_score(OS::MaxRSS()); 725 benchmark->set_score(OS::MaxRSS());
718 } 726 }
719 727
720 } // namespace dart 728 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/lib/vmservice.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698