scheduler_stats.pony

use @pony_scheduler_stats[_SchedulerStats]()

primitive SchedulerStats
  """
  Provides functions that expose statistics about the current scheduler. All
  methods will return '0' if the runtime used the program wasn't compiled with
  runtime statistics turned on.
  """

  fun total_mem_allocated(auth: SchedulerStatsAuth): I64 =>
    """
    Returns the total memory currently allocated by the current scheduler thread
    (note: this is an approximate value and it can be negative as it represents
    only a partial view across all the scheduler threads)
    """
    ifdef runtimestats then @pony_scheduler_stats().mem_allocated + @pony_scheduler_stats().mem_allocated_actors
    else 0
    end

  fun total_mem_used(auth: SchedulerStatsAuth): I64 =>
    """
    Returns the total memory currently used by the current scheduler thread
    (note: this is an approximate value and it can be negative as it represents
    only a partial view across all the scheduler threads)
    """
    ifdef runtimestats then @pony_scheduler_stats().mem_used + @pony_scheduler_stats().mem_used_actors
    else 0
    end

  fun created_actors_counter(auth: SchedulerStatsAuth): USize =>
    """
    Returns the number of actors created by the current schedule thread
    (note: this is an approximate value and it can be negative as it represents
    only a partial view across all the scheduler threads)
    """
    ifdef runtimestats then @pony_scheduler_stats().created_actors_counter
    else 0
    end

  fun destroyed_actors_counter(auth: SchedulerStatsAuth): USize =>
    """
    Returns the number of actors destroyed by the current schedule thread
    """
    ifdef runtimestats then @pony_scheduler_stats().destroyed_actors_counter
    else 0
    end

  fun actor_app_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used to process actor app messages
    """
    ifdef runtimestats then @pony_scheduler_stats().actor_app_cpu
    else 0
    end

  fun actor_gc_mark_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used for mark phase to garbage collect actor heaps
    """
    ifdef runtimestats then @pony_scheduler_stats().actor_gc_mark_cpu
    else 0
    end

  fun actor_gc_sweep_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used for sweep phase to garbage collect actor heaps
    """
    ifdef runtimestats then @pony_scheduler_stats().actor_gc_sweep_cpu
    else 0
    end

  fun actor_system_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used to process actor system messages
    """
    ifdef runtimestats then @pony_scheduler_stats().actor_system_cpu
    else 0
    end

  fun msg_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used to process scheduler system messages
    """
    ifdef runtimestats then @pony_scheduler_stats().msg_cpu
    else 0
    end

  fun misc_cpu(auth: SchedulerStatsAuth): USize =>
    """
    Returns the amount of cpu the current scheduler has used while waiting to do work
    """
    ifdef runtimestats then @pony_scheduler_stats().misc_cpu
    else 0
    end

  fun mem_used_inflight_messages(auth: SchedulerStatsAuth): I64 =>
    """
    Returns the number of memory used by inflight messages created by the current
    scheduler thread (note: this is an approximate value and it can be negative if
    the current thread receives more messages than it sends)
    """
    ifdef runtimestatsmessages then @pony_scheduler_stats().mem_used_inflight_messages
    else 0
    end

  fun mem_allocated_inflight_messages(auth: SchedulerStatsAuth): I64 =>
    """
    Returns the number of memory allocated by inflight messages created by the current
    scheduler thread (note: this is an approximate value and it can be negative if
    the current thread receives more messages than it sends)
    """
    ifdef runtimestatsmessages then @pony_scheduler_stats().mem_allocated_inflight_messages
    else 0
    end

  fun num_inflight_messages(auth: SchedulerStatsAuth): I64 =>
    """
    Returns the number of inflight messages by the current scheduler thread
    (note: this is an approximate value and it can be negative if
    the current thread receives more messages than it sends)
    """
    ifdef runtimestatsmessages then @pony_scheduler_stats().num_inflight_messages
    else 0
    end