summaryrefslogtreecommitdiff
path: root/src/load-graph.h
blob: 35bb62b06c38de37afa12d80b43a832e162521bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef _PROCMAN_LOAD_GRAPH_H_
#define _PROCMAN_LOAD_GRAPH_H_

#include <glib.h>
#include <glibtop/cpu.h>

enum
{
    LOAD_GRAPH_CPU,
    LOAD_GRAPH_MEM,
    LOAD_GRAPH_NET
};


enum {
    CPU_TOTAL,
    CPU_USED,
    N_CPU_STATES
};


struct LoadGraphLabels
{
    GtkWidget *cpu[GLIBTOP_NCPU];
    GtkWidget *memory;
    GtkWidget *swap;
    GtkWidget *net_in;
    GtkWidget *net_in_total;
    GtkWidget *net_out;
    GtkWidget *net_out_total;
};



struct LoadGraph {

    static const unsigned NUM_POINTS = 60 + 2;
    static const unsigned GRAPH_MIN_HEIGHT = 40;

    LoadGraph(guint type);
    ~LoadGraph();

    unsigned num_bars() const;
    void clear_background();

    double fontsize;
    double rmargin;
    double indent;

    guint n;
    gint type;
    guint speed;
    guint draw_width, draw_height;
    guint render_counter;
    guint frames_per_unit;
    guint graph_dely;
    guint real_draw_height;
    double graph_delx;
    guint graph_buffer_offset;

    std::vector<GdkRGBA> colors;

    std::vector<float> data_block;
    gfloat* data[NUM_POINTS];

    GtkWidget *main_widget;
    GtkWidget *disp;

    cairo_pattern_t *background;

    guint timer_index;

    gboolean draw;

    LoadGraphLabels labels;
    GtkWidget *mem_color_picker;
    GtkWidget *swap_color_picker;

    /* union { */
        struct {
            guint now; /* 0 -> current, 1 -> last
                    now ^ 1 each time */
            /* times[now], times[now ^ 1] is last */
            guint64 times[2][GLIBTOP_NCPU][N_CPU_STATES];
        } cpu;

        struct {
            guint64 last_in, last_out;
            GTimeVal time;
            guint64 max;
            unsigned values[NUM_POINTS];
            size_t cur;
        } net;
    /* }; */
};



/* Force a drawing update */
void
load_graph_queue_draw (LoadGraph *g);

/* Start load graph. */
void
load_graph_start (LoadGraph *g);

/* Stop load graph. */
void
load_graph_stop (LoadGraph *g);

/* Change load graph speed and restart it if it has been previously started */
void
load_graph_change_speed (LoadGraph *g,
                         guint new_speed);

LoadGraphLabels*
load_graph_get_labels (LoadGraph *g) G_GNUC_CONST;


GtkWidget*
load_graph_get_widget (LoadGraph *g) G_GNUC_CONST;

GtkWidget*
load_graph_get_mem_color_picker(LoadGraph *g) G_GNUC_CONST;

GtkWidget*
load_graph_get_swap_color_picker(LoadGraph *g) G_GNUC_CONST;


#endif /* _PROCMAN_LOAD_GRAPH_H_ */