• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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