|
Packit |
76ec6a |
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
Packit |
76ec6a |
#ifndef _GSM_SMOOTH_REFRESH_H
|
|
Packit |
76ec6a |
#define _GSM_SMOOTH_REFRESH_H
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#include <giomm.h>
|
|
Packit |
76ec6a |
#include <glibmm.h>
|
|
Packit |
76ec6a |
#include <string>
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#include "util.h"
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
using std::string;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
class SmoothRefresh
|
|
Packit |
76ec6a |
: private procman::NonCopyable
|
|
Packit |
76ec6a |
{
|
|
Packit |
76ec6a |
public:
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
/*
|
|
Packit |
76ec6a |
smooth_refresh_new
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
@config_interval : pointer to config_interval so we can observe
|
|
Packit |
76ec6a |
config_interval changes.
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
@return : initialized SmoothRefresh
|
|
Packit |
76ec6a |
*/
|
|
Packit |
76ec6a |
SmoothRefresh(Glib::RefPtr<Gio::Settings> a_settings);
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
~SmoothRefresh();
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
/*
|
|
Packit |
76ec6a |
smooth_refresh_reset
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
Resets state and re-read config_interval
|
|
Packit |
76ec6a |
*/
|
|
Packit |
76ec6a |
void reset();
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
/*
|
|
Packit |
76ec6a |
smooth_refresh_get
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
Computes the new refresh_interval so that CPU usage is lower than
|
|
Packit |
76ec6a |
SMOOTH_REFRESH_PCPU.
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
@new_interval : where the new refresh_interval is stored.
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
@return : TRUE is refresh_interval has changed. The new refresh_interval
|
|
Packit |
76ec6a |
is stored in @new_interval. Else FALSE;
|
|
Packit |
76ec6a |
*/
|
|
Packit |
76ec6a |
bool get(guint &new_interval);
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
static const string KEY;
|
|
Packit |
76ec6a |
static const bool KEY_DEFAULT_VALUE;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
private:
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
unsigned get_own_cpu_usage();
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
void load_settings_value(Glib::ustring key);
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
/*
|
|
Packit |
76ec6a |
fuzzy logic:
|
|
Packit |
76ec6a |
- decrease refresh interval only if current CPU% and last CPU%
|
|
Packit |
76ec6a |
are higher than PCPU_LO
|
|
Packit |
76ec6a |
- increase refresh interval only if current CPU% and last CPU%
|
|
Packit |
76ec6a |
are higher than PCPU_HI
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
*/
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
enum
|
|
Packit |
76ec6a |
{
|
|
Packit |
76ec6a |
PCPU_HI = 22,
|
|
Packit |
76ec6a |
PCPU_LO = 18
|
|
Packit |
76ec6a |
};
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
/*
|
|
Packit |
76ec6a |
-self : procman's PID (so we call getpid() only once)
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
-interval : current refresh interval
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
-config_interval : pointer to the configuration refresh interval.
|
|
Packit |
76ec6a |
Used to watch configuration changes
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
-interval >= -config_interval
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
-last_pcpu : to avoid spikes, the last CPU%. See PCPU_{LO,HI}
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
-last_total_time:
|
|
Packit |
76ec6a |
-last_cpu_time: Save last cpu and process times to compute CPU%
|
|
Packit |
76ec6a |
*/
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
Glib::RefPtr<Gio::Settings> settings;
|
|
Packit |
76ec6a |
bool active;
|
|
Packit |
76ec6a |
sigc::connection connection;
|
|
Packit |
76ec6a |
guint interval;
|
|
Packit |
76ec6a |
unsigned last_pcpu;
|
|
Packit |
76ec6a |
guint64 last_total_time;
|
|
Packit |
76ec6a |
guint64 last_cpu_time;
|
|
Packit |
76ec6a |
};
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#endif /* _GSM_SMOOTH_REFRESH_H */
|