OLD | NEW |
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 stack_frame_index_(-1), | 429 stack_frame_index_(-1), |
430 last_allocationprofile_accumulator_reset_timestamp_(0), | 430 last_allocationprofile_accumulator_reset_timestamp_(0), |
431 last_allocationprofile_gc_timestamp_(0), | 431 last_allocationprofile_gc_timestamp_(0), |
432 cha_(NULL), | 432 cha_(NULL), |
433 object_id_ring_(NULL), | 433 object_id_ring_(NULL), |
434 trace_buffer_(NULL), | 434 trace_buffer_(NULL), |
435 profiler_data_(NULL), | 435 profiler_data_(NULL), |
436 thread_state_(NULL), | 436 thread_state_(NULL), |
437 tag_table_(GrowableObjectArray::null()), | 437 tag_table_(GrowableObjectArray::null()), |
438 current_tag_(UserTag::null()), | 438 current_tag_(UserTag::null()), |
| 439 metrics_list_head_(NULL), |
439 next_(NULL), | 440 next_(NULL), |
440 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS) | 441 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS) |
441 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT) | 442 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT) |
442 reusable_handles_() { | 443 reusable_handles_() { |
443 set_vm_tag(VMTag::kIdleTagId); | 444 set_vm_tag(VMTag::kIdleTagId); |
444 set_user_tag(UserTags::kDefaultUserTag); | 445 set_user_tag(UserTags::kDefaultUserTag); |
445 } | 446 } |
446 #undef REUSABLE_HANDLE_SCOPE_INIT | 447 #undef REUSABLE_HANDLE_SCOPE_INIT |
447 #undef REUSABLE_HANDLE_INITIALIZERS | 448 #undef REUSABLE_HANDLE_INITIALIZERS |
448 | 449 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 create_callback_ = NULL; | 504 create_callback_ = NULL; |
504 isolates_list_monitor_ = new Monitor(); | 505 isolates_list_monitor_ = new Monitor(); |
505 ASSERT(isolates_list_monitor_ != NULL); | 506 ASSERT(isolates_list_monitor_ != NULL); |
506 } | 507 } |
507 | 508 |
508 | 509 |
509 Isolate* Isolate::Init(const char* name_prefix) { | 510 Isolate* Isolate::Init(const char* name_prefix) { |
510 Isolate* result = new Isolate(); | 511 Isolate* result = new Isolate(); |
511 ASSERT(result != NULL); | 512 ASSERT(result != NULL); |
512 | 513 |
| 514 // Initialize metrics. |
| 515 #define ISOLATE_METRIC_INIT(type, variable, name, unit) \ |
| 516 result->metric_##variable##_.Init(result, name, NULL, Metric::unit); |
| 517 ISOLATE_METRIC_LIST(ISOLATE_METRIC_INIT); |
| 518 #undef ISOLATE_METRIC_INIT |
| 519 |
| 520 |
513 // Add to isolate list. | 521 // Add to isolate list. |
514 AddIsolateTolist(result); | 522 AddIsolateTolist(result); |
515 | 523 |
| 524 |
516 // TODO(5411455): For now just set the recently created isolate as | 525 // TODO(5411455): For now just set the recently created isolate as |
517 // the current isolate. | 526 // the current isolate. |
518 SetCurrent(result); | 527 SetCurrent(result); |
519 | 528 |
520 // Setup the isolate specific resuable handles. | 529 // Setup the isolate specific resuable handles. |
521 #define REUSABLE_HANDLE_ALLOCATION(object) \ | 530 #define REUSABLE_HANDLE_ALLOCATION(object) \ |
522 result->object##_handle_ = result->AllocateReusableHandle<object>(); | 531 result->object##_handle_ = result->AllocateReusableHandle<object>(); |
523 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION) | 532 REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ALLOCATION) |
524 #undef REUSABLE_HANDLE_ALLOCATION | 533 #undef REUSABLE_HANDLE_ALLOCATION |
525 | 534 |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 } | 1239 } |
1231 MonitorLocker ml(isolates_list_monitor_); | 1240 MonitorLocker ml(isolates_list_monitor_); |
1232 Isolate* current = isolates_list_head_; | 1241 Isolate* current = isolates_list_head_; |
1233 while (current) { | 1242 while (current) { |
1234 visitor->VisitIsolate(current); | 1243 visitor->VisitIsolate(current); |
1235 current = current->next_; | 1244 current = current->next_; |
1236 } | 1245 } |
1237 } | 1246 } |
1238 | 1247 |
1239 | 1248 |
| 1249 intptr_t Isolate::IsolateListLength() { |
| 1250 MonitorLocker ml(isolates_list_monitor_); |
| 1251 intptr_t count = 0; |
| 1252 Isolate* current = isolates_list_head_; |
| 1253 while (current != NULL) { |
| 1254 count++; |
| 1255 current = current->next_; |
| 1256 } |
| 1257 return count; |
| 1258 } |
| 1259 |
| 1260 |
1240 void Isolate::AddIsolateTolist(Isolate* isolate) { | 1261 void Isolate::AddIsolateTolist(Isolate* isolate) { |
1241 MonitorLocker ml(isolates_list_monitor_); | 1262 MonitorLocker ml(isolates_list_monitor_); |
1242 ASSERT(isolate != NULL); | 1263 ASSERT(isolate != NULL); |
1243 ASSERT(isolate->next_ == NULL); | 1264 ASSERT(isolate->next_ == NULL); |
1244 isolate->next_ = isolates_list_head_; | 1265 isolate->next_ = isolates_list_head_; |
1245 isolates_list_head_ = isolate; | 1266 isolates_list_head_ = isolate; |
1246 } | 1267 } |
1247 | 1268 |
1248 | 1269 |
1249 void Isolate::RemoveIsolateFromList(Isolate* isolate) { | 1270 void Isolate::RemoveIsolateFromList(Isolate* isolate) { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1386 return func.raw(); | 1407 return func.raw(); |
1387 } | 1408 } |
1388 | 1409 |
1389 | 1410 |
1390 void IsolateSpawnState::Cleanup() { | 1411 void IsolateSpawnState::Cleanup() { |
1391 SwitchIsolateScope switch_scope(I); | 1412 SwitchIsolateScope switch_scope(I); |
1392 Dart::ShutdownIsolate(); | 1413 Dart::ShutdownIsolate(); |
1393 } | 1414 } |
1394 | 1415 |
1395 } // namespace dart | 1416 } // namespace dart |
OLD | NEW |