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