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

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

Issue 1170503004: Initial Timeline Events (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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/isolate.h" 5 #include "vm/isolate.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "platform/json.h" 9 #include "platform/json.h"
10 #include "vm/code_observers.h" 10 #include "vm/code_observers.h"
(...skipping 17 matching lines...) Expand all
28 #include "vm/reusable_handles.h" 28 #include "vm/reusable_handles.h"
29 #include "vm/service.h" 29 #include "vm/service.h"
30 #include "vm/service_event.h" 30 #include "vm/service_event.h"
31 #include "vm/service_isolate.h" 31 #include "vm/service_isolate.h"
32 #include "vm/simulator.h" 32 #include "vm/simulator.h"
33 #include "vm/stack_frame.h" 33 #include "vm/stack_frame.h"
34 #include "vm/stub_code.h" 34 #include "vm/stub_code.h"
35 #include "vm/symbols.h" 35 #include "vm/symbols.h"
36 #include "vm/tags.h" 36 #include "vm/tags.h"
37 #include "vm/thread_interrupter.h" 37 #include "vm/thread_interrupter.h"
38 #include "vm/timeline.h"
38 #include "vm/timer.h" 39 #include "vm/timer.h"
39 #include "vm/visitor.h" 40 #include "vm/visitor.h"
40 41
41 42
42 namespace dart { 43 namespace dart {
43 44
44 DEFINE_FLAG(bool, trace_isolates, false, 45 DEFINE_FLAG(bool, trace_isolates, false,
45 "Trace isolate creation and shut down."); 46 "Trace isolate creation and shut down.");
46 DEFINE_FLAG(bool, pause_isolates_on_start, false, 47 DEFINE_FLAG(bool, pause_isolates_on_start, false,
47 "Pause isolates before starting."); 48 "Pause isolates before starting.");
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 edge_counter_increment_size_(-1), 601 edge_counter_increment_size_(-1),
601 compiler_stats_(NULL), 602 compiler_stats_(NULL),
602 is_service_isolate_(false), 603 is_service_isolate_(false),
603 log_(new class Log()), 604 log_(new class Log()),
604 stacktrace_(NULL), 605 stacktrace_(NULL),
605 stack_frame_index_(-1), 606 stack_frame_index_(-1),
606 last_allocationprofile_accumulator_reset_timestamp_(0), 607 last_allocationprofile_accumulator_reset_timestamp_(0),
607 last_allocationprofile_gc_timestamp_(0), 608 last_allocationprofile_gc_timestamp_(0),
608 object_id_ring_(NULL), 609 object_id_ring_(NULL),
609 trace_buffer_(NULL), 610 trace_buffer_(NULL),
611 timeline_event_buffer_(NULL),
610 profiler_data_(NULL), 612 profiler_data_(NULL),
611 thread_state_(NULL), 613 thread_state_(NULL),
612 tag_table_(GrowableObjectArray::null()), 614 tag_table_(GrowableObjectArray::null()),
613 current_tag_(UserTag::null()), 615 current_tag_(UserTag::null()),
614 default_tag_(UserTag::null()), 616 default_tag_(UserTag::null()),
615 deoptimized_code_array_(GrowableObjectArray::null()), 617 deoptimized_code_array_(GrowableObjectArray::null()),
616 metrics_list_head_(NULL), 618 metrics_list_head_(NULL),
617 cha_(NULL), 619 cha_(NULL),
618 next_(NULL), 620 next_(NULL),
619 pause_loop_monitor_(NULL), 621 pause_loop_monitor_(NULL),
(...skipping 27 matching lines...) Expand all
647 delete log_; 649 delete log_;
648 log_ = NULL; 650 log_ = NULL;
649 delete object_id_ring_; 651 delete object_id_ring_;
650 object_id_ring_ = NULL; 652 object_id_ring_ = NULL;
651 delete pause_loop_monitor_; 653 delete pause_loop_monitor_;
652 pause_loop_monitor_ = NULL; 654 pause_loop_monitor_ = NULL;
653 if (compiler_stats_ != NULL) { 655 if (compiler_stats_ != NULL) {
654 delete compiler_stats_; 656 delete compiler_stats_;
655 compiler_stats_ = NULL; 657 compiler_stats_ = NULL;
656 } 658 }
659 RemoveTimelineEventBuffer();
657 } 660 }
658 661
659 662
660 #if defined(DEBUG) 663 #if defined(DEBUG)
661 bool Isolate::IsIsolateOf(Thread* thread) { 664 bool Isolate::IsIsolateOf(Thread* thread) {
662 return this == thread->isolate(); 665 return this == thread->isolate();
663 } 666 }
664 #endif // DEBUG 667 #endif // DEBUG
665 668
666 669
667 void Isolate::InitOnce() { 670 void Isolate::InitOnce() {
668 create_callback_ = NULL; 671 create_callback_ = NULL;
669 isolates_list_monitor_ = new Monitor(); 672 isolates_list_monitor_ = new Monitor();
670 ASSERT(isolates_list_monitor_ != NULL); 673 ASSERT(isolates_list_monitor_ != NULL);
671 } 674 }
672 675
673 676
674 Isolate* Isolate::Init(const char* name_prefix, bool is_vm_isolate) { 677 Isolate* Isolate::Init(const char* name_prefix, bool is_vm_isolate) {
675 Isolate* result = new Isolate(); 678 Isolate* result = new Isolate();
676 ASSERT(result != NULL); 679 ASSERT(result != NULL);
677 680
678 // Initialize metrics. 681 // Initialize metrics.
679 #define ISOLATE_METRIC_INIT(type, variable, name, unit) \ 682 #define ISOLATE_METRIC_INIT(type, variable, name, unit) \
680 result->metric_##variable##_.Init(result, name, NULL, Metric::unit); 683 result->metric_##variable##_.Init(result, name, NULL, Metric::unit);
681 ISOLATE_METRIC_LIST(ISOLATE_METRIC_INIT); 684 ISOLATE_METRIC_LIST(ISOLATE_METRIC_INIT);
682 #undef ISOLATE_METRIC_INIT 685 #undef ISOLATE_METRIC_INIT
683 686
687 // Initialize Timeline streams.
688 #define ISOLATE_TIMELINE_STREAM_INIT(name, enabled_by_default) \
689 result->stream_##name##_.Init(#name, enabled_by_default);
690 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_INIT);
691 #undef ISOLATE_TIMELINE_STREAM_INIT
692
684 // TODO(5411455): For now just set the recently created isolate as 693 // TODO(5411455): For now just set the recently created isolate as
685 // the current isolate. 694 // the current isolate.
686 Thread::EnterIsolate(result); 695 Thread::EnterIsolate(result);
687 696
688 // Setup the isolate specific resuable handles. 697 // Setup the isolate specific resuable handles.
689 #define REUSABLE_HANDLE_ALLOCATION(object) \ 698 #define REUSABLE_HANDLE_ALLOCATION(object) \
690 result->object##_handle_ = result->AllocateReusableHandle<object>(); 699 result->object##_handle_ = result->AllocateReusableHandle<object>();
691 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION) 700 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION)
692 #undef REUSABLE_HANDLE_ALLOCATION 701 #undef REUSABLE_HANDLE_ALLOCATION
693 702
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 api_state()->weak_persistent_handles().VisitHandles(&visitor); 1396 api_state()->weak_persistent_handles().VisitHandles(&visitor);
1388 api_state()->prologue_weak_persistent_handles().VisitHandles(&visitor); 1397 api_state()->prologue_weak_persistent_handles().VisitHandles(&visitor);
1389 1398
1390 if (FLAG_trace_isolates) { 1399 if (FLAG_trace_isolates) {
1391 heap()->PrintSizes(); 1400 heap()->PrintSizes();
1392 megamorphic_cache_table()->PrintSizes(); 1401 megamorphic_cache_table()->PrintSizes();
1393 Symbols::DumpStats(); 1402 Symbols::DumpStats();
1394 OS::Print("[-] Stopping isolate:\n" 1403 OS::Print("[-] Stopping isolate:\n"
1395 "\tisolate: %s\n", name()); 1404 "\tisolate: %s\n", name());
1396 } 1405 }
1406
1407 if (timeline_event_buffer_ != NULL) {
rmacnak 2015/06/08 22:11:30 Behind a flag.
1408 timeline_event_buffer_->Dump();
1409 }
1397 } 1410 }
1398 1411
1399 // TODO(5411455): For now just make sure there are no current isolates 1412 // TODO(5411455): For now just make sure there are no current isolates
1400 // as we are shutting down the isolate. 1413 // as we are shutting down the isolate.
1401 Thread::ExitIsolate(); 1414 Thread::ExitIsolate();
1402 Profiler::ShutdownProfilingForIsolate(this); 1415 Profiler::ShutdownProfilingForIsolate(this);
1403 } 1416 }
1404 1417
1405 1418
1406 Dart_IsolateCreateCallback Isolate::create_callback_ = NULL; 1419 Dart_IsolateCreateCallback Isolate::create_callback_ = NULL;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 } 1498 }
1486 1499
1487 1500
1488 void Isolate::VisitPrologueWeakPersistentHandles(HandleVisitor* visitor) { 1501 void Isolate::VisitPrologueWeakPersistentHandles(HandleVisitor* visitor) {
1489 if (api_state() != NULL) { 1502 if (api_state() != NULL) {
1490 api_state()->VisitPrologueWeakHandles(visitor); 1503 api_state()->VisitPrologueWeakHandles(visitor);
1491 } 1504 }
1492 } 1505 }
1493 1506
1494 1507
1508 void Isolate::SetTimelineEventBuffer(
1509 TimelineEventBuffer* timeline_event_buffer) {
1510 #define ISOLATE_TIMELINE_STREAM_SET_BUFFER(name, enabled_by_default) \
1511 stream_##name##_.set_buffer(timeline_event_buffer);
1512 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_SET_BUFFER)
1513 #undef ISOLATE_TIMELINE_STREAM_SET_BUFFER
1514 timeline_event_buffer_ = timeline_event_buffer;
1515 }
1516
1517 void Isolate::RemoveTimelineEventBuffer() {
1518 SetTimelineEventBuffer(NULL);
1519 delete timeline_event_buffer_;
1520 }
1521
1522
1495 void Isolate::PrintJSON(JSONStream* stream, bool ref) { 1523 void Isolate::PrintJSON(JSONStream* stream, bool ref) {
1496 JSONObject jsobj(stream); 1524 JSONObject jsobj(stream);
1497 jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate")); 1525 jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate"));
1498 jsobj.AddFixedServiceId("isolates/%" Pd "", 1526 jsobj.AddFixedServiceId("isolates/%" Pd "",
1499 static_cast<intptr_t>(main_port())); 1527 static_cast<intptr_t>(main_port()));
1500 1528
1501 jsobj.AddProperty("name", debugger_name()); 1529 jsobj.AddProperty("name", debugger_name());
1502 jsobj.AddPropertyF("number", "%" Pd "", 1530 jsobj.AddPropertyF("number", "%" Pd "",
1503 static_cast<intptr_t>(main_port())); 1531 static_cast<intptr_t>(main_port()));
1504 if (ref) { 1532 if (ref) {
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 serialized_message_, serialized_message_len_); 1993 serialized_message_, serialized_message_len_);
1966 } 1994 }
1967 1995
1968 1996
1969 void IsolateSpawnState::Cleanup() { 1997 void IsolateSpawnState::Cleanup() {
1970 SwitchIsolateScope switch_scope(I); 1998 SwitchIsolateScope switch_scope(I);
1971 Dart::ShutdownIsolate(); 1999 Dart::ShutdownIsolate();
1972 } 2000 }
1973 2001
1974 } // namespace dart 2002 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698