Select Git revision
-
ballen4705 authored
to accomodate max length device name strings removed un-implemented (-e = Email notification) option from command line arg list. We'll put it back on when implemeneted. smartd now logs serious (fatal) conditions in its operation at loglevel LOG_CRIT rather than LOG_INFO before exiting with error. smartd used to open a file descriptor for each SMART enabled device, and then keep it open the entire time smartd was running. This meant that some commands, like IOREADBLKPART did not work, since the fd to the device was open. smartd now opens the device when it needs to read values, then closes it. Also, if one time around it can't open the device, it simply prints a warning message but does not give up. smartd now opens SCSI devices as well using O_RDONLY rather than O_RDWR. If someone can no longer monitor a SCSI device that used to be readable, this may well be the reason why. smartd never checked if the number of ata or scsi devices detected was greater than the max number it could monitor. Now it does. git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@137 4ea69e1a-61f1-4043-bf83-b5c94c648137
ballen4705 authoredto accomodate max length device name strings removed un-implemented (-e = Email notification) option from command line arg list. We'll put it back on when implemeneted. smartd now logs serious (fatal) conditions in its operation at loglevel LOG_CRIT rather than LOG_INFO before exiting with error. smartd used to open a file descriptor for each SMART enabled device, and then keep it open the entire time smartd was running. This meant that some commands, like IOREADBLKPART did not work, since the fd to the device was open. smartd now opens the device when it needs to read values, then closes it. Also, if one time around it can't open the device, it simply prints a warning message but does not give up. smartd now opens SCSI devices as well using O_RDONLY rather than O_RDWR. If someone can no longer monitor a SCSI device that used to be readable, this may well be the reason why. smartd never checked if the number of ata or scsi devices detected was greater than the max number it could monitor. Now it does. git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@137 4ea69e1a-61f1-4043-bf83-b5c94c648137
graphics2.cpp 2.91 KiB
// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2008 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
// platform-independent part of graphics library
//
#ifdef _MSC_VER
#define strdup _strdup
#define snprintf _snprintf
#endif
#include "util.h"
#include "app_ipc.h"
#include "shmem.h"
#include "boinc_api.h"
#include "graphics2.h"
double boinc_max_fps = 30.;
double boinc_max_gfx_cpu_frac = 0.2;
// needs to be fairly low. Graphics apps run at normal priority,
// so they can prevent main app from getting any time
bool throttled_app_render(int x, int y, double t) {
static double total_render_time = 0;
static double time_until_render = 0;
static double last_now = 0;
static double elapsed_time = 0;
double now, t0, t1, diff, frac;
bool ok_to_render = true;
now = dtime();
diff = now - last_now;
last_now = now;
// ignore interval if negative or more than 1 second
//
if ((diff<0) || (diff>1.0)) {
diff = 0;
}
// enforce frames/sec restriction
//
if (boinc_max_fps) {
time_until_render -= diff;
if (time_until_render < 0) {
time_until_render += 1./boinc_max_fps;
} else {
ok_to_render = false;
}
}
// enforce max CPU time restriction
//
if (boinc_max_gfx_cpu_frac) {
elapsed_time += diff;
if (elapsed_time) {
frac = total_render_time/elapsed_time;
if (frac > boinc_max_gfx_cpu_frac) {
ok_to_render = false;
}
}
}
// render if allowed
//
if (ok_to_render) {
if (boinc_max_gfx_cpu_frac) {
boinc_calling_thread_cpu_time(t0);
}
app_graphics_render(x, y, t);
if (boinc_max_gfx_cpu_frac) {
boinc_calling_thread_cpu_time(t1);
total_render_time += t1 - t0;
}
return true;
}
return false;
}
void get_window_title(char* buf, int len) {
APP_INIT_DATA aid;
boinc_get_init_data(aid);
if (aid.app_version) {
snprintf(buf, len,
"%s version %.2f [workunit: %s]",
aid.app_name, aid.app_version/100.0, aid.wu_name
);
} else {
snprintf(buf, len,
"%s [workunit: %s]",
aid.app_name, aid.wu_name
);
}
}