18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file oprof_start_config.cpp
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * GUI startup config management
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdio.h>
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sstream>
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fstream>
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iomanip>
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sys/utsname.h>
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h"
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "oprof_start_config.h"
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config.h"
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config_24.h"
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std;
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddevent_setting::event_setting()
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	:
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	count(0),
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	umask(0),
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	os_ring_count(0),
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	user_ring_count(0)
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddconfig_setting::config_setting()
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	:
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buffer_size(OP_DEFAULT_BUF_SIZE),
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	note_table_size(OP_DEFAULT_NOTE_SIZE),
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	no_kernel(false),
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	verbose(false),
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	separate_lib(false),
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	separate_kernel(false),
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	separate_cpu(false),
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	separate_thread(false),
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	callgraph_depth(0),
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buffer_watershed(0),
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	cpu_buffer_size(0)
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct utsname info;
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/* Guess path to vmlinux based on kernel currently running. */
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (uname(&info)) {
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		perror("oprof_start: Unable to determine OS release.");
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	} else {
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		string const version(info.release);
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		string const vmlinux_path("/lib/modules/" + version
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd					 + "/build/vmlinux");
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		kernel_filename = vmlinux_path;
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid config_setting::load(istream & in)
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buffer_size = OP_DEFAULT_BUF_SIZE;
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	note_table_size = OP_DEFAULT_NOTE_SIZE;
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	string str;
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	while (getline(in, str)) {
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		string val = split(str, '=');
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		if (str == "BUF_SIZE") {
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			buffer_size = op_lexical_cast<unsigned int>(val);
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			if (buffer_size < OP_DEFAULT_BUF_SIZE)
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				buffer_size = OP_DEFAULT_BUF_SIZE;
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "NOTE_SIZE") {
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			note_table_size = op_lexical_cast<unsigned int>(val);
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			if (note_table_size < OP_DEFAULT_NOTE_SIZE)
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				note_table_size = OP_DEFAULT_NOTE_SIZE;
818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "VMLINUX") {
828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			if (val == "none") {
838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				kernel_filename = "";
848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				no_kernel = true;
858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			} else if (!val.empty()) {
868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				no_kernel = false;
878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				kernel_filename = val;
888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			}
898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "SEPARATE_LIB") {
908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			separate_lib = op_lexical_cast<bool>(val);
918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "SEPARATE_KERNEL") {
928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			separate_kernel = op_lexical_cast<bool>(val);
938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "SEPARATE_CPU") {
948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			separate_cpu = op_lexical_cast<bool>(val);
958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "SEPARATE_THREAD") {
968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			separate_thread = op_lexical_cast<bool>(val);
978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "CALLGRAPH") {
988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			callgraph_depth = op_lexical_cast<unsigned int>(val);
998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "BUF_WATERSHED") {
1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			buffer_watershed = op_lexical_cast<unsigned int>(val);
1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		} else if (str == "CPU_BUF_SIZE") {
1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			cpu_buffer_size = op_lexical_cast<unsigned int>(val);
1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		}
1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddistream & operator>>(istream & in, config_setting & object)
1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	object.load(in);
1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return in;
1128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
113