18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file oprof_start.h 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * The GUI start main class 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef OPROF_START_H 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define OPROF_START_H 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <vector> 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <map> 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <set> 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "ui/oprof_start.base.h" 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "oprof_start_config.h" 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_events.h" 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass QIntValidator; 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass QListViewItem; 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass QTimerEvent; 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/// a struct describing a particular event type 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct op_event_descr { 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd op_event_descr(); 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// bit mask of allowed counters 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd uint counter_mask; 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// hardware event number 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd u32 val; 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// unit mask values if applicable 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd op_unit_mask const * unit; 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// name of event 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd std::string name; 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// description of event 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd std::string help_str; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// minimum counter value 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd uint min_count; 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass oprof_start : public oprof_start_base 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd Q_OBJECT 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpublic: 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd oprof_start(); 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprotected slots: 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// select the kernel image filename 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void choose_kernel_filename(); 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// flush profiler 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void on_flush_profiler_data(); 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// start profiler 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void on_start_profiler(); 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// stop profiler 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void on_stop_profiler(); 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// events selection change 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void event_selected(); 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// the mouse is over an event 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void event_over(QListViewItem *); 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// state of separate_kernel_cb changed 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void on_separate_kernel_cb_changed(int); 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// reset sample files 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void on_reset_sample_files(); 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// close the dialog 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void accept(); 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// WM hide event 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void closeEvent(QCloseEvent * e); 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// timer event 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void timerEvent(QTimerEvent * e); 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprivate: 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// the counter combo has been activated 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void fill_events_listbox(); 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// fill the event details and gui setup 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void fill_events(); 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// find an event description by name 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd op_event_descr const & locate_event(std::string const & name) const; 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// update config on user change 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void record_selected_event_config(); 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// update config and validate 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool record_config(); 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// calculate unit mask for given event and unit mask part 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void get_unit_mask_part(op_event_descr const & descr, uint num, bool selected, uint & mask); 978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// calculate unit mask for given event 988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd uint get_unit_mask(op_event_descr const & descr); 998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// set the unit mask widgets for given event 1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void setup_unit_masks(op_event_descr const & descr); 1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// return the maximum perf counter value for the current cpu type 1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd uint max_perf_count() const; 1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// show an event's settings 1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void display_event(op_event_descr const & descrp); 1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// hide unit mask widgets 1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void hide_masks(void); 1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// read the events set in daemonrc 1128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void read_set_events(); 1138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// use the default event 1148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void setup_default_event(); 1158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// load the extra config file 1168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void load_config_file(); 1178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// save the config 1188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool save_config(); 1198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// redraw the event list by changing icon status 1218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd void draw_event_list(); 1228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// return true if item is selectable or already selected 1248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool is_selectable_event(QListViewItem * item); 1258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// try to alloc counters for the selected_events 1278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool alloc_selected_events() const; 1288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// validator for event count 1308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd QIntValidator* event_count_validator; 1318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// all available events for this hardware 1338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd std::vector<op_event_descr> v_events; 1348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// current event configs for each counter 1368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd typedef std::map<std::string, event_setting> event_setting_map; 1378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd event_setting_map event_cfgs; 1388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// The currently selected events. We must track this because 1408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// with multiple selection listbox QT doesn't allow to know 1418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// what is the last selected item. events_selected() update it 1428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd std::set<QListViewItem *> selected_events; 1438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd QListViewItem * current_event; 1448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// current config 1468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd config_setting config; 1478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// the expansion of "~" directory 1498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd std::string user_dir; 1508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// CPU type 1528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd op_cpu cpu_type; 1538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// CPU speed in MHz 1558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd double cpu_speed; 1568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// total number of available HW counters 1588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd uint op_nr_counters; 1598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// Total number of samples for this run 1618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd unsigned long total_nr_interrupts; 1628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 1638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif // OPROF_START_H 165