///|
pub struct RuntimeInspectorSnapshot {
  priv size : @core.Size
  priv dirty_count : Int
  priv dirty_element_ids : Array[Int]
  priv dirty_build_count : Int
  priv dirty_build_element_ids : Array[Int]
  priv dirty_layout_count : Int
  priv dirty_layout_element_ids : Array[Int]
  priv dirty_paint_count : Int
  priv dirty_paint_element_ids : Array[Int]
  priv dirty_state : RuntimeDirtyStateSummary
  priv needs_rebuild : Bool
  priv needs_layout : Bool
  priv needs_paint : Bool
  priv needs_redraw : Bool
  priv draw_command_count : Int
  priv rebuild_pass_count : Int
  priv layout_pass_count : Int
  priv paint_pass_count : Int
  priv draw_command_build_count : Int
  priv layout_cache_hit_count : Int
  priv layout_cache_miss_count : Int
  priv render_cache_hit_count : Int
  priv render_cache_miss_count : Int
  priv last_event_hit_path : Array[Int]
  priv last_frame_timing : RuntimeFrameTiming
  priv program_dispatched_count : Int
  priv program_update_count : Int
  priv ignored_program_dispatch_count : Int
  priv program_message_enqueue_count : Int
  priv program_message_drain_count : Int
  priv program_pending_message_count : Int
  priv program_max_pending_message_count : Int
  priv program_effect_plan_count : Int
  priv program_effect_count : Int
  priv program_effect_none_count : Int
  priv program_effect_batch_count : Int
  priv program_effect_send_count : Int
  priv program_effect_dispatch_count : Int
  priv program_effect_run_count : Int
  priv program_effect_task_count : Int
  priv duplicate_effect_descriptor_key_count : Int
  priv duplicate_effect_descriptor_keys : Array[String]
  priv superseded_effect_task_key_count : Int
  priv superseded_effect_task_keys : Array[String]
  priv last_effect_summary : EffectPlanSummary
  priv last_scheduled_effect_summary : EffectPlanSummary
  priv active_effect_task_count : Int
  priv started_effect_task_count : Int
  priv completed_effect_task_count : Int
  priv cancelled_effect_task_count : Int
  priv ignored_effect_task_dispatch_count : Int
  priv active_effect_tasks : Array[@core.EffectDescriptor]
  priv effect_task_lifecycle : Array[EffectTaskLifecycleSnapshot]
  priv program_subscription_plan_count : Int
  priv last_subscription_plan_summary : SubscriptionPlanSummary
  priv active_subscription_count : Int
  priv started_subscription_count : Int
  priv reused_subscription_count : Int
  priv cancelled_subscription_count : Int
  priv duplicate_subscription_key_count : Int
  priv duplicate_subscription_keys : Array[String]
  priv ignored_subscription_dispatch_count : Int
  priv active_subscriptions : Array[@core.SubscriptionDescriptor]
  priv active_subscription_kind_counts : Array[SubscriptionKindCount]
  priv subscription_lifecycle : Array[SubscriptionLifecycleSnapshot]
  priv rebuild_reason : String
  priv dirty_reasons : Array[String]
} derive(Eq, Debug, ToJson)

///|
pub extend RuntimeInspectorSnapshot with Debug::{to_repr}

///|
pub extend RuntimeInspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend RuntimeInspectorSnapshot with ToJson::{to_json}

///|
pub struct RuntimeDirtyStateSummary {
  priv dirty_count : Int
  priv dirty_element_ids : Array[Int]
  priv dirty_build_count : Int
  priv dirty_build_element_ids : Array[Int]
  priv dirty_layout_count : Int
  priv dirty_layout_element_ids : Array[Int]
  priv dirty_paint_count : Int
  priv dirty_paint_element_ids : Array[Int]
  priv needs_rebuild : Bool
  priv needs_layout : Bool
  priv needs_paint : Bool
  priv needs_redraw : Bool
  priv has_pending_work : Bool
  priv reason : String
  priv reasons : Array[String]
  priv damage_kind : String
  priv damage_rect_count : Int
  priv damage_full_reason : String
} derive(Eq, Debug, ToJson)

///|
pub extend RuntimeDirtyStateSummary with Debug::{to_repr}

///|
pub extend RuntimeDirtyStateSummary with Eq::{not_equal, equal}

///|
pub extend RuntimeDirtyStateSummary with ToJson::{to_json}

///|
pub struct ViewInspectorSummary {
  priv element_id : Int
  priv kind : String
  priv key : String
  priv depth : Int
  priv child_count : Int
  priv needs_build : Bool
  priv needs_layout : Bool
  priv needs_paint : Bool
} derive(Eq, Debug, ToJson)

///|
pub extend ViewInspectorSummary with Debug::{to_repr}

///|
pub extend ViewInspectorSummary with Eq::{not_equal, equal}

