kolibrios/programs/cmm/sysmon/cpu_ram.h
Kirill Lipatov (Leency) 6d14f374a8 SysMon: show all tmp disks, reparate general tab into two, precise calculation of rd disk empty space
git-svn-id: svn://kolibrios.org@7906 a494cfbc-eb01-0410-851d-a64ba20cac60
2020-05-10 01:44:40 +00:00

96 lines
2.5 KiB
C

//===================================================//
// //
// DATA //
// //
//===================================================//
sensor cpu;
sensor ram;
//===================================================//
// //
// CODE //
// //
//===================================================//
void DrawIconWithText(dword _x, _y, _icon, _title)
{
DrawIcon16(_x, _y, sc.work, _icon);
DrawBar(_x+ICONGAP, _y, WIN_CONTENT_W - ICONGAP - _x, 20, sc.work);
WriteText(_x+ICONGAP, _y, 0x90, sc.work_text, _title);
}
void CPUnRAM__Main()
{
dword cpu_frequency = GetCpuFrequency()/1000;
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON);
goto _GENERAL_REDRAW_2;
loop()
{
WaitEventTimeout(25);
switch(EAX & 0xFF)
{
case evButton: Sysmon__ButtonEvent(); break;
case evKey: Sysmon__KeyEvent(); break;
case evReDraw:
_GENERAL_REDRAW_2:
Sysmon__DefineAndDrawWindow();
cpu.set_size(WIN_PAD, WIN_CONTENT_Y+25, WIN_CONTENT_W, 100);
ram.set_size(WIN_PAD, WIN_CONTENT_Y+170, WIN_CONTENT_W, 23);
default:
MonitorCpu();
MonitorRam();
}
}
}
dword GetCpuLoad(dword max_h)
{
dword idle;
dword CPU_SEC = GetCpuFrequency() >> 20 + 1;
dword IDLE_SEC = GetCpuIdleCount() >> 20 * max_h;
EAX = IDLE_SEC;
EBX = CPU_SEC;
$cdq
$div ebx
idle = EAX;
return max_h - idle;
}
int pos=0;
void MonitorCpu()
{
static dword cpu_stack[1980*3];
int i;
if (!cpu.w) return;
cpu_stack[pos] = GetCpuLoad(cpu.h);
if (cpu_stack[pos]<=2) || (cpu_stack[pos]>cpu.h) cpu_stack[pos]=2;
sprintf(#param, "CPU load %i%%", cpu_stack[pos]);
DrawIconWithText(WIN_PAD, cpu.y - 25, 48, #param);
for (i=0; i<WIN_CONTENT_W; i+=2) {
DrawBar(i+cpu.x, cpu.y, 1, cpu.h-cpu_stack[i], PROGRESS_BG);
DrawBar(i+cpu.x, cpu.h-cpu_stack[i]+cpu.y, 1, cpu_stack[i], LOAD_CPU);
DrawBar(i+1+cpu.x, cpu.y, 1, cpu.h, PROGRESS_BG);
}
pos++;
if (pos>=WIN_CONTENT_W) {
pos = WIN_CONTENT_W-1;
for (i=0; i<pos; i++) {
cpu_stack[i] = cpu_stack[i+1];
}
}
}
void MonitorRam()
{
ram.draw_progress(GetFreeRAM()*ram.w/GetTotalRAM());
sprintf(#param, "RAM usage: %i Mb free of %i Mb", GetFreeRAM()/1024, GetTotalRAM()/1024);
DrawIconWithText(WIN_PAD, ram.y - 25, 51, #param);
}