You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeaddons/kicker-applets/ktimemon/sample.h

95 lines
2.6 KiB

/* -*- C++ -*- */
/**********************************************************************/
/* TimeMon (c) 1994 Helmut Maierhofer */
/* KDE-ified M. Maierhofer 1998 */
/**********************************************************************/
/*
* sample.h
*
* Definitions for the system dependent sampling class (currently relies
* on the linux /proc filesystem).
*/
#ifndef SAMPLE_H
#define SAMPLE_H
// -- global constants ---------------------------------------------------
#define MAX_CPU 16 // max number of CPUS in an SMP machine
// we get the status for
// -- forward declaration ------------------------------------------------
class KTimeMon;
#ifdef USE_SOLARIS
struct kstat_ctl;
#endif
// -- class declaration --------------------------------------------------
/*
* KSample
*
* This class is responsible for reading the /proc file system and parsing
* the system information.
*/
class KSample {
public:
// -- Sample declaration -----------------------------------------------
struct Sample {
unsigned long cputotal;
unsigned long user, nice, kernel, iowait, idle;
int cpus;
unsigned long smptotal[MAX_CPU], smpbusy[MAX_CPU];
unsigned long mtotal, free, buffers, cached, mkernel, used;
unsigned long stotal, sused, sfree;
void fill(unsigned scale); // fill sample with some fake values
};
struct MemStats {
const char *name;
unsigned long *stat;
};
KSample(KTimeMon *timemon, bool autoScale, unsigned pageScale,
unsigned swapScale, unsigned ctxScale);
virtual ~KSample();
void setScaling(bool autoScale, unsigned pageScale,
unsigned swapScale, unsigned ctxScale);
Sample getSample(unsigned scale); // returns the current sample
Sample getRawSample(); // returns unscaled sample
void updateSample(); // updates the internally stored sample
private:
void readSample(); // reads a new sample from /proc
unsigned long doScale(unsigned long value, unsigned scale1,
unsigned long scale2);
// converts pages to MB
void makeMBytes(unsigned long &pages);
void fatal(const TQString& msg);
void nonfatal(const TQString& msg);
KTimeMon *timemon;
#ifdef __linux__
int memFD, statFD;
#elif defined(USE_SOLARIS)
struct kstat_ctl *kc;
bool warned;
#endif
#if defined(USE_SOLARIS) || defined(__osf__)
unsigned long pagesPerMB;
#endif
Sample sample, oldSample;
unsigned pageScale, swapScale, cxScale;
bool autoscale;
struct MemStats memstats[7];
};
#endif // SAMPLE_H