mirror of https://github.com/BOINC/boinc.git
parent
032141578c
commit
61890e3d8e
|
@ -98,6 +98,7 @@ ACTIVE_TASK::ACTIVE_TASK() {
|
|||
graphics_request_time = time(0);
|
||||
graphics_acked_mode = MODE_UNSUPPORTED;
|
||||
graphics_mode_before_ss = MODE_HIDE_GRAPHICS;
|
||||
last_status_msg_time = 0;
|
||||
}
|
||||
|
||||
int ACTIVE_TASK::init(RESULT* rp) {
|
||||
|
@ -802,7 +803,7 @@ int ACTIVE_TASK::get_cpu_time() {
|
|||
LONGLONG totTime;
|
||||
|
||||
// Get the elapsed CPU time
|
||||
if (GetProcessTimes( pid_handle, &creation_time, &exit_time, &kernel_time, &user_time )) {
|
||||
if (GetProcessTimes(pid_handle, &creation_time, &exit_time, &kernel_time, &user_time)) {
|
||||
tKernel.LowPart = kernel_time.dwLowDateTime;
|
||||
tKernel.HighPart = kernel_time.dwHighDateTime;
|
||||
tUser.LowPart = user_time.dwLowDateTime;
|
||||
|
@ -833,12 +834,16 @@ int ACTIVE_TASK::get_cpu_time() {
|
|||
bool ACTIVE_TASK::check_app_status() {
|
||||
char msg_buf[SHM_SEG_SIZE];
|
||||
if (app_client_shm.get_msg(msg_buf, APP_CORE_WORKER_SEG)) {
|
||||
last_status_msg_time = time(0);
|
||||
fraction_done = current_cpu_time = checkpoint_cpu_time = 0.0;
|
||||
parse_double(msg_buf, "<fraction_done>", fraction_done);
|
||||
parse_double(msg_buf, "<current_cpu_time>", current_cpu_time);
|
||||
parse_double(msg_buf, "<checkpoint_cpu_time>", checkpoint_cpu_time);
|
||||
return true;
|
||||
}
|
||||
if (last_status_msg_time+5 < time(0)) {
|
||||
get_cpu_time();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ public:
|
|||
double max_disk_usage;
|
||||
|
||||
APP_CLIENT_SHM app_client_shm; // core/app shared mem
|
||||
time_t last_status_msg_time;
|
||||
|
||||
// info related to app's graphics mode (win, screensaver, etc.)
|
||||
int graphics_requested_mode; // our last request to this app
|
||||
|
|
|
@ -22,6 +22,7 @@ void SS_LOGIC::start_ss(time_t new_blank_time) {
|
|||
if (do_ss) return;
|
||||
do_ss = true;
|
||||
do_blank = do_boinc_logo_ss = false;
|
||||
sprintf(ss_msg, "");
|
||||
blank_time = new_blank_time;
|
||||
gstate.active_tasks.save_app_modes();
|
||||
gstate.active_tasks.hide_apps();
|
||||
|
@ -59,15 +60,18 @@ void SS_LOGIC::poll() {
|
|||
}
|
||||
}
|
||||
do_boinc_logo_ss = false;
|
||||
sprintf(ss_msg, "");
|
||||
do_blank = true;
|
||||
} else {
|
||||
atp = gstate.active_tasks.get_app_requested(MODE_FULLSCREEN);
|
||||
if (atp) {
|
||||
if (atp->graphics_acked_mode == MODE_FULLSCREEN) {
|
||||
do_boinc_logo_ss = false;
|
||||
sprintf(ss_msg, "");
|
||||
} else {
|
||||
if (time(0)>ack_deadline) {
|
||||
do_boinc_logo_ss = true;
|
||||
sprintf(ss_msg, "App can't display graphics");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -77,6 +81,7 @@ void SS_LOGIC::poll() {
|
|||
ack_deadline = time(0) + 5;
|
||||
} else {
|
||||
do_boinc_logo_ss = true;
|
||||
sprintf(ss_msg, "No work available");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@ class SS_LOGIC {
|
|||
public:
|
||||
SS_LOGIC();
|
||||
|
||||
char ss_msg[256]; // message to display on BOINC screensaver
|
||||
|
||||
void start_ss(time_t blank_time);
|
||||
void stop_ss();
|
||||
void poll();
|
||||
|
|
|
@ -219,7 +219,10 @@ void CMainWindow::UpdateGUI(CLIENT_STATE* pcs)
|
|||
int cpuhour = (int)(cur_cpu / (60 * 60));
|
||||
int cpumin = (int)(cur_cpu / 60) % 60;
|
||||
int cpusec = (int)(cur_cpu) % 60;
|
||||
strBuf.Format("%0.2d:%0.2d:%0.2d", cpuhour, cpumin, cpusec);
|
||||
if (cur_cpu == 0)
|
||||
strBuf.Format("---");
|
||||
else
|
||||
strBuf.Format("%0.2d:%0.2d:%0.2d", cpuhour, cpumin, cpusec);
|
||||
m_ResultListCtrl.SetItemText(i, 3, strBuf);
|
||||
|
||||
// progress
|
||||
|
|
|
@ -45,7 +45,6 @@ CSSWindow::CSSWindow()
|
|||
ShowSSWindow(false);
|
||||
|
||||
m_hBOINCIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON));
|
||||
m_bCleared = false;
|
||||
}
|
||||
|
||||
// CMainWindow::SetMode
|
||||
|
@ -65,8 +64,6 @@ void CSSWindow::ShowSSWindow(bool show_win)
|
|||
return;
|
||||
}
|
||||
|
||||
m_bCleared = false;
|
||||
|
||||
CString strWndClass = AfxRegisterWndClass(0);
|
||||
DWORD dwExStyle;
|
||||
DWORD dwStyle;
|
||||
|
@ -144,6 +141,8 @@ int CSSWindow::OnCreate(LPCREATESTRUCT lpcs)
|
|||
|
||||
// Initial position is (0,0)
|
||||
m_nPosX = m_nPosY = 0;
|
||||
m_nTextPosX = -10000;
|
||||
m_nTextPosY = 0;
|
||||
// Initial velocity is (1-5,1-5)
|
||||
m_nDX = (rand() % 5)+1;
|
||||
m_nDY = (rand() % 5)+1;
|
||||
|
@ -170,17 +169,30 @@ void CSSWindow::OnPaint()
|
|||
{
|
||||
PAINTSTRUCT ps;
|
||||
CDC* pdc;
|
||||
RECT winRect;
|
||||
RECT winRect, textRect;
|
||||
|
||||
// Fill the window with black
|
||||
pdc = BeginPaint(&ps);
|
||||
pdc->SetBkColor(RGB(0,0,0));
|
||||
GetClientRect(&winRect);
|
||||
pdc->FillSolidRect(&winRect, RGB(0,0,0));
|
||||
m_bCleared = true;
|
||||
|
||||
// Draw the bouncing BOINC icon if we're not in blank screen mode
|
||||
if (gstate.ss_logic.do_boinc_logo_ss) {
|
||||
pdc->DrawIcon(m_nPosX, m_nPosY, m_hBOINCIcon);
|
||||
pdc->SetTextColor(RGB(255,255,255));
|
||||
// Draw status text
|
||||
SetRect(&textRect, m_nTextPosX, m_nTextPosY, m_nTextPosX, m_nTextPosY);
|
||||
pdc->DrawText(gstate.ss_logic.ss_msg, &textRect, DT_CALCRECT);
|
||||
m_nTextPosX += 2;
|
||||
if (m_nTextPosX + (textRect.right-textRect.left) < 0)
|
||||
m_nTextPosX = textRect.left - textRect.right;
|
||||
pdc->DrawText(gstate.ss_logic.ss_msg, &textRect, DT_LEFT);
|
||||
if (m_nTextPosX > winRect.right) {
|
||||
m_nTextPosX = -10000;
|
||||
m_nTextPosY = rand() % (winRect.bottom-winRect.top);
|
||||
}
|
||||
|
||||
// Draw the bouncing icon
|
||||
m_nPosX += m_nDX;
|
||||
m_nPosY += m_nDY;
|
||||
if (m_nPosX <= winRect.left || (m_nPosX+32) >= winRect.right) m_nDX *= -1;
|
||||
|
@ -189,6 +201,7 @@ void CSSWindow::OnPaint()
|
|||
if ((m_nPosX+32) > winRect.right) m_nPosX = winRect.right-32;
|
||||
if (m_nPosY < winRect.top) m_nPosY = winRect.top;
|
||||
if ((m_nPosY+32) > winRect.bottom) m_nPosY = winRect.bottom-32;
|
||||
pdc->DrawIcon(m_nPosX, m_nPosY, m_hBOINCIcon);
|
||||
}
|
||||
|
||||
EndPaint(&ps);
|
||||
|
@ -202,10 +215,9 @@ void CSSWindow::OnPaint()
|
|||
void CSSWindow::OnTimer(UINT uEventID)
|
||||
{
|
||||
// Paint our own window
|
||||
if(uEventID == m_uPaintTimerID) {
|
||||
if(gstate.ss_logic.do_boinc_logo_ss || gstate.ss_logic.do_blank) {
|
||||
Invalidate();
|
||||
OnPaint();
|
||||
}
|
||||
if(uEventID == m_uPaintTimerID &&
|
||||
(gstate.ss_logic.do_boinc_logo_ss || gstate.ss_logic.do_blank)) {
|
||||
Invalidate();
|
||||
OnPaint();
|
||||
}
|
||||
}
|
|
@ -45,7 +45,6 @@ public:
|
|||
|
||||
private:
|
||||
CPoint m_MousePos;
|
||||
bool m_bCleared;
|
||||
|
||||
UINT m_uPaintTimerID; // ID of current app timer
|
||||
|
||||
|
@ -54,6 +53,7 @@ private:
|
|||
|
||||
HICON m_hBOINCIcon;
|
||||
int m_nPosX, m_nPosY;
|
||||
int m_nTextPosX, m_nTextPosY;
|
||||
int m_nDX, m_nDY;
|
||||
|
||||
LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
|
Loading…
Reference in New Issue