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

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

Issue 16174008: - Create isolate specific resuable handles and use them in the hot lookup paths. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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 | Annotate | Revision Log
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 "lib/mirrors.h" 10 #include "lib/mirrors.h"
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 OS::PrintErr(" %s <- %s\n", 364 OS::PrintErr(" %s <- %s\n",
365 String::Handle(field.name()).ToCString(), 365 String::Handle(field.name()).ToCString(),
366 value.ToCString()); 366 value.ToCString());
367 } 367 }
368 } 368 }
369 369
370 object_ = &obj; 370 object_ = &obj;
371 } 371 }
372 372
373 373
374 #define REUSABLE_HANDLE_INITIALIZERS(object) \
375 object##_handle_(NULL),
376
374 Isolate::Isolate() 377 Isolate::Isolate()
375 : store_buffer_(), 378 : store_buffer_(),
376 message_notify_callback_(NULL), 379 message_notify_callback_(NULL),
377 name_(NULL), 380 name_(NULL),
378 start_time_(OS::GetCurrentTimeMicros()), 381 start_time_(OS::GetCurrentTimeMicros()),
379 main_port_(0), 382 main_port_(0),
380 heap_(NULL), 383 heap_(NULL),
381 object_store_(NULL), 384 object_store_(NULL),
382 top_context_(Context::null()), 385 top_context_(Context::null()),
383 top_exit_frame_info_(0), 386 top_exit_frame_info_(0),
(...skipping 18 matching lines...) Expand all
402 deopt_cpu_registers_copy_(NULL), 405 deopt_cpu_registers_copy_(NULL),
403 deopt_fpu_registers_copy_(NULL), 406 deopt_fpu_registers_copy_(NULL),
404 deopt_frame_copy_(NULL), 407 deopt_frame_copy_(NULL),
405 deopt_frame_copy_size_(0), 408 deopt_frame_copy_size_(0),
406 deferred_boxes_(NULL), 409 deferred_boxes_(NULL),
407 deferred_object_refs_(NULL), 410 deferred_object_refs_(NULL),
408 deferred_objects_count_(0), 411 deferred_objects_count_(0),
409 deferred_objects_(NULL), 412 deferred_objects_(NULL),
410 stacktrace_(NULL), 413 stacktrace_(NULL),
411 stack_frame_index_(-1), 414 stack_frame_index_(-1),
412 object_histogram_(NULL) { 415 object_histogram_(NULL),
416 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
417 handles_() {
413 if (FLAG_print_object_histogram && (Dart::vm_isolate() != NULL)) { 418 if (FLAG_print_object_histogram && (Dart::vm_isolate() != NULL)) {
414 object_histogram_ = new ObjectHistogram(this); 419 object_histogram_ = new ObjectHistogram(this);
415 } 420 }
416 } 421 }
422 #undef REUSABLE_HANDLE_INITIALIZERS
417 423
418 424
419 Isolate::~Isolate() { 425 Isolate::~Isolate() {
420 delete [] name_; 426 delete [] name_;
421 delete heap_; 427 delete heap_;
422 delete object_store_; 428 delete object_store_;
423 delete api_state_; 429 delete api_state_;
424 delete stub_code_; 430 delete stub_code_;
425 delete debugger_; 431 delete debugger_;
426 #if defined(USING_SIMULATOR) 432 #if defined(USING_SIMULATOR)
(...skipping 27 matching lines...) Expand all
454 460
455 461
456 Isolate* Isolate::Init(const char* name_prefix) { 462 Isolate* Isolate::Init(const char* name_prefix) {
457 Isolate* result = new Isolate(); 463 Isolate* result = new Isolate();
458 ASSERT(result != NULL); 464 ASSERT(result != NULL);
459 465
460 // TODO(5411455): For now just set the recently created isolate as 466 // TODO(5411455): For now just set the recently created isolate as
461 // the current isolate. 467 // the current isolate.
462 SetCurrent(result); 468 SetCurrent(result);
463 469
470 // Setup the isolate specific resuable handles.
471 #define REUSABLE_HANDLE_ALLOCATION(object) \
472 result->object##_handle_ = result->AllocateReusableHandle<object>(); \
473
474 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION)
475 #undef REUSABLE_HANDLE_ALLOCATION
476
464 // Setup the isolate message handler. 477 // Setup the isolate message handler.
465 MessageHandler* handler = new IsolateMessageHandler(result); 478 MessageHandler* handler = new IsolateMessageHandler(result);
466 ASSERT(handler != NULL); 479 ASSERT(handler != NULL);
467 result->set_message_handler(handler); 480 result->set_message_handler(handler);
468 481
469 // Setup the Dart API state. 482 // Setup the Dart API state.
470 ApiState* state = new ApiState(); 483 ApiState* state = new ApiState();
471 ASSERT(state != NULL); 484 ASSERT(state != NULL);
472 result->set_api_state(state); 485 result->set_api_state(state);
473 486
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 831
819 // Visit objects in the megamorphic cache. 832 // Visit objects in the megamorphic cache.
820 megamorphic_cache_table()->VisitObjectPointers(visitor); 833 megamorphic_cache_table()->VisitObjectPointers(visitor);
821 834
822 // Visit objects in per isolate stubs. 835 // Visit objects in per isolate stubs.
823 StubCode::VisitObjectPointers(visitor); 836 StubCode::VisitObjectPointers(visitor);
824 837
825 // Visit objects in zones. 838 // Visit objects in zones.
826 current_zone()->VisitObjectPointers(visitor); 839 current_zone()->VisitObjectPointers(visitor);
827 840
841 // Visit objects in isolate specific handles area.
842 handles_.VisitObjectPointers(visitor);
843
828 // Iterate over all the stack frames and visit objects on the stack. 844 // Iterate over all the stack frames and visit objects on the stack.
829 StackFrameIterator frames_iterator(validate_frames); 845 StackFrameIterator frames_iterator(validate_frames);
830 StackFrame* frame = frames_iterator.NextFrame(); 846 StackFrame* frame = frames_iterator.NextFrame();
831 while (frame != NULL) { 847 while (frame != NULL) {
832 frame->VisitObjectPointers(visitor); 848 frame->VisitObjectPointers(visitor);
833 frame = frames_iterator.NextFrame(); 849 frame = frames_iterator.NextFrame();
834 } 850 }
835 851
836 // Visit the dart api state for all local and persistent handles. 852 // Visit the dart api state for all local and persistent handles.
837 if (api_state() != NULL) { 853 if (api_state() != NULL) {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 return isolate->GetStatusStackFrame(frame_index); 1059 return isolate->GetStatusStackFrame(frame_index);
1044 } 1060 }
1045 } 1061 }
1046 1062
1047 // TODO(tball): "/isolate/<handle>/stacktrace/<frame-index>"/disassemble" 1063 // TODO(tball): "/isolate/<handle>/stacktrace/<frame-index>"/disassemble"
1048 1064
1049 return NULL; // Unimplemented query. 1065 return NULL; // Unimplemented query.
1050 } 1066 }
1051 1067
1052 1068
1069 template<class T>
1070 T* Isolate::AllocateReusableHandle() {
1071 T* handle = reinterpret_cast<T*>(handles_.AllocateScopedHandle());
1072 T::initializeHandle(handle, T::null());
1073 return handle;
1074 }
1075
1076
1053 static void FillDeferredSlots(DeferredSlot** slot_list) { 1077 static void FillDeferredSlots(DeferredSlot** slot_list) {
1054 DeferredSlot* slot = *slot_list; 1078 DeferredSlot* slot = *slot_list;
1055 *slot_list = NULL; 1079 *slot_list = NULL;
1056 1080
1057 while (slot != NULL) { 1081 while (slot != NULL) {
1058 DeferredSlot* current = slot; 1082 DeferredSlot* current = slot;
1059 slot = slot->next(); 1083 slot = slot->next();
1060 1084
1061 current->Materialize(); 1085 current->Materialize();
1062 1086
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 return func.raw(); 1182 return func.raw();
1159 } 1183 }
1160 1184
1161 1185
1162 void IsolateSpawnState::Cleanup() { 1186 void IsolateSpawnState::Cleanup() {
1163 SwitchIsolateScope switch_scope(isolate()); 1187 SwitchIsolateScope switch_scope(isolate());
1164 Dart::ShutdownIsolate(); 1188 Dart::ShutdownIsolate();
1165 } 1189 }
1166 1190
1167 } // namespace dart 1191 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698