1 /** 2 * @file oprof_start_config.cpp 3 * GUI startup config management 4 * 5 * @remark Copyright 2002 OProfile authors 6 * @remark Read the file COPYING 7 * 8 * @author John Levon 9 * @author Philippe Elie 10 */ 11 12 #include <stdio.h> 13 14 #include <sstream> 15 #include <fstream> 16 #include <iomanip> 17 #include <sys/utsname.h> 18 19 #include "string_manip.h" 20 #include "oprof_start_config.h" 21 #include "op_config.h" 22 #include "op_config_24.h" 23 24 using namespace std; 25 26 event_setting::event_setting() 27 : 28 count(0), 29 umask(0), 30 os_ring_count(0), 31 user_ring_count(0) 32 { 33 } 34 35 36 config_setting::config_setting() 37 : 38 buffer_size(OP_DEFAULT_BUF_SIZE), 39 note_table_size(OP_DEFAULT_NOTE_SIZE), 40 no_kernel(false), 41 verbose(false), 42 separate_lib(false), 43 separate_kernel(false), 44 separate_cpu(false), 45 separate_thread(false), 46 callgraph_depth(0), 47 buffer_watershed(0), 48 cpu_buffer_size(0) 49 { 50 struct utsname info; 51 52 /* Guess path to vmlinux based on kernel currently running. */ 53 if (uname(&info)) { 54 perror("oprof_start: Unable to determine OS release."); 55 } else { 56 string const version(info.release); 57 string const vmlinux_path("/lib/modules/" + version 58 + "/build/vmlinux"); 59 kernel_filename = vmlinux_path; 60 } 61 } 62 63 64 void config_setting::load(istream & in) 65 { 66 buffer_size = OP_DEFAULT_BUF_SIZE; 67 note_table_size = OP_DEFAULT_NOTE_SIZE; 68 69 string str; 70 71 while (getline(in, str)) { 72 string val = split(str, '='); 73 if (str == "BUF_SIZE") { 74 buffer_size = op_lexical_cast<unsigned int>(val); 75 if (buffer_size < OP_DEFAULT_BUF_SIZE) 76 buffer_size = OP_DEFAULT_BUF_SIZE; 77 } else if (str == "NOTE_SIZE") { 78 note_table_size = op_lexical_cast<unsigned int>(val); 79 if (note_table_size < OP_DEFAULT_NOTE_SIZE) 80 note_table_size = OP_DEFAULT_NOTE_SIZE; 81 } else if (str == "VMLINUX") { 82 if (val == "none") { 83 kernel_filename = ""; 84 no_kernel = true; 85 } else if (!val.empty()) { 86 no_kernel = false; 87 kernel_filename = val; 88 } 89 } else if (str == "SEPARATE_LIB") { 90 separate_lib = op_lexical_cast<bool>(val); 91 } else if (str == "SEPARATE_KERNEL") { 92 separate_kernel = op_lexical_cast<bool>(val); 93 } else if (str == "SEPARATE_CPU") { 94 separate_cpu = op_lexical_cast<bool>(val); 95 } else if (str == "SEPARATE_THREAD") { 96 separate_thread = op_lexical_cast<bool>(val); 97 } else if (str == "CALLGRAPH") { 98 callgraph_depth = op_lexical_cast<unsigned int>(val); 99 } else if (str == "BUF_WATERSHED") { 100 buffer_watershed = op_lexical_cast<unsigned int>(val); 101 } else if (str == "CPU_BUF_SIZE") { 102 cpu_buffer_size = op_lexical_cast<unsigned int>(val); 103 } 104 } 105 } 106 107 108 istream & operator>>(istream & in, config_setting & object) 109 { 110 object.load(in); 111 return in; 112 } 113