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

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

Issue 1312813006: - Remove deprecated StackZone constructor with Isolate parameter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 // equivalent to setting --enable-asserts and --enable-type-checks. 88 // equivalent to setting --enable-asserts and --enable-type-checks.
89 DEFINE_FLAG_HANDLER(CheckedModeHandler, 89 DEFINE_FLAG_HANDLER(CheckedModeHandler,
90 enable_checked_mode, 90 enable_checked_mode,
91 "Enable checked mode."); 91 "Enable checked mode.");
92 92
93 DEFINE_FLAG_HANDLER(CheckedModeHandler, 93 DEFINE_FLAG_HANDLER(CheckedModeHandler,
94 checked, 94 checked,
95 "Enable checked mode."); 95 "Enable checked mode.");
96 96
97 97
98 // Quick access to the locally defined isolate() method. 98 // Quick access to the locally defined thread() and isolate() methods.
99 #define T (thread())
99 #define I (isolate()) 100 #define I (isolate())
100 101
101 #if defined(DEBUG) 102 #if defined(DEBUG)
102 // Helper class to ensure that a live origin_id is never reused 103 // Helper class to ensure that a live origin_id is never reused
103 // and assigned to an isolate. 104 // and assigned to an isolate.
104 class VerifyOriginId : public IsolateVisitor { 105 class VerifyOriginId : public IsolateVisitor {
105 public: 106 public:
106 explicit VerifyOriginId(Dart_Port id) : id_(id) {} 107 explicit VerifyOriginId(Dart_Port id) : id_(id) {}
107 108
108 void VisitIsolate(Isolate* isolate) { 109 void VisitIsolate(Isolate* isolate) {
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 } else { 500 } else {
500 ASSERT(result.IsNull()); 501 ASSERT(result.IsNull());
501 } 502 }
502 } 503 }
503 return success; 504 return success;
504 } 505 }
505 506
506 507
507 void IsolateMessageHandler::NotifyPauseOnStart() { 508 void IsolateMessageHandler::NotifyPauseOnStart() {
508 if (Service::debug_stream.enabled()) { 509 if (Service::debug_stream.enabled()) {
509 StartIsolateScope start_isolate(isolate()); 510 StartIsolateScope start_isolate(I);
510 StackZone zone(I); 511 StackZone zone(T);
511 HandleScope handle_scope(thread()); 512 HandleScope handle_scope(T);
512 ServiceEvent pause_event(isolate(), ServiceEvent::kPauseStart); 513 ServiceEvent pause_event(I, ServiceEvent::kPauseStart);
513 Service::HandleEvent(&pause_event); 514 Service::HandleEvent(&pause_event);
514 } else if (FLAG_trace_service) { 515 } else if (FLAG_trace_service) {
515 OS::Print("vm-service: Dropping event of type PauseStart (%s)\n", 516 OS::Print("vm-service: Dropping event of type PauseStart (%s)\n",
516 isolate()->name()); 517 I->name());
517 } 518 }
518 } 519 }
519 520
520 521
521 void IsolateMessageHandler::NotifyPauseOnExit() { 522 void IsolateMessageHandler::NotifyPauseOnExit() {
522 if (Service::debug_stream.enabled()) { 523 if (Service::debug_stream.enabled()) {
523 StartIsolateScope start_isolate(isolate()); 524 StartIsolateScope start_isolate(I);
524 StackZone zone(I); 525 StackZone zone(T);
525 HandleScope handle_scope(thread()); 526 HandleScope handle_scope(T);
526 ServiceEvent pause_event(isolate(), ServiceEvent::kPauseExit); 527 ServiceEvent pause_event(I, ServiceEvent::kPauseExit);
527 Service::HandleEvent(&pause_event); 528 Service::HandleEvent(&pause_event);
528 } else if (FLAG_trace_service) { 529 } else if (FLAG_trace_service) {
529 OS::Print("vm-service: Dropping event of type PauseExit (%s)\n", 530 OS::Print("vm-service: Dropping event of type PauseExit (%s)\n",
530 isolate()->name()); 531 I->name());
531 } 532 }
532 } 533 }
533 534
534 535
535 #if defined(DEBUG) 536 #if defined(DEBUG)
536 void IsolateMessageHandler::CheckAccess() { 537 void IsolateMessageHandler::CheckAccess() {
537 ASSERT(IsCurrentIsolate()); 538 ASSERT(IsCurrentIsolate());
538 } 539 }
539 #endif 540 #endif
540 541
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 IsolateSpawnState* state = NULL; 1266 IsolateSpawnState* state = NULL;
1266 Thread* thread = Thread::Current(); 1267 Thread* thread = Thread::Current();
1267 { 1268 {
1268 // TODO(turnidge): Is this locking required here at all anymore? 1269 // TODO(turnidge): Is this locking required here at all anymore?
1269 MutexLocker ml(isolate->mutex()); 1270 MutexLocker ml(isolate->mutex());
1270 state = isolate->spawn_state(); 1271 state = isolate->spawn_state();
1271 } 1272 }
1272 { 1273 {
1273 StartIsolateScope start_scope(isolate); 1274 StartIsolateScope start_scope(isolate);
1274 ASSERT(thread->isolate() == isolate); 1275 ASSERT(thread->isolate() == isolate);
1275 StackZone zone(isolate); 1276 StackZone zone(thread);
1276 HandleScope handle_scope(thread); 1277 HandleScope handle_scope(thread);
1277 1278
1278 // If particular values were requested for this newly spawned isolate, then 1279 // If particular values were requested for this newly spawned isolate, then
1279 // they are set here before the isolate starts executing user code. 1280 // they are set here before the isolate starts executing user code.
1280 isolate->SetErrorsFatal(state->errors_are_fatal()); 1281 isolate->SetErrorsFatal(state->errors_are_fatal());
1281 if (state->on_exit_port() != ILLEGAL_PORT) { 1282 if (state->on_exit_port() != ILLEGAL_PORT) {
1282 const SendPort& listener = 1283 const SendPort& listener =
1283 SendPort::Handle(SendPort::New(state->on_exit_port())); 1284 SendPort::Handle(SendPort::New(state->on_exit_port()));
1284 isolate->AddExitListener(listener, Instance::null_instance()); 1285 isolate->AddExitListener(listener, Instance::null_instance());
1285 } 1286 }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 1367
1367 1368
1368 static void ShutdownIsolate(uword parameter) { 1369 static void ShutdownIsolate(uword parameter) {
1369 Isolate* isolate = reinterpret_cast<Isolate*>(parameter); 1370 Isolate* isolate = reinterpret_cast<Isolate*>(parameter);
1370 { 1371 {
1371 // Print the error if there is one. This may execute dart code to 1372 // Print the error if there is one. This may execute dart code to
1372 // print the exception object, so we need to use a StartIsolateScope. 1373 // print the exception object, so we need to use a StartIsolateScope.
1373 Thread* thread = Thread::Current(); 1374 Thread* thread = Thread::Current();
1374 StartIsolateScope start_scope(isolate); 1375 StartIsolateScope start_scope(isolate);
1375 ASSERT(thread->isolate() == isolate); 1376 ASSERT(thread->isolate() == isolate);
1376 StackZone zone(isolate); 1377 StackZone zone(thread);
1377 HandleScope handle_scope(thread); 1378 HandleScope handle_scope(thread);
1378 Error& error = Error::Handle(); 1379 Error& error = Error::Handle();
1379 error = isolate->object_store()->sticky_error(); 1380 error = isolate->object_store()->sticky_error();
1380 if (!error.IsNull() && !error.IsUnwindError()) { 1381 if (!error.IsNull() && !error.IsUnwindError()) {
1381 OS::PrintErr("in ShutdownIsolate: %s\n", error.ToErrorCString()); 1382 OS::PrintErr("in ShutdownIsolate: %s\n", error.ToErrorCString());
1382 } 1383 }
1383 Dart::RunShutdownCallback(); 1384 Dart::RunShutdownCallback();
1384 } 1385 }
1385 { 1386 {
1386 // Shut the isolate down. 1387 // Shut the isolate down.
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 // The VM isolate keeps all objects marked. 1494 // The VM isolate keeps all objects marked.
1494 heap_->Verify(this == Dart::vm_isolate() ? kRequireMarked : kForbidMarked); 1495 heap_->Verify(this == Dart::vm_isolate() ? kRequireMarked : kForbidMarked);
1495 } 1496 }
1496 #endif // DEBUG 1497 #endif // DEBUG
1497 1498
1498 Thread* thread = Thread::Current(); 1499 Thread* thread = Thread::Current();
1499 1500
1500 // First, perform higher-level cleanup that may need to allocate. 1501 // First, perform higher-level cleanup that may need to allocate.
1501 { 1502 {
1502 // Ensure we have a zone and handle scope so that we can call VM functions. 1503 // Ensure we have a zone and handle scope so that we can call VM functions.
1503 StackZone stack_zone(this); 1504 StackZone stack_zone(thread);
1504 HandleScope handle_scope(thread); 1505 HandleScope handle_scope(thread);
1505 1506
1506 // Write out the coverage data if collection has been enabled. 1507 // Write out the coverage data if collection has been enabled.
1507 CodeCoverage::Write(this); 1508 CodeCoverage::Write(this);
1508 } 1509 }
1509 1510
1510 // Remove this isolate from the list *before* we start tearing it down, to 1511 // Remove this isolate from the list *before* we start tearing it down, to
1511 // avoid exposing it in a state of decay. 1512 // avoid exposing it in a state of decay.
1512 RemoveIsolateFromList(this); 1513 RemoveIsolateFromList(this);
1513 1514
1514 if (heap_ != NULL) { 1515 if (heap_ != NULL) {
1515 // Wait for any concurrent GC tasks to finish before shutting down. 1516 // Wait for any concurrent GC tasks to finish before shutting down.
1516 // TODO(koda): Support faster sweeper shutdown (e.g., after current page). 1517 // TODO(koda): Support faster sweeper shutdown (e.g., after current page).
1517 PageSpace* old_space = heap_->old_space(); 1518 PageSpace* old_space = heap_->old_space();
1518 MonitorLocker ml(old_space->tasks_lock()); 1519 MonitorLocker ml(old_space->tasks_lock());
1519 while (old_space->tasks() > 0) { 1520 while (old_space->tasks() > 0) {
1520 ml.Wait(); 1521 ml.Wait();
1521 } 1522 }
1522 } 1523 }
1523 1524
1524 // Then, proceed with low-level teardown. 1525 // Then, proceed with low-level teardown.
1525 { 1526 {
1526 // Ensure we have a zone and handle scope so that we can call VM functions, 1527 // Ensure we have a zone and handle scope so that we can call VM functions,
1527 // but we no longer allocate new heap objects. 1528 // but we no longer allocate new heap objects.
1528 StackZone stack_zone(this); 1529 StackZone stack_zone(thread);
1529 HandleScope handle_scope(thread); 1530 HandleScope handle_scope(thread);
1530 NoSafepointScope no_safepoint_scope; 1531 NoSafepointScope no_safepoint_scope;
1531 1532
1532 if (compiler_stats_ != NULL) { 1533 if (compiler_stats_ != NULL) {
1533 compiler_stats()->Print(); 1534 compiler_stats()->Print();
1534 } 1535 }
1535 1536
1536 // Notify exit listeners that this isolate is shutting down. 1537 // Notify exit listeners that this isolate is shutting down.
1537 if (object_store() != NULL) { 1538 if (object_store() != NULL) {
1538 NotifyExitListeners(); 1539 NotifyExitListeners();
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 previous->next_ = current->next_; 2143 previous->next_ = current->next_;
2143 return; 2144 return;
2144 } 2145 }
2145 previous = current; 2146 previous = current;
2146 current = current->next_; 2147 current = current->next_;
2147 } 2148 }
2148 UNREACHABLE(); 2149 UNREACHABLE();
2149 } 2150 }
2150 2151
2151 2152
2152 template<class T> 2153 template<class C>
2153 T* Isolate::AllocateReusableHandle() { 2154 C* Isolate::AllocateReusableHandle() {
2154 T* handle = reinterpret_cast<T*>(reusable_handles_.AllocateScopedHandle()); 2155 C* handle = reinterpret_cast<C*>(reusable_handles_.AllocateScopedHandle());
2155 T::initializeHandle(handle, T::null()); 2156 C::initializeHandle(handle, C::null());
2156 return handle; 2157 return handle;
2157 } 2158 }
2158 2159
2159 2160
2160 static RawInstance* DeserializeObject(Thread* thread, 2161 static RawInstance* DeserializeObject(Thread* thread,
2161 uint8_t* obj_data, 2162 uint8_t* obj_data,
2162 intptr_t obj_len) { 2163 intptr_t obj_len) {
2163 if (obj_data == NULL) { 2164 if (obj_data == NULL) {
2164 return Instance::null(); 2165 return Instance::null();
2165 } 2166 }
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
2352 serialized_message_, serialized_message_len_); 2353 serialized_message_, serialized_message_len_);
2353 } 2354 }
2354 2355
2355 2356
2356 void IsolateSpawnState::Cleanup() { 2357 void IsolateSpawnState::Cleanup() {
2357 SwitchIsolateScope switch_scope(I); 2358 SwitchIsolateScope switch_scope(I);
2358 Dart::ShutdownIsolate(); 2359 Dart::ShutdownIsolate();
2359 } 2360 }
2360 2361
2361 } // namespace dart 2362 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698