/* -*- 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