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

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

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month 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/vm/intrinsifier_x64.cc ('k') | runtime/vm/isolate.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) 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 #ifndef RUNTIME_VM_ISOLATE_H_ 5 #ifndef RUNTIME_VM_ISOLATE_H_
6 #define RUNTIME_VM_ISOLATE_H_ 6 #define RUNTIME_VM_ISOLATE_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "vm/atomic.h" 10 #include "vm/atomic.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 class StackResource; 66 class StackResource;
67 class StackZone; 67 class StackZone;
68 class StoreBuffer; 68 class StoreBuffer;
69 class StubCode; 69 class StubCode;
70 class ThreadRegistry; 70 class ThreadRegistry;
71 class UserTag; 71 class UserTag;
72 72
73 73
74 class PendingLazyDeopt { 74 class PendingLazyDeopt {
75 public: 75 public:
76 PendingLazyDeopt(uword fp, uword pc) : fp_(fp), pc_(pc) { } 76 PendingLazyDeopt(uword fp, uword pc) : fp_(fp), pc_(pc) {}
77 uword fp() { return fp_; } 77 uword fp() { return fp_; }
78 uword pc() { return pc_; } 78 uword pc() { return pc_; }
79 void set_pc(uword pc) { pc_ = pc; } 79 void set_pc(uword pc) { pc_ = pc; }
80 80
81 private: 81 private:
82 uword fp_; 82 uword fp_;
83 uword pc_; 83 uword pc_;
84 }; 84 };
85 85
86 86
87 class IsolateVisitor { 87 class IsolateVisitor {
88 public: 88 public:
89 IsolateVisitor() {} 89 IsolateVisitor() {}
90 virtual ~IsolateVisitor() {} 90 virtual ~IsolateVisitor() {}
91 91
92 virtual void VisitIsolate(Isolate* isolate) = 0; 92 virtual void VisitIsolate(Isolate* isolate) = 0;
93 93
94 private: 94 private:
95 DISALLOW_COPY_AND_ASSIGN(IsolateVisitor); 95 DISALLOW_COPY_AND_ASSIGN(IsolateVisitor);
96 }; 96 };
97 97
98 98
99 // Disallow OOB message handling within this scope. 99 // Disallow OOB message handling within this scope.
100 class NoOOBMessageScope : public StackResource { 100 class NoOOBMessageScope : public StackResource {
101 public: 101 public:
102 explicit NoOOBMessageScope(Thread* thread); 102 explicit NoOOBMessageScope(Thread* thread);
103 ~NoOOBMessageScope(); 103 ~NoOOBMessageScope();
104
104 private: 105 private:
105 DISALLOW_COPY_AND_ASSIGN(NoOOBMessageScope); 106 DISALLOW_COPY_AND_ASSIGN(NoOOBMessageScope);
106 }; 107 };
107 108
108 109
109 // Disallow isolate reload. 110 // Disallow isolate reload.
110 class NoReloadScope : public StackResource { 111 class NoReloadScope : public StackResource {
111 public: 112 public:
112 NoReloadScope(Isolate* isolate, Thread* thread); 113 NoReloadScope(Isolate* isolate, Thread* thread);
113 ~NoReloadScope(); 114 ~NoReloadScope();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 200
200 int64_t start_time() const { return start_time_; } 201 int64_t start_time() const { return start_time_; }
201 202
202 Dart_Port main_port() const { return main_port_; } 203 Dart_Port main_port() const { return main_port_; }
203 void set_main_port(Dart_Port port) { 204 void set_main_port(Dart_Port port) {
204 ASSERT(main_port_ == 0); // Only set main port once. 205 ASSERT(main_port_ == 0); // Only set main port once.
205 main_port_ = port; 206 main_port_ = port;
206 } 207 }
207 Dart_Port origin_id() const { return origin_id_; } 208 Dart_Port origin_id() const { return origin_id_; }
208 void set_origin_id(Dart_Port id) { 209 void set_origin_id(Dart_Port id) {
209 ASSERT((id == main_port_ && origin_id_ == 0) || 210 ASSERT((id == main_port_ && origin_id_ == 0) || (origin_id_ == main_port_));
210 (origin_id_ == main_port_));
211 origin_id_ = id; 211 origin_id_ = id;
212 } 212 }
213 void set_pause_capability(uint64_t value) { pause_capability_ = value; } 213 void set_pause_capability(uint64_t value) { pause_capability_ = value; }
214 uint64_t pause_capability() const { return pause_capability_; } 214 uint64_t pause_capability() const { return pause_capability_; }
215 void set_terminate_capability(uint64_t value) { 215 void set_terminate_capability(uint64_t value) {
216 terminate_capability_ = value; 216 terminate_capability_ = value;
217 } 217 }
218 uint64_t terminate_capability() const { return terminate_capability_; } 218 uint64_t terminate_capability() const { return terminate_capability_; }
219 219
220 void SendInternalLibMessage(LibMsgId msg_id, uint64_t capability); 220 void SendInternalLibMessage(LibMsgId msg_id, uint64_t capability);
221 221
222 Heap* heap() const { return heap_; } 222 Heap* heap() const { return heap_; }
223 void set_heap(Heap* value) { heap_ = value; } 223 void set_heap(Heap* value) { heap_ = value; }
224 224
225 ObjectStore* object_store() const { return object_store_; } 225 ObjectStore* object_store() const { return object_store_; }
226 void set_object_store(ObjectStore* value) { object_store_ = value; } 226 void set_object_store(ObjectStore* value) { object_store_ = value; }
227 static intptr_t object_store_offset() { 227 static intptr_t object_store_offset() {
228 return OFFSET_OF(Isolate, object_store_); 228 return OFFSET_OF(Isolate, object_store_);
229 } 229 }
230 230
231 ApiState* api_state() const { return api_state_; } 231 ApiState* api_state() const { return api_state_; }
232 void set_api_state(ApiState* value) { api_state_ = value; } 232 void set_api_state(ApiState* value) { api_state_ = value; }
233 233
234 void set_init_callback_data(void* value) { 234 void set_init_callback_data(void* value) { init_callback_data_ = value; }
235 init_callback_data_ = value; 235 void* init_callback_data() const { return init_callback_data_; }
236 }
237 void* init_callback_data() const {
238 return init_callback_data_;
239 }
240 236
241 Dart_EnvironmentCallback environment_callback() const { 237 Dart_EnvironmentCallback environment_callback() const {
242 return environment_callback_; 238 return environment_callback_;
243 } 239 }
244 void set_environment_callback(Dart_EnvironmentCallback value) { 240 void set_environment_callback(Dart_EnvironmentCallback value) {
245 environment_callback_ = value; 241 environment_callback_ = value;
246 } 242 }
247 243
248 Dart_LibraryTagHandler library_tag_handler() const { 244 Dart_LibraryTagHandler library_tag_handler() const {
249 return library_tag_handler_; 245 return library_tag_handler_;
250 } 246 }
251 void set_library_tag_handler(Dart_LibraryTagHandler value) { 247 void set_library_tag_handler(Dart_LibraryTagHandler value) {
252 library_tag_handler_ = value; 248 library_tag_handler_ = value;
253 } 249 }
254 250
255 void SetupInstructionsSnapshotPage( 251 void SetupInstructionsSnapshotPage(
256 const uint8_t* instructions_snapshot_buffer); 252 const uint8_t* instructions_snapshot_buffer);
257 void SetupDataSnapshotPage( 253 void SetupDataSnapshotPage(const uint8_t* instructions_snapshot_buffer);
258 const uint8_t* instructions_snapshot_buffer);
259 254
260 void ScheduleMessageInterrupts(); 255 void ScheduleMessageInterrupts();
261 256
262 // Marks all libraries as loaded. 257 // Marks all libraries as loaded.
263 void DoneLoading(); 258 void DoneLoading();
264 void DoneFinalizing(); 259 void DoneFinalizing();
265 260
266 // By default the reload context is deleted. This parameter allows 261 // By default the reload context is deleted. This parameter allows
267 // the caller to delete is separately if it is still needed. 262 // the caller to delete is separately if it is still needed.
268 bool ReloadSources(JSONStream* js, 263 bool ReloadSources(JSONStream* js,
(...skipping 18 matching lines...) Expand all
287 void set_spawn_state(IsolateSpawnState* value) { spawn_state_ = value; } 282 void set_spawn_state(IsolateSpawnState* value) { spawn_state_ = value; }
288 283
289 Mutex* mutex() const { return mutex_; } 284 Mutex* mutex() const { return mutex_; }
290 Mutex* symbols_mutex() const { return symbols_mutex_; } 285 Mutex* symbols_mutex() const { return symbols_mutex_; }
291 Mutex* type_canonicalization_mutex() const { 286 Mutex* type_canonicalization_mutex() const {
292 return type_canonicalization_mutex_; 287 return type_canonicalization_mutex_;
293 } 288 }
294 Mutex* constant_canonicalization_mutex() const { 289 Mutex* constant_canonicalization_mutex() const {
295 return constant_canonicalization_mutex_; 290 return constant_canonicalization_mutex_;
296 } 291 }
297 Mutex* megamorphic_lookup_mutex() const { 292 Mutex* megamorphic_lookup_mutex() const { return megamorphic_lookup_mutex_; }
298 return megamorphic_lookup_mutex_;
299 }
300 293
301 Debugger* debugger() const { 294 Debugger* debugger() const {
302 if (!FLAG_support_debugger) { 295 if (!FLAG_support_debugger) {
303 return NULL; 296 return NULL;
304 } 297 }
305 ASSERT(debugger_ != NULL); 298 ASSERT(debugger_ != NULL);
306 return debugger_; 299 return debugger_;
307 } 300 }
308 301
309 void set_single_step(bool value) { single_step_ = value; } 302 void set_single_step(bool value) { single_step_ = value; }
310 bool single_step() const { return single_step_; } 303 bool single_step() const { return single_step_; }
311 static intptr_t single_step_offset() { 304 static intptr_t single_step_offset() {
312 return OFFSET_OF(Isolate, single_step_); 305 return OFFSET_OF(Isolate, single_step_);
313 } 306 }
314 307
315 void set_has_compiled_code(bool value) { has_compiled_code_ = value; } 308 void set_has_compiled_code(bool value) { has_compiled_code_ = value; }
316 bool has_compiled_code() const { return has_compiled_code_; } 309 bool has_compiled_code() const { return has_compiled_code_; }
317 310
318 // Lets the embedder know that a service message resulted in a resume request. 311 // Lets the embedder know that a service message resulted in a resume request.
319 void SetResumeRequest() { 312 void SetResumeRequest() {
320 resume_request_ = true; 313 resume_request_ = true;
321 set_last_resume_timestamp(); 314 set_last_resume_timestamp();
322 } 315 }
323 316
324 void set_last_resume_timestamp() { 317 void set_last_resume_timestamp() {
325 last_resume_timestamp_ = OS::GetCurrentTimeMillis(); 318 last_resume_timestamp_ = OS::GetCurrentTimeMillis();
326 } 319 }
327 320
328 int64_t last_resume_timestamp() const { 321 int64_t last_resume_timestamp() const { return last_resume_timestamp_; }
329 return last_resume_timestamp_;
330 }
331 322
332 // Returns whether the vm service has requested that the debugger 323 // Returns whether the vm service has requested that the debugger
333 // resume execution. 324 // resume execution.
334 bool GetAndClearResumeRequest() { 325 bool GetAndClearResumeRequest() {
335 bool resume_request = resume_request_; 326 bool resume_request = resume_request_;
336 resume_request_ = false; 327 resume_request_ = false;
337 return resume_request; 328 return resume_request;
338 } 329 }
339 330
340 // Verify that the sender has the capability to pause or terminate the 331 // Verify that the sender has the capability to pause or terminate the
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 return create_callback_; 383 return create_callback_;
393 } 384 }
394 385
395 static void SetShutdownCallback(Dart_IsolateShutdownCallback cb) { 386 static void SetShutdownCallback(Dart_IsolateShutdownCallback cb) {
396 shutdown_callback_ = cb; 387 shutdown_callback_ = cb;
397 } 388 }
398 static Dart_IsolateShutdownCallback ShutdownCallback() { 389 static Dart_IsolateShutdownCallback ShutdownCallback() {
399 return shutdown_callback_; 390 return shutdown_callback_;
400 } 391 }
401 392
402 void set_object_id_ring(ObjectIdRing* ring) { 393 void set_object_id_ring(ObjectIdRing* ring) { object_id_ring_ = ring; }
403 object_id_ring_ = ring; 394 ObjectIdRing* object_id_ring() { return object_id_ring_; }
404 }
405 ObjectIdRing* object_id_ring() {
406 return object_id_ring_;
407 }
408 395
409 void AddPendingDeopt(uword fp, uword pc); 396 void AddPendingDeopt(uword fp, uword pc);
410 uword FindPendingDeopt(uword fp) const; 397 uword FindPendingDeopt(uword fp) const;
411 void ClearPendingDeoptsAtOrBelow(uword fp) const; 398 void ClearPendingDeoptsAtOrBelow(uword fp) const;
412 MallocGrowableArray<PendingLazyDeopt>* pending_deopts() const { 399 MallocGrowableArray<PendingLazyDeopt>* pending_deopts() const {
413 return pending_deopts_; 400 return pending_deopts_;
414 } 401 }
415 bool IsDeoptimizing() const { return deopt_context_ != NULL; } 402 bool IsDeoptimizing() const { return deopt_context_ != NULL; }
416 DeoptContext* deopt_context() const { return deopt_context_; } 403 DeoptContext* deopt_context() const { return deopt_context_; }
417 void set_deopt_context(DeoptContext* value) { 404 void set_deopt_context(DeoptContext* value) {
418 ASSERT(value == NULL || deopt_context_ == NULL); 405 ASSERT(value == NULL || deopt_context_ == NULL);
419 deopt_context_ = value; 406 deopt_context_ = value;
420 } 407 }
421 408
422 BackgroundCompiler* background_compiler() const { 409 BackgroundCompiler* background_compiler() const {
423 return background_compiler_; 410 return background_compiler_;
424 } 411 }
425 void set_background_compiler(BackgroundCompiler* value) { 412 void set_background_compiler(BackgroundCompiler* value) {
426 // Do not overwrite a background compiler (memory leak). 413 // Do not overwrite a background compiler (memory leak).
427 ASSERT((value == NULL) || (background_compiler_ == NULL)); 414 ASSERT((value == NULL) || (background_compiler_ == NULL));
428 background_compiler_ = value; 415 background_compiler_ = value;
429 } 416 }
430 417
431 void enable_background_compiler() { 418 void enable_background_compiler() {
432 background_compiler_disabled_depth_--; 419 background_compiler_disabled_depth_--;
433 if (background_compiler_disabled_depth_ < 0) { 420 if (background_compiler_disabled_depth_ < 0) {
434 FATAL("Mismatched number of calls to disable_background_compiler and " 421 FATAL(
435 "enable_background_compiler."); 422 "Mismatched number of calls to disable_background_compiler and "
423 "enable_background_compiler.");
436 } 424 }
437 } 425 }
438 426
439 void disable_background_compiler() { 427 void disable_background_compiler() { background_compiler_disabled_depth_++; }
440 background_compiler_disabled_depth_++;
441 }
442 428
443 bool is_background_compiler_disabled() const { 429 bool is_background_compiler_disabled() const {
444 return background_compiler_disabled_depth_ > 0; 430 return background_compiler_disabled_depth_ > 0;
445 } 431 }
446 432
447 void UpdateLastAllocationProfileAccumulatorResetTimestamp() { 433 void UpdateLastAllocationProfileAccumulatorResetTimestamp() {
448 last_allocationprofile_accumulator_reset_timestamp_ = 434 last_allocationprofile_accumulator_reset_timestamp_ =
449 OS::GetCurrentTimeMillis(); 435 OS::GetCurrentTimeMillis();
450 } 436 }
451 437
(...skipping 26 matching lines...) Expand all
478 464
479 #ifndef PRODUCT 465 #ifndef PRODUCT
480 void PrintJSON(JSONStream* stream, bool ref = true); 466 void PrintJSON(JSONStream* stream, bool ref = true);
481 #endif 467 #endif
482 468
483 // Mutator thread is used to aggregate compiler stats. 469 // Mutator thread is used to aggregate compiler stats.
484 CompilerStats* aggregate_compiler_stats() { 470 CompilerStats* aggregate_compiler_stats() {
485 return mutator_thread()->compiler_stats(); 471 return mutator_thread()->compiler_stats();
486 } 472 }
487 473
488 VMTagCounters* vm_tag_counters() { 474 VMTagCounters* vm_tag_counters() { return &vm_tag_counters_; }
489 return &vm_tag_counters_;
490 }
491 475
492 bool IsReloading() const { 476 bool IsReloading() const { return reload_context_ != NULL; }
493 return reload_context_ != NULL;
494 }
495 477
496 IsolateReloadContext* reload_context() { 478 IsolateReloadContext* reload_context() { return reload_context_; }
497 return reload_context_;
498 }
499 479
500 void DeleteReloadContext(); 480 void DeleteReloadContext();
501 481
502 bool HasAttemptedReload() const { 482 bool HasAttemptedReload() const { return has_attempted_reload_; }
503 return has_attempted_reload_;
504 }
505 483
506 bool CanReload() const; 484 bool CanReload() const;
507 485
508 void set_last_reload_timestamp(int64_t value) { 486 void set_last_reload_timestamp(int64_t value) {
509 last_reload_timestamp_ = value; 487 last_reload_timestamp_ = value;
510 } 488 }
511 int64_t last_reload_timestamp() const { 489 int64_t last_reload_timestamp() const { return last_reload_timestamp_; }
512 return last_reload_timestamp_;
513 }
514 490
515 bool IsPaused() const; 491 bool IsPaused() const;
516 492
517 bool should_pause_post_service_request() const { 493 bool should_pause_post_service_request() const {
518 return should_pause_post_service_request_; 494 return should_pause_post_service_request_;
519 } 495 }
520 void set_should_pause_post_service_request( 496 void set_should_pause_post_service_request(
521 bool should_pause_post_service_request) { 497 bool should_pause_post_service_request) {
522 should_pause_post_service_request_ = should_pause_post_service_request; 498 should_pause_post_service_request_ = should_pause_post_service_request;
523 } 499 }
524 500
525 void PausePostRequest(); 501 void PausePostRequest();
526 502
527 uword user_tag() const { 503 uword user_tag() const { return user_tag_; }
528 return user_tag_; 504 static intptr_t user_tag_offset() { return OFFSET_OF(Isolate, user_tag_); }
529 }
530 static intptr_t user_tag_offset() {
531 return OFFSET_OF(Isolate, user_tag_);
532 }
533 static intptr_t current_tag_offset() { 505 static intptr_t current_tag_offset() {
534 return OFFSET_OF(Isolate, current_tag_); 506 return OFFSET_OF(Isolate, current_tag_);
535 } 507 }
536 static intptr_t default_tag_offset() { 508 static intptr_t default_tag_offset() {
537 return OFFSET_OF(Isolate, default_tag_); 509 return OFFSET_OF(Isolate, default_tag_);
538 } 510 }
539 511
540 #define ISOLATE_METRIC_ACCESSOR(type, variable, name, unit) \ 512 #define ISOLATE_METRIC_ACCESSOR(type, variable, name, unit) \
541 type* Get##variable##Metric() { return &metric_##variable##_; } 513 type* Get##variable##Metric() { return &metric_##variable##_; }
542 ISOLATE_METRIC_LIST(ISOLATE_METRIC_ACCESSOR); 514 ISOLATE_METRIC_LIST(ISOLATE_METRIC_ACCESSOR);
543 #undef ISOLATE_METRIC_ACCESSOR 515 #undef ISOLATE_METRIC_ACCESSOR
544 516
545 static intptr_t IsolateListLength(); 517 static intptr_t IsolateListLength();
546 518
547 RawGrowableObjectArray* tag_table() const { return tag_table_; } 519 RawGrowableObjectArray* tag_table() const { return tag_table_; }
548 void set_tag_table(const GrowableObjectArray& value); 520 void set_tag_table(const GrowableObjectArray& value);
549 521
550 RawUserTag* current_tag() const { return current_tag_; } 522 RawUserTag* current_tag() const { return current_tag_; }
551 void set_current_tag(const UserTag& tag); 523 void set_current_tag(const UserTag& tag);
552 524
553 RawUserTag* default_tag() const { return default_tag_; } 525 RawUserTag* default_tag() const { return default_tag_; }
554 void set_default_tag(const UserTag& tag); 526 void set_default_tag(const UserTag& tag);
555 527
556 void set_ic_miss_code(const Code& code); 528 void set_ic_miss_code(const Code& code);
557 529
558 Metric* metrics_list_head() { 530 Metric* metrics_list_head() { return metrics_list_head_; }
559 return metrics_list_head_;
560 }
561 531
562 void set_metrics_list_head(Metric* metric) { 532 void set_metrics_list_head(Metric* metric) { metrics_list_head_ = metric; }
563 metrics_list_head_ = metric;
564 }
565 533
566 RawGrowableObjectArray* deoptimized_code_array() const { 534 RawGrowableObjectArray* deoptimized_code_array() const {
567 return deoptimized_code_array_; 535 return deoptimized_code_array_;
568 } 536 }
569 void set_deoptimized_code_array(const GrowableObjectArray& value); 537 void set_deoptimized_code_array(const GrowableObjectArray& value);
570 void TrackDeoptimizedCode(const Code& code); 538 void TrackDeoptimizedCode(const Code& code);
571 539
572 // Also sends a paused at exit event over the service protocol. 540 // Also sends a paused at exit event over the service protocol.
573 void SetStickyError(RawError* sticky_error); 541 void SetStickyError(RawError* sticky_error);
574 542
575 RawError* sticky_error() const { return sticky_error_; } 543 RawError* sticky_error() const { return sticky_error_; }
576 void clear_sticky_error(); 544 void clear_sticky_error();
577 545
578 bool compilation_allowed() const { return compilation_allowed_; } 546 bool compilation_allowed() const { return compilation_allowed_; }
579 void set_compilation_allowed(bool allowed) { 547 void set_compilation_allowed(bool allowed) { compilation_allowed_ = allowed; }
580 compilation_allowed_ = allowed;
581 }
582 548
583 // In precompilation we finalize all regular classes before compiling. 549 // In precompilation we finalize all regular classes before compiling.
584 bool all_classes_finalized() const { return all_classes_finalized_; } 550 bool all_classes_finalized() const { return all_classes_finalized_; }
585 void set_all_classes_finalized(bool value) { 551 void set_all_classes_finalized(bool value) { all_classes_finalized_ = value; }
586 all_classes_finalized_ = value;
587 }
588 552
589 // True during top level parsing. 553 // True during top level parsing.
590 bool IsTopLevelParsing() { 554 bool IsTopLevelParsing() {
591 const intptr_t value = 555 const intptr_t value =
592 AtomicOperations::LoadRelaxed(&top_level_parsing_count_); 556 AtomicOperations::LoadRelaxed(&top_level_parsing_count_);
593 ASSERT(value >= 0); 557 ASSERT(value >= 0);
594 return value > 0; 558 return value > 0;
595 } 559 }
596 560
597 void IncrTopLevelParsingCount() { 561 void IncrTopLevelParsingCount() {
(...skipping 17 matching lines...) Expand all
615 579
616 // Used by background compiler which field became boxed and must trigger 580 // Used by background compiler which field became boxed and must trigger
617 // deoptimization in the mutator thread. 581 // deoptimization in the mutator thread.
618 void AddDeoptimizingBoxedField(const Field& field); 582 void AddDeoptimizingBoxedField(const Field& field);
619 // Returns Field::null() if none available in the list. 583 // Returns Field::null() if none available in the list.
620 RawField* GetDeoptimizingBoxedField(); 584 RawField* GetDeoptimizingBoxedField();
621 585
622 #ifndef PRODUCT 586 #ifndef PRODUCT
623 RawObject* InvokePendingServiceExtensionCalls(); 587 RawObject* InvokePendingServiceExtensionCalls();
624 void AppendServiceExtensionCall(const Instance& closure, 588 void AppendServiceExtensionCall(const Instance& closure,
625 const String& method_name, 589 const String& method_name,
626 const Array& parameter_keys, 590 const Array& parameter_keys,
627 const Array& parameter_values, 591 const Array& parameter_values,
628 const Instance& reply_port, 592 const Instance& reply_port,
629 const Instance& id); 593 const Instance& id);
630 void RegisterServiceExtensionHandler(const String& name, 594 void RegisterServiceExtensionHandler(const String& name,
631 const Instance& closure); 595 const Instance& closure);
632 RawInstance* LookupServiceExtensionHandler(const String& name); 596 RawInstance* LookupServiceExtensionHandler(const String& name);
633 #endif 597 #endif
634 598
635 static void VisitIsolates(IsolateVisitor* visitor); 599 static void VisitIsolates(IsolateVisitor* visitor);
636 600
637 // Handle service messages until we are told to resume execution. 601 // Handle service messages until we are told to resume execution.
638 void PauseEventHandler(); 602 void PauseEventHandler();
639 603
640 void AddClosureFunction(const Function& function) const; 604 void AddClosureFunction(const Function& function) const;
641 RawFunction* LookupClosureFunction(const Function& parent, 605 RawFunction* LookupClosureFunction(const Function& parent,
642 TokenPosition token_pos) const; 606 TokenPosition token_pos) const;
643 intptr_t FindClosureIndex(const Function& needle) const; 607 intptr_t FindClosureIndex(const Function& needle) const;
644 RawFunction* ClosureFunctionFromIndex(intptr_t idx) const; 608 RawFunction* ClosureFunctionFromIndex(intptr_t idx) const;
645 609
646 bool is_service_isolate() const { return is_service_isolate_; } 610 bool is_service_isolate() const { return is_service_isolate_; }
647 611
648 // Isolate-specific flag handling. 612 // Isolate-specific flag handling.
649 static void FlagsInitialize(Dart_IsolateFlags* api_flags); 613 static void FlagsInitialize(Dart_IsolateFlags* api_flags);
650 void FlagsCopyTo(Dart_IsolateFlags* api_flags) const; 614 void FlagsCopyTo(Dart_IsolateFlags* api_flags) const;
651 void FlagsCopyFrom(const Dart_IsolateFlags& api_flags); 615 void FlagsCopyFrom(const Dart_IsolateFlags& api_flags);
652 616
653 #if defined(PRODUCT) 617 #if defined(PRODUCT)
654 bool type_checks() const { return FLAG_enable_type_checks; } 618 bool type_checks() const { return FLAG_enable_type_checks; }
655 bool asserts() const { return FLAG_enable_asserts; } 619 bool asserts() const { return FLAG_enable_asserts; }
656 bool error_on_bad_type() const { return FLAG_error_on_bad_type; } 620 bool error_on_bad_type() const { return FLAG_error_on_bad_type; }
657 bool error_on_bad_override() const { return FLAG_error_on_bad_override; } 621 bool error_on_bad_override() const { return FLAG_error_on_bad_override; }
658 #else // defined(PRODUCT) 622 #else // defined(PRODUCT)
659 bool type_checks() const { return type_checks_; } 623 bool type_checks() const { return type_checks_; }
660 bool asserts() const { return asserts_; } 624 bool asserts() const { return asserts_; }
661 bool error_on_bad_type() const { return error_on_bad_type_; } 625 bool error_on_bad_type() const { return error_on_bad_type_; }
662 bool error_on_bad_override() const { return error_on_bad_override_; } 626 bool error_on_bad_override() const { return error_on_bad_override_; }
663 #endif // defined(PRODUCT) 627 #endif // defined(PRODUCT)
664 628
665 static void KillAllIsolates(LibMsgId msg_id); 629 static void KillAllIsolates(LibMsgId msg_id);
666 static void KillIfExists(Isolate* isolate, LibMsgId msg_id); 630 static void KillIfExists(Isolate* isolate, LibMsgId msg_id);
667 631
668 static void DisableIsolateCreation(); 632 static void DisableIsolateCreation();
669 static void EnableIsolateCreation(); 633 static void EnableIsolateCreation();
670 static bool IsolateCreationEnabled(); 634 static bool IsolateCreationEnabled();
671 635
672 void StopBackgroundCompiler(); 636 void StopBackgroundCompiler();
673 637
674 intptr_t reload_every_n_stack_overflow_checks() const { 638 intptr_t reload_every_n_stack_overflow_checks() const {
675 return reload_every_n_stack_overflow_checks_; 639 return reload_every_n_stack_overflow_checks_;
676 } 640 }
677 641
678 void MaybeIncreaseReloadEveryNStackOverflowChecks(); 642 void MaybeIncreaseReloadEveryNStackOverflowChecks();
679 643
680 private: 644 private:
681 friend class Dart; // Init, InitOnce, Shutdown. 645 friend class Dart; // Init, InitOnce, Shutdown.
682 friend class IsolateKillerVisitor; // Kill(). 646 friend class IsolateKillerVisitor; // Kill().
683 647
684 explicit Isolate(const Dart_IsolateFlags& api_flags); 648 explicit Isolate(const Dart_IsolateFlags& api_flags);
685 649
686 static void InitOnce(); 650 static void InitOnce();
687 static Isolate* Init(const char* name_prefix, 651 static Isolate* Init(const char* name_prefix,
688 const Dart_IsolateFlags& api_flags, 652 const Dart_IsolateFlags& api_flags,
689 bool is_vm_isolate = false); 653 bool is_vm_isolate = false);
690 654
691 // The isolates_list_monitor_ should be held when calling Kill(). 655 // The isolates_list_monitor_ should be held when calling Kill().
692 void KillLocked(LibMsgId msg_id); 656 void KillLocked(LibMsgId msg_id);
693 657
694 void LowLevelShutdown(); 658 void LowLevelShutdown();
695 void Shutdown(); 659 void Shutdown();
696 660
697 void BuildName(const char* name_prefix); 661 void BuildName(const char* name_prefix);
698 662
699 void ProfileIdle(); 663 void ProfileIdle();
700 664
701 // Visit all object pointers. Caller must ensure concurrent sweeper is not 665 // Visit all object pointers. Caller must ensure concurrent sweeper is not
702 // running, and the visitor must not allocate. 666 // running, and the visitor must not allocate.
703 void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames); 667 void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
704 668
705 void set_user_tag(uword tag) { 669 void set_user_tag(uword tag) { user_tag_ = tag; }
706 user_tag_ = tag;
707 }
708 670
709 RawGrowableObjectArray* GetAndClearPendingServiceExtensionCalls(); 671 RawGrowableObjectArray* GetAndClearPendingServiceExtensionCalls();
710 RawGrowableObjectArray* pending_service_extension_calls() const { 672 RawGrowableObjectArray* pending_service_extension_calls() const {
711 return pending_service_extension_calls_; 673 return pending_service_extension_calls_;
712 } 674 }
713 void set_pending_service_extension_calls(const GrowableObjectArray& value); 675 void set_pending_service_extension_calls(const GrowableObjectArray& value);
714 RawGrowableObjectArray* registered_service_extension_handlers() const { 676 RawGrowableObjectArray* registered_service_extension_handlers() const {
715 return registered_service_extension_handlers_; 677 return registered_service_extension_handlers_;
716 } 678 }
717 void set_registered_service_extension_handlers( 679 void set_registered_service_extension_handlers(
718 const GrowableObjectArray& value); 680 const GrowableObjectArray& value);
719 681
720 Monitor* threads_lock() const; 682 Monitor* threads_lock() const;
721 Thread* ScheduleThread(bool is_mutator, bool bypass_safepoint = false); 683 Thread* ScheduleThread(bool is_mutator, bool bypass_safepoint = false);
722 void UnscheduleThread( 684 void UnscheduleThread(Thread* thread,
723 Thread* thread, bool is_mutator, bool bypass_safepoint = false); 685 bool is_mutator,
686 bool bypass_safepoint = false);
724 687
725 // DEPRECATED: Use Thread's methods instead. During migration, these default 688 // DEPRECATED: Use Thread's methods instead. During migration, these default
726 // to using the mutator thread (which must also be the current thread). 689 // to using the mutator thread (which must also be the current thread).
727 Zone* current_zone() const { 690 Zone* current_zone() const {
728 ASSERT(Thread::Current() == mutator_thread()); 691 ASSERT(Thread::Current() == mutator_thread());
729 return mutator_thread()->zone(); 692 return mutator_thread()->zone();
730 } 693 }
731 694
732 // Accessed from generated code: 695 // Accessed from generated code:
733 StoreBuffer* store_buffer_; 696 StoreBuffer* store_buffer_;
(...skipping 20 matching lines...) Expand all
754 void* init_callback_data_; 717 void* init_callback_data_;
755 Dart_EnvironmentCallback environment_callback_; 718 Dart_EnvironmentCallback environment_callback_;
756 Dart_LibraryTagHandler library_tag_handler_; 719 Dart_LibraryTagHandler library_tag_handler_;
757 ApiState* api_state_; 720 ApiState* api_state_;
758 Debugger* debugger_; 721 Debugger* debugger_;
759 bool resume_request_; 722 bool resume_request_;
760 int64_t last_resume_timestamp_; 723 int64_t last_resume_timestamp_;
761 bool has_compiled_code_; // Can check that no compilation occured. 724 bool has_compiled_code_; // Can check that no compilation occured.
762 Random random_; 725 Random random_;
763 Simulator* simulator_; 726 Simulator* simulator_;
764 Mutex* mutex_; // Protects compiler stats. 727 Mutex* mutex_; // Protects compiler stats.
765 Mutex* symbols_mutex_; // Protects concurrent access to the symbol table. 728 Mutex* symbols_mutex_; // Protects concurrent access to the symbol table.
766 Mutex* type_canonicalization_mutex_; // Protects type canonicalization. 729 Mutex* type_canonicalization_mutex_; // Protects type canonicalization.
767 Mutex* constant_canonicalization_mutex_; // Protects const canonicalization. 730 Mutex* constant_canonicalization_mutex_; // Protects const canonicalization.
768 Mutex* megamorphic_lookup_mutex_; // Protects megamorphic table lookup. 731 Mutex* megamorphic_lookup_mutex_; // Protects megamorphic table lookup.
769 MessageHandler* message_handler_; 732 MessageHandler* message_handler_;
770 IsolateSpawnState* spawn_state_; 733 IsolateSpawnState* spawn_state_;
771 bool is_runnable_; 734 bool is_runnable_;
772 Dart_GcPrologueCallback gc_prologue_callback_; 735 Dart_GcPrologueCallback gc_prologue_callback_;
773 Dart_GcEpilogueCallback gc_epilogue_callback_; 736 Dart_GcEpilogueCallback gc_epilogue_callback_;
774 intptr_t defer_finalization_count_; 737 intptr_t defer_finalization_count_;
775 MallocGrowableArray<PendingLazyDeopt>* pending_deopts_; 738 MallocGrowableArray<PendingLazyDeopt>* pending_deopts_;
776 DeoptContext* deopt_context_; 739 DeoptContext* deopt_context_;
777 740
778 bool is_service_isolate_; 741 bool is_service_isolate_;
779 742
780 // Isolate-specific flags. 743 // Isolate-specific flags.
781 NOT_IN_PRODUCT( 744 #if !defined(PRODUCT)
782 bool type_checks_; 745 bool type_checks_;
783 bool asserts_; 746 bool asserts_;
784 bool error_on_bad_type_; 747 bool error_on_bad_type_;
785 bool error_on_bad_override_; 748 bool error_on_bad_override_;
786 ) 749 #endif // !defined(PRODUCT)
787 750
788 // Timestamps of last operation via service. 751 // Timestamps of last operation via service.
789 int64_t last_allocationprofile_accumulator_reset_timestamp_; 752 int64_t last_allocationprofile_accumulator_reset_timestamp_;
790 int64_t last_allocationprofile_gc_timestamp_; 753 int64_t last_allocationprofile_gc_timestamp_;
791 754
792 // Ring buffer of objects assigned an id. 755 // Ring buffer of objects assigned an id.
793 ObjectIdRing* object_id_ring_; 756 ObjectIdRing* object_id_ring_;
794 757
795 VMTagCounters vm_tag_counters_; 758 VMTagCounters vm_tag_counters_;
796 RawGrowableObjectArray* tag_table_; 759 RawGrowableObjectArray* tag_table_;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 static bool AddIsolateToList(Isolate* isolate); 837 static bool AddIsolateToList(Isolate* isolate);
875 static void RemoveIsolateFromList(Isolate* isolate); 838 static void RemoveIsolateFromList(Isolate* isolate);
876 839
877 // This monitor protects isolates_list_head_, and creation_enabled_. 840 // This monitor protects isolates_list_head_, and creation_enabled_.
878 static Monitor* isolates_list_monitor_; 841 static Monitor* isolates_list_monitor_;
879 static Isolate* isolates_list_head_; 842 static Isolate* isolates_list_head_;
880 static bool creation_enabled_; 843 static bool creation_enabled_;
881 844
882 #define REUSABLE_FRIEND_DECLARATION(name) \ 845 #define REUSABLE_FRIEND_DECLARATION(name) \
883 friend class Reusable##name##HandleScope; 846 friend class Reusable##name##HandleScope;
884 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION) 847 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION)
885 #undef REUSABLE_FRIEND_DECLARATION 848 #undef REUSABLE_FRIEND_DECLARATION
886 849
887 friend class Become; // VisitObjectPointers 850 friend class Become; // VisitObjectPointers
888 friend class GCMarker; // VisitObjectPointers 851 friend class GCMarker; // VisitObjectPointers
889 friend class SafepointHandler; 852 friend class SafepointHandler;
890 friend class Scavenger; // VisitObjectPointers 853 friend class Scavenger; // VisitObjectPointers
891 friend class ServiceIsolate; 854 friend class ServiceIsolate;
892 friend class Thread; 855 friend class Thread;
893 friend class Timeline; 856 friend class Timeline;
894 friend class NoReloadScope; // reload_block 857 friend class NoReloadScope; // reload_block
895 858
896 859
897 DISALLOW_COPY_AND_ASSIGN(Isolate); 860 DISALLOW_COPY_AND_ASSIGN(Isolate);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 intptr_t* spawn_count_; 983 intptr_t* spawn_count_;
1021 984
1022 Dart_IsolateFlags isolate_flags_; 985 Dart_IsolateFlags isolate_flags_;
1023 bool paused_; 986 bool paused_;
1024 bool errors_are_fatal_; 987 bool errors_are_fatal_;
1025 }; 988 };
1026 989
1027 } // namespace dart 990 } // namespace dart
1028 991
1029 #endif // RUNTIME_VM_ISOLATE_H_ 992 #endif // RUNTIME_VM_ISOLATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/intrinsifier_x64.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698