1bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/** 2bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * @file oprof_start.h 3bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * The GUI start main class 4bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 5bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * @remark Copyright 2002 OProfile authors 6bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * @remark Read the file COPYING 7bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 8bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * @author Philippe Elie 9bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * @author John Levon 10bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 11bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 12bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#ifndef OPROF_START_H 13bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define OPROF_START_H 14bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 15bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include <vector> 16bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include <map> 17bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include <set> 18bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 19bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "ui/oprof_start.base.h" 20bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "oprof_start_config.h" 21bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 22bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "op_events.h" 23bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 24bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass QIntValidator; 25bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass QListViewItem; 26bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass QTimerEvent; 27bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 28bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/// a struct describing a particular event type 29bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonstruct op_event_descr { 30bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson op_event_descr(); 31bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 32bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// bit mask of allowed counters 33bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson uint counter_mask; 34bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// hardware event number 35bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson u32 val; 36bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// unit mask values if applicable 37bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson op_unit_mask const * unit; 38bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// name of event 39bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson std::string name; 40bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// description of event 41bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson std::string help_str; 42bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// minimum counter value 43bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson uint min_count; 44bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson}; 45bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 46bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass oprof_start : public oprof_start_base 47bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson{ 48bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson Q_OBJECT 49bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 50bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonpublic: 51bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson oprof_start(); 52bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 53bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonprotected slots: 54bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// select the kernel image filename 55bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void choose_kernel_filename(); 56bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// flush profiler 57bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void on_flush_profiler_data(); 58bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// start profiler 59bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void on_start_profiler(); 60bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// stop profiler 61bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void on_stop_profiler(); 62bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// events selection change 63bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void event_selected(); 64bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// the mouse is over an event 65bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void event_over(QListViewItem *); 66bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// state of separate_kernel_cb changed 67bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void on_separate_kernel_cb_changed(int); 68bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// reset sample files 69bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void on_reset_sample_files(); 70bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 71bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// close the dialog 72bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void accept(); 73bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 74bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// WM hide event 75bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void closeEvent(QCloseEvent * e); 76bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 77bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// timer event 78bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void timerEvent(QTimerEvent * e); 79bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 80bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonprivate: 81bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// the counter combo has been activated 82bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void fill_events_listbox(); 83bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 84bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// fill the event details and gui setup 85bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void fill_events(); 86bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 87bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// find an event description by name 88bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson op_event_descr const & locate_event(std::string const & name) const; 89bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 90bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// update config on user change 91bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void record_selected_event_config(); 92bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// update config and validate 93bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool record_config(); 94bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 95bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// calculate unit mask for given event and unit mask part 96bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void get_unit_mask_part(op_event_descr const & descr, uint num, bool selected, uint & mask); 97bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// calculate unit mask for given event 98bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson uint get_unit_mask(op_event_descr const & descr); 99bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// set the unit mask widgets for given event 100bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void setup_unit_masks(op_event_descr const & descr); 101bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 102bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// return the maximum perf counter value for the current cpu type 103bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson uint max_perf_count() const; 104bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 105bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// show an event's settings 106bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void display_event(op_event_descr const & descrp); 107bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 108bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// hide unit mask widgets 109bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void hide_masks(void); 110bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 111bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// read the events set in daemonrc 112bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void read_set_events(); 113bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// use the default event 114bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void setup_default_event(); 115bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// load the extra config file 116bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void load_config_file(); 117bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// save the config 118bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool save_config(); 119bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 120bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// redraw the event list by changing icon status 121bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void draw_event_list(); 122bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 123bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// return true if item is selectable or already selected 124bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool is_selectable_event(QListViewItem * item); 125bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 126bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// try to alloc counters for the selected_events 127bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool alloc_selected_events() const; 128bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 129bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// validator for event count 130bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson QIntValidator* event_count_validator; 131bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 132bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// all available events for this hardware 133bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson std::vector<op_event_descr> v_events; 134bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 135bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// current event configs for each counter 136bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson typedef std::map<std::string, event_setting> event_setting_map; 137bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson event_setting_map event_cfgs; 138bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 139bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// The currently selected events. We must track this because 140bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// with multiple selection listbox QT doesn't allow to know 141bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// what is the last selected item. events_selected() update it 142bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson std::set<QListViewItem *> selected_events; 143bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson QListViewItem * current_event; 144bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 145bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// current config 146bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson config_setting config; 147bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 148bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// the expansion of "~" directory 149bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson std::string user_dir; 150bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 151bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// CPU type 152bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson op_cpu cpu_type; 153bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 154bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// CPU speed in MHz 155bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson double cpu_speed; 156bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 157bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// total number of available HW counters 158bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson uint op_nr_counters; 159bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 160bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson /// Total number of samples for this run 161bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson unsigned long total_nr_interrupts; 162bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson}; 163bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 164bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#endif // OPROF_START_H 165bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson