| Index: runtime/vm/isolate.h
|
| diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
|
| index ff26b4eb38df7b75d79a9c0a0c425fccca2da04e..62572410ee3a6bd156e7fd0fd7705c346fbb7e55 100644
|
| --- a/runtime/vm/isolate.h
|
| +++ b/runtime/vm/isolate.h
|
| @@ -223,10 +223,12 @@ class Isolate : public BaseIsolate {
|
| }
|
|
|
| const char* name() const { return name_; }
|
| +
|
| +#if !defined(PRODUCT)
|
| const char* debugger_name() const { return debugger_name_; }
|
| void set_debugger_name(const char* name);
|
| -
|
| int64_t UptimeMicros() const;
|
| +#endif // !defined(PRODUCT)
|
|
|
| Dart_Port main_port() const { return main_port_; }
|
| void set_main_port(Dart_Port port) {
|
| @@ -425,8 +427,10 @@ class Isolate : public BaseIsolate {
|
| return cleanup_callback_;
|
| }
|
|
|
| +#if !defined(PRODUCT)
|
| void set_object_id_ring(ObjectIdRing* ring) { object_id_ring_ = ring; }
|
| ObjectIdRing* object_id_ring() { return object_id_ring_; }
|
| +#endif // !defined(PRODUCT)
|
|
|
| void AddPendingDeopt(uword fp, uword pc);
|
| uword FindPendingDeopt(uword fp) const;
|
| @@ -465,6 +469,7 @@ class Isolate : public BaseIsolate {
|
| return background_compiler_disabled_depth_ > 0;
|
| }
|
|
|
| +#if !defined(PRODUCT)
|
| void UpdateLastAllocationProfileAccumulatorResetTimestamp() {
|
| last_allocationprofile_accumulator_reset_timestamp_ =
|
| OS::GetCurrentTimeMillis();
|
| @@ -481,6 +486,7 @@ class Isolate : public BaseIsolate {
|
| int64_t last_allocationprofile_gc_timestamp() const {
|
| return last_allocationprofile_gc_timestamp_;
|
| }
|
| +#endif // !defined(PRODUCT)
|
|
|
| intptr_t BlockClassFinalization() {
|
| ASSERT(defer_finalization_count_ >= 0);
|
| @@ -506,6 +512,7 @@ class Isolate : public BaseIsolate {
|
| return mutator_thread()->compiler_stats();
|
| }
|
|
|
| +#if !defined(PRODUCT)
|
| VMTagCounters* vm_tag_counters() { return &vm_tag_counters_; }
|
|
|
| bool IsReloading() const { return reload_context_ != NULL; }
|
| @@ -522,9 +529,11 @@ class Isolate : public BaseIsolate {
|
| last_reload_timestamp_ = value;
|
| }
|
| int64_t last_reload_timestamp() const { return last_reload_timestamp_; }
|
| +#endif // !defined(PRODUCT)
|
|
|
| bool IsPaused() const;
|
|
|
| +#if !defined(PRODUCT)
|
| bool should_pause_post_service_request() const {
|
| return should_pause_post_service_request_;
|
| }
|
| @@ -532,6 +541,7 @@ class Isolate : public BaseIsolate {
|
| bool should_pause_post_service_request) {
|
| should_pause_post_service_request_ = should_pause_post_service_request;
|
| }
|
| +#endif // !defined(PRODUCT)
|
|
|
| RawError* PausePostRequest();
|
|
|
| @@ -544,10 +554,12 @@ class Isolate : public BaseIsolate {
|
| return OFFSET_OF(Isolate, default_tag_);
|
| }
|
|
|
| +#if !defined(PRODUCT)
|
| #define ISOLATE_METRIC_ACCESSOR(type, variable, name, unit) \
|
| type* Get##variable##Metric() { return &metric_##variable##_; }
|
| ISOLATE_METRIC_LIST(ISOLATE_METRIC_ACCESSOR);
|
| #undef ISOLATE_METRIC_ACCESSOR
|
| +#endif // !defined(PRODUCT)
|
|
|
| static intptr_t IsolateListLength();
|
|
|
| @@ -562,9 +574,10 @@ class Isolate : public BaseIsolate {
|
|
|
| void set_ic_miss_code(const Code& code);
|
|
|
| +#if !defined(PRODUCT)
|
| Metric* metrics_list_head() { return metrics_list_head_; }
|
| -
|
| void set_metrics_list_head(Metric* metric) { metrics_list_head_ = metric; }
|
| +#endif // !defined(PRODUCT)
|
|
|
| RawGrowableObjectArray* deoptimized_code_array() const {
|
| return deoptimized_code_array_;
|
| @@ -676,9 +689,11 @@ class Isolate : public BaseIsolate {
|
|
|
| void StopBackgroundCompiler();
|
|
|
| +#if !defined(PRODUCT)
|
| intptr_t reload_every_n_stack_overflow_checks() const {
|
| return reload_every_n_stack_overflow_checks_;
|
| }
|
| +#endif // !defined(PRODUCT)
|
|
|
| HandlerInfoCache* handler_info_cache() { return &handler_info_cache_; }
|
|
|
| @@ -716,6 +731,7 @@ class Isolate : public BaseIsolate {
|
|
|
| void set_user_tag(uword tag) { user_tag_ = tag; }
|
|
|
| +#if !defined(PRODUCT)
|
| RawGrowableObjectArray* GetAndClearPendingServiceExtensionCalls();
|
| RawGrowableObjectArray* pending_service_extension_calls() const {
|
| return pending_service_extension_calls_;
|
| @@ -726,6 +742,7 @@ class Isolate : public BaseIsolate {
|
| }
|
| void set_registered_service_extension_handlers(
|
| const GrowableObjectArray& value);
|
| +#endif // !defined(PRODUCT)
|
|
|
| Monitor* threads_lock() const;
|
| Thread* ScheduleThread(bool is_mutator, bool bypass_safepoint = false);
|
| @@ -756,66 +773,37 @@ class Isolate : public BaseIsolate {
|
| ClassTable class_table_;
|
| bool single_step_;
|
|
|
| - ThreadRegistry* thread_registry_;
|
| - SafepointHandler* safepoint_handler_;
|
| - Dart_MessageNotifyCallback message_notify_callback_;
|
| - char* name_;
|
| - char* debugger_name_;
|
| - int64_t start_time_micros_;
|
| - Dart_Port main_port_;
|
| - Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id.
|
| - uint64_t pause_capability_;
|
| - uint64_t terminate_capability_;
|
| + // Try to keep boolean fields together.
|
| bool errors_fatal_;
|
| - void* init_callback_data_;
|
| - Dart_EnvironmentCallback environment_callback_;
|
| - Dart_LibraryTagHandler library_tag_handler_;
|
| - ApiState* api_state_;
|
| - NOT_IN_PRODUCT(Debugger* debugger_);
|
| - NOT_IN_PRODUCT(bool resume_request_);
|
| - NOT_IN_PRODUCT(int64_t last_resume_timestamp_);
|
| - Random random_;
|
| - Simulator* simulator_;
|
| - Mutex* mutex_; // Protects compiler stats.
|
| - Mutex* symbols_mutex_; // Protects concurrent access to the symbol table.
|
| - Mutex* type_canonicalization_mutex_; // Protects type canonicalization.
|
| - Mutex* constant_canonicalization_mutex_; // Protects const canonicalization.
|
| - Mutex* megamorphic_lookup_mutex_; // Protects megamorphic table lookup.
|
| - MessageHandler* message_handler_;
|
| - IsolateSpawnState* spawn_state_;
|
| bool is_runnable_;
|
| - Dart_GcPrologueCallback gc_prologue_callback_;
|
| - Dart_GcEpilogueCallback gc_epilogue_callback_;
|
| - intptr_t defer_finalization_count_;
|
| - MallocGrowableArray<PendingLazyDeopt>* pending_deopts_;
|
| - DeoptContext* deopt_context_;
|
| -
|
| bool is_service_isolate_;
|
| + bool compilation_allowed_;
|
| + bool all_classes_finalized_;
|
| + bool remapping_cids_;
|
|
|
| -// Isolate-specific flags.
|
| +// Fields that aren't needed in a product build go here with boolean flags at
|
| +// the top.
|
| #if !defined(PRODUCT)
|
| + bool resume_request_;
|
| + bool has_attempted_reload_; // Has a reload ever been attempted?
|
| + // Should we pause in the debug message loop after this request?
|
| + bool should_pause_post_service_request_;
|
| +
|
| + char* debugger_name_;
|
| + int64_t start_time_micros_;
|
| + Debugger* debugger_;
|
| + int64_t last_resume_timestamp_;
|
| +
|
| +// Isolate-specific flags.
|
| #define DECLARE_FIELD(name, isolate_flag_name, flag_name) bool name##_;
|
| ISOLATE_FLAG_LIST(DECLARE_FIELD)
|
| #undef DECLARE_FIELD
|
| -#endif // !defined(PRODUCT)
|
|
|
| // Timestamps of last operation via service.
|
| int64_t last_allocationprofile_accumulator_reset_timestamp_;
|
| int64_t last_allocationprofile_gc_timestamp_;
|
|
|
| - // Ring buffer of objects assigned an id.
|
| - ObjectIdRing* object_id_ring_;
|
| -
|
| VMTagCounters vm_tag_counters_;
|
| - RawGrowableObjectArray* tag_table_;
|
| -
|
| - RawGrowableObjectArray* deoptimized_code_array_;
|
| -
|
| - RawError* sticky_error_;
|
| -
|
| - // Background compilation.
|
| - BackgroundCompiler* background_compiler_;
|
| - intptr_t background_compiler_disabled_depth_;
|
|
|
| // We use 6 list entries for each pending service extension calls.
|
| enum {
|
| @@ -839,16 +827,64 @@ class Isolate : public BaseIsolate {
|
|
|
| Metric* metrics_list_head_;
|
|
|
| - bool compilation_allowed_;
|
| - bool all_classes_finalized_;
|
| - bool remapping_cids_;
|
| + // Used to wake the isolate when it is in the pause event loop.
|
| + Monitor* pause_loop_monitor_;
|
| +
|
| +#define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \
|
| + type metric_##variable##_;
|
| + ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE);
|
| +#undef ISOLATE_METRIC_VARIABLE
|
| +
|
| + intptr_t no_reload_scope_depth_; // we can only reload when this is 0.
|
| + // Per-isolate copy of FLAG_reload_every.
|
| + intptr_t reload_every_n_stack_overflow_checks_;
|
| + IsolateReloadContext* reload_context_;
|
| + int64_t last_reload_timestamp_;
|
| + // Ring buffer of objects assigned an id.
|
| + ObjectIdRing* object_id_ring_;
|
| +#endif // !defined(PRODUCT)
|
| +
|
| + // All other fields go here.
|
| + ThreadRegistry* thread_registry_;
|
| + SafepointHandler* safepoint_handler_;
|
| + Dart_MessageNotifyCallback message_notify_callback_;
|
| + char* name_;
|
| + Dart_Port main_port_;
|
| + Dart_Port origin_id_; // Isolates created by spawnFunc have some origin id.
|
| + uint64_t pause_capability_;
|
| + uint64_t terminate_capability_;
|
| + void* init_callback_data_;
|
| + Dart_EnvironmentCallback environment_callback_;
|
| + Dart_LibraryTagHandler library_tag_handler_;
|
| + ApiState* api_state_;
|
| + Random random_;
|
| + Simulator* simulator_;
|
| + Mutex* mutex_; // Protects compiler stats.
|
| + Mutex* symbols_mutex_; // Protects concurrent access to the symbol table.
|
| + Mutex* type_canonicalization_mutex_; // Protects type canonicalization.
|
| + Mutex* constant_canonicalization_mutex_; // Protects const canonicalization.
|
| + Mutex* megamorphic_lookup_mutex_; // Protects megamorphic table lookup.
|
| + MessageHandler* message_handler_;
|
| + IsolateSpawnState* spawn_state_;
|
| + Dart_GcPrologueCallback gc_prologue_callback_;
|
| + Dart_GcEpilogueCallback gc_epilogue_callback_;
|
| + intptr_t defer_finalization_count_;
|
| + MallocGrowableArray<PendingLazyDeopt>* pending_deopts_;
|
| + DeoptContext* deopt_context_;
|
| +
|
| + RawGrowableObjectArray* tag_table_;
|
| +
|
| + RawGrowableObjectArray* deoptimized_code_array_;
|
| +
|
| + RawError* sticky_error_;
|
| +
|
| + // Background compilation.
|
| + BackgroundCompiler* background_compiler_;
|
| + intptr_t background_compiler_disabled_depth_;
|
|
|
| // Isolate list next pointer.
|
| Isolate* next_;
|
|
|
| - // Used to wake the isolate when it is in the pause event loop.
|
| - Monitor* pause_loop_monitor_;
|
| -
|
| // Invalidation generations; used to track events occurring in parallel
|
| // to background compilation. The counters may overflow, which is OK
|
| // since we check for equality to detect if an event occured.
|
| @@ -865,21 +901,6 @@ class Isolate : public BaseIsolate {
|
| Monitor* spawn_count_monitor_;
|
| intptr_t spawn_count_;
|
|
|
| -#define ISOLATE_METRIC_VARIABLE(type, variable, name, unit) \
|
| - type metric_##variable##_;
|
| - ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE);
|
| -#undef ISOLATE_METRIC_VARIABLE
|
| -
|
| - // Has a reload ever been attempted?
|
| - bool has_attempted_reload_;
|
| - intptr_t no_reload_scope_depth_; // we can only reload when this is 0.
|
| - // Per-isolate copy of FLAG_reload_every.
|
| - intptr_t reload_every_n_stack_overflow_checks_;
|
| - IsolateReloadContext* reload_context_;
|
| - int64_t last_reload_timestamp_;
|
| - // Should we pause in the debug message loop after this request?
|
| - bool should_pause_post_service_request_;
|
| -
|
| HandlerInfoCache handler_info_cache_;
|
| CatchEntryStateCache catch_entry_state_cache_;
|
|
|
|
|