///|
pub extend ViewInspectorSummary with ToJson::{to_json}

///|
pub struct ViewTreeInspectorSnapshot {
  priv root_kind : String
  priv node_count : Int
  priv control_count : Int
  priv modified_count : Int
  priv dirty_build_count : Int
  priv dirty_layout_count : Int
  priv dirty_paint_count : Int
  priv nodes : Array[ViewInspectorSummary]
} derive(Eq, Debug, ToJson)

///|
pub extend ViewTreeInspectorSnapshot with Debug::{to_repr}

///|
pub extend ViewTreeInspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend ViewTreeInspectorSnapshot with ToJson::{to_json}

///|
pub struct LayoutBoundsInspectorEntry {
  priv element_id : Int
  priv frame : @core.Rect
  priv constraints : @core.Constraints
  priv depth : Int
  priv child_count : Int
} derive(Eq, Debug, ToJson)

///|
pub extend LayoutBoundsInspectorEntry with Debug::{to_repr}

///|
pub extend LayoutBoundsInspectorEntry with Eq::{not_equal, equal}

///|
pub extend LayoutBoundsInspectorEntry with ToJson::{to_json}

///|
pub struct LayoutInspectorSnapshot {
  priv root_frame : @core.Rect
  priv node_count : Int
  priv leaf_count : Int
  priv max_depth : Int
  priv bounds : Array[LayoutBoundsInspectorEntry]
} derive(Eq, Debug, ToJson)

///|
pub extend LayoutInspectorSnapshot with Debug::{to_repr}

///|
pub extend LayoutInspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend LayoutInspectorSnapshot with ToJson::{to_json}

///|
pub struct RenderInspectorEntry {
  priv element_id : Int
  priv frame : @core.Rect
  priv paint_bounds : @core.Rect
  priv depth : Int
  priv child_count : Int
  priv command_count : Int
  priv overlay_command_count : Int
  priv repaint_boundary : Bool
  priv cache_key : String
} derive(Eq, Debug, ToJson)

///|
pub extend RenderInspectorEntry with Debug::{to_repr}

///|
pub extend RenderInspectorEntry with Eq::{not_equal, equal}

///|
pub extend RenderInspectorEntry with ToJson::{to_json}

///|
pub struct RenderInspectorSnapshot {
  priv command_count : Int
  priv text_count : Int
  priv image_count : Int
  priv clip_depth : Int
  priv open_clip_depth : Int
  priv layer_depth : Int
  priv open_layer_depth : Int
  priv filter_depth : Int
  priv open_filter_depth : Int
  priv path_count : Int
  priv shader_count : Int
  priv unbalanced_pop_count : Int
  priv nodes : Array[RenderInspectorEntry]
} derive(Eq, Debug, ToJson)

///|
pub extend RenderInspectorSnapshot with Debug::{to_repr}

///|
pub extend RenderInspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend RenderInspectorSnapshot with ToJson::{to_json}

///|
pub struct SemanticsInspectorEntry {
  priv node_id : String
  priv role : @core.SemanticsRole
  priv label : String
  priv value : String
  priv frame : @core.Rect
  priv depth : Int
  priv child_count : Int
  priv action_count : Int
  priv focusable : Bool
  priv selected : Bool
  priv checked : Bool
  priv expanded : Bool
  priv disabled : Bool
} derive(Eq, Debug, ToJson)

///|
pub extend SemanticsInspectorEntry with Debug::{to_repr}

///|
pub extend SemanticsInspectorEntry with Eq::{not_equal, equal}

///|
pub extend SemanticsInspectorEntry with ToJson::{to_json}

///|
pub struct SemanticsInspectorSnapshot {
  priv root_role : @core.SemanticsRole
  priv node_count : Int
  priv focusable_count : Int
  priv action_count : Int
  priv max_depth : Int
  priv selected_count : Int
  priv checked_count : Int
  priv expanded_count : Int
  priv invalid_count : Int
  priv required_count : Int
  priv described_count : Int
  priv nodes : Array[SemanticsInspectorEntry]
} derive(Eq, Debug, ToJson)

///|
pub extend SemanticsInspectorSnapshot with Debug::{to_repr}

///|
pub extend SemanticsInspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend SemanticsInspectorSnapshot with ToJson::{to_json}

///|
pub struct InspectorSnapshot {
  priv runtime : RuntimeInspectorSnapshot
  priv view_tree : ViewTreeInspectorSnapshot
  priv layout : LayoutInspectorSnapshot
  priv render : RenderInspectorSnapshot
  priv semantics : SemanticsInspectorSnapshot
} derive(Eq, Debug, ToJson)

///|
pub extend InspectorSnapshot with Debug::{to_repr}

///|
pub extend InspectorSnapshot with Eq::{not_equal, equal}

///|
pub extend InspectorSnapshot with ToJson::{to_json}