/* Sun-$Revision: 23.2 $ */ /* Copyright 1998-9 Sun Microsystems, Inc. See the LICENSE file for license information. */ // This file contains declarations for a Self-specific spy. // Monitor monitors system activity ("Self spy") # pragma interface class SelfMonitor: public Monitor { // My state: private: static const int ticks_per_update = 5; // for speed, measure 5 times, display once // Display modes: bool _show_sends; // show optional info on sends / blocks? // Memory bar info: int _bpp; int _pixels_per_mb; int _ruler_len; int _mem_usage_line_len; int _n_old_bars; bool _is_paging_showing; // Tick counters: int32 _tick_no; // # of tick within this second int32 _total_tick_no; // # of ticks since start fint _elapsed_ticks; // ticks since last screen update fint _measurements_per_second; // Remember old values to know when to redisplay these: int32 _old_num_calls; int32 _old_access_calls; int32 _old_rsrc_used; int32 _old_switches; int32 _old_switches_pos; // Display components: SharedIndicator* _sys; Indicator* _page; // Memory: MonitorMemBar* _eden; MonitorMemBar* _from; MonitorMemBar* _to; MonitorMemBar** _old; # if defined(FAST_COMPILER) || defined(SIC_COMPILER) // Zone MonitorZoneBar* _i_zone; MonitorZoneBar* _d_zone; MonitorZoneBar* _s_zone; MonitorZoneBar* _pic_zone; # endif // Activities: MonitorCPUBar* _cpu_bar; MonitorSampledBar* _self_bar; MonitorSampledBar* _lookup_bar; MonitorSampledBar* _compiler_bar; MonitorSampledBar* _vm_bar; MonitorSampledBar* _access_bar; Indicator *_activity, *_resource_areas; ValueIndicator *_allocs; DifferenceIndicator *_blockClones, *_blockInvocations, *_sends; ValueIndicator *_blkShort, *_blkLong; IndicatorLabel *_cpu_label, *_self_label, *_lookup_label, *_compiler_label, *_vm_label, *_access_label, *_pics_label, *_code_label, *_deps_label, *_debug_label, *_nic_label, *_sic_label; CompileIndicator* _compile; public: SelfMonitor(); static oop resetLog_prim(oop rcvr); static oop annotateLog_prim(oop rcvr); void reset(); void resize_contents(); int contents_height(); void add_old_bar(oldSpace *s); int bytes_per_pixel() { return _bpp; } protected: void set_bytes_per_pixel(); void tick_measure(); void tick_redraw(); void create_labels_and_indicators(); void count_ticks(); void measure_current_tick_activity(); void count_compiler_ticks(char* pc); // Self-specific: void initialize_contents(); void create_bars(); void create_labels(); void resize_mem_zone_bars(); void resize_cpu_bars(); void redraw_paging(); void redraw_resources(); void redraw_context_switches(); void redraw_method_being_compiled(); void show_sends(); void show_activitives(); void redraw_mem_usage(); void redraw_bars(bool incr); void redraw_labels(); void update_load_level(); void update_time_bars(); void show_activities(); void show_paging(long how_many); void hide_paging(); void draw_mem_usage_line(); void draw_reserve_lines(); void draw_memory_ruler(); // platform fns: int32 get_measurements_per_second(); // **************** indicator and cpu bar positioning ******************* static int bar_height() { return 9; } /* bar height in pixel */ static int old_thick() { return 4; } // old space is 4 times thicker int co_w(), co_x(), co_y(); int vm_w(), vm_x(), vm_y(), vm_wb(), vm_xb(), vm_yb(), vm_hb(); int lkup_w(), lkup_x(), lkup_y(), lkup_wb(), lkup_xb(), lkup_yb(), lkup_hb(); int comp_w(), comp_x(), comp_y(), comp_wb(), comp_xb(), comp_yb(), comp_hb(); int self_w(), self_x(), self_y(), self_wb(), self_xb(), self_yb(), self_hb(); int cpu_w(), cpu_x(), cpu_y(), cpu_wb(), cpu_xb(), cpu_yb(), cpu_hb(); int ruler_y(), short_tick(), long_tick(); int ctx_x(), ctx_y(), ctx_w(), ctx_s(); int act_w(), act_x(), act_y(); int pg_w(), pg_x(), pg_y(); int sys_w(), sys_x(), sys_y(); int res_w(), res_x(), res_y(); int all_w(), all_x(), all_y(); int opt_w(), opt_x(); int blkcln_x(), blkcln_y(), blkcln_w(); int blkinv_x(), blkinv_y(), blkinv_w(); int blks_x(), blks_w(), blks_y(); int blkl_x(), blkl_w(), blkl_y(); int sends_x(), sends_w(), sends_y(); int acc_x(), acc_w(), acc_y(), acc_wb(), acc_hb(), acc_xb(), acc_yb(); int mbar_x(), eden_y(); int pics_x(), pics_y(), pics_w(); char* pics_t(); int code_x(), code_y(), code_w(); char* code_t(); int nic_x(), nic_y(), nic_w(); char* nic_t(); int sic_x(), sic_y(), sic_w(); char* sic_t(); int deps_x(), deps_y(), deps_w(); char* deps_t(); int dbug_x(), dbug_y(), dbug_w(); char* dbug_t(); int mz_gap() { return 30; } int z_gap() { return 10; } int m_gap() { return 5; } int right_margin() { return 10; } }; // Classes unique to Self Monitor // Report back which execution activity has been taking place this tick class ExecutionMonitor { public: enum Activities { lookup, fast_compiler, opt_compiler, int_execution, fast_execution, opt_execution, virtual_machine, scavenge, gc, idle }; static void initialize(); static Activities current_tick_activity(); static fint self_ticks[3]; static fint lookup_ticks; static fint vm_ticks; static fint all_ticks() { return self_ticks[0] + self_ticks[1] + self_ticks[2] + lookup_ticks + vm_ticks; } static int32 _used_ticks; // # of ticks of CPU used since start static char count_tick_and_return_log_char(); private: static Activities compiled_activity(char*); }; class MonitorCallsToVM { public: static bool in_read_trap(); static bool in_write_trap(); static bool in_system_trap(); static int block_clones(); static int block_method_calls(); static int access_method_calls(); static int method_calls(); static int di_method_calls(); static int all_calls(); static fint code_capacity(); };