summaryrefslogtreecommitdiff
path: root/src/load-graph.h
blob: 60eff23e1039cf7463d7aaf7e0eacbbcfc5e422a (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
#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;
#if GLIB_CHECK_VERSION(2,61,2)
            gint64 time;
#else
            GTimeVal time;
#endif
            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_ */