~arosales/test/oprofile

« back to all changes in this revision

Viewing changes to gui/oprof_start_config.cpp

  • Committer: Antonio Rosales
  • Date: 2013-03-28 08:40:26 UTC
  • Revision ID: antonio.rosales@canonical.com-20130328084026-gpqns1mkqd7cnr05
Move files up one directory.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}