SCR: Create is_same_task() function which compares both task name and task URL

svn path=/trunk/boinc/; revision=13569
This commit is contained in:
Charlie Fenton 2007-09-11 23:16:41 +00:00
parent 2692557dd5
commit ca9e5694b2
4 changed files with 37 additions and 20 deletions

View File

@ -8396,4 +8396,12 @@ Rytis 11 Sep 2007
(protection from spam)
html/inc/uotd.inc
Charlie 5 Sep 2007
- SCR: Create is_same_task() function which compares both task name
and task URL; call it from count_active_graphic_apps () and
get_random_graphics_app().
clientscr/
mac_saver_module.cpp
screensaver.cpp,h

View File

@ -484,8 +484,8 @@ OSStatus RPCThread(void* param) {
RESULT* theResult = NULL;
RESULT* graphics_app_result_ptr = NULL;
PROJECT* pProject;
std::string current_result_name = "";
std::string avoid_old_result_name = "";
RESULT* current_result = NULL;
RESULT* avoid_old_result = NULL;
int iResultCount = 0;
int iIndex = 0;
double percent_done;
@ -581,7 +581,7 @@ OSStatus RPCThread(void* param) {
for (iIndex = 0; iIndex < iResultCount; iIndex++) {
theResult = results.results.at(iIndex);
if (theResult->name == current_result_name) {
if (is_same_task(theResult, current_result)) {
graphics_app_result_ptr = theResult;
break;
}
@ -600,8 +600,8 @@ print_to_log_file("%s finished", graphics_app_result_ptr->name.c_str());
}
#endif
if (last_change_time && ((dtime() - last_change_time) > GFX_CHANGE_PERIOD)) {
if (count_active_graphic_apps(results, &current_result_name) > 0) {
avoid_old_result_name = current_result_name;
if (count_active_graphic_apps(results, current_result) > 0) {
avoid_old_result = current_result;
terminate_screensaver(graphics_app_pid);
// waitpid test will clear graphics_app_pid and graphics_app_result_ptr
}
@ -611,22 +611,22 @@ print_to_log_file("%s finished", graphics_app_result_ptr->name.c_str());
// If no current graphics app, pick an active task at random and launch its graphics app
if (graphics_app_pid == 0) {
graphics_app_result_ptr = get_random_graphics_app(results, &avoid_old_result_name);
avoid_old_result_name = "";
graphics_app_result_ptr = get_random_graphics_app(results, avoid_old_result);
avoid_old_result = NULL;
if (graphics_app_result_ptr) {
retval = Mac_launch_screensaver(graphics_app_result_ptr, graphics_app_pid, launcher_shell_pid);
if (retval) {
graphics_app_pid = 0;
launcher_shell_pid = 0;
current_result_name = "";
current_result = NULL;
graphics_app_result_ptr = NULL;
} else {
gClientSaverStatus = SS_STATUS_ENABLED;
launch_time = dtime();
last_change_time = launch_time;
last_run_check_time = launch_time;
current_result_name = graphics_app_result_ptr->name;
current_result = graphics_app_result_ptr;
}
} else {
if (state.projects.size() == 0) {
@ -646,7 +646,7 @@ print_to_log_file("%s finished", graphics_app_result_ptr->name.c_str());
graphics_app_pid = 0;
launcher_shell_pid = 0;
graphics_app_result_ptr = NULL;
current_result_name = "";
current_result = NULL;
continue;
}
}

View File

@ -41,13 +41,19 @@ bool is_task_active(RESULT* result) {
return false;
}
bool is_same_task(RESULT* taska, RESULT* taskb) {
if ((taska == NULL) || (taskb == NULL)) return false;
if (taska->name != taskb->name) return false;
if (taska->project_url != taskb->project_url) return false;
return true;
}
int count_active_graphic_apps(RESULTS& results, std::string *exclude) {
int count_active_graphic_apps(RESULTS& results, RESULT* exclude) {
unsigned int i = 0;
unsigned int graphics_app_count = 0;
// Count the number of active graphics-capable apps excluding the specified result.
// If exclude is NULL or an empty string, don't exclude any results.
// If exclude is NULL, don't exclude any results.
for (i = 0; i < results.results.size(); i++) {
if (!is_task_active(results.results[i])) continue;
BOINCTRACE(_T("get_random_graphics_app -- active task detected\n"));
@ -58,7 +64,7 @@ int count_active_graphic_apps(RESULTS& results, std::string *exclude) {
if (results.results[i]->graphics_exec_path.size() == 0) continue;
BOINCTRACE(_T("get_random_graphics_app -- active task detected w/graphics\n"));
if ((exclude != NULL) && (*exclude == results.results[i]->name)) continue;
if (is_same_task(results.results[i], exclude)) continue;
graphics_app_count++;
}
return graphics_app_count;
@ -69,13 +75,13 @@ int count_active_graphic_apps(RESULTS& results, std::string *exclude) {
// Exclude the specified result unless it is the only candidate.
// If exclude is NULL or an empty string, don't exclude any results.
//
RESULT* get_random_graphics_app(RESULTS& results, std::string *exclude) {
RESULT* get_random_graphics_app(RESULTS& results, RESULT* exclude) {
RESULT* rp = NULL;
unsigned int i = 0;
unsigned int graphics_app_count = 0;
unsigned int random_selection = 0;
unsigned int current_counter = 0;
std::string *avoid = exclude;
RESULT *avoid = exclude;
BOINCTRACE(_T("get_random_graphics_app -- Function Start\n"));
@ -83,7 +89,7 @@ RESULT* get_random_graphics_app(RESULTS& results, std::string *exclude) {
BOINCTRACE(_T("get_random_graphics_app -- graphics_app_count = '%d'\n"), graphics_app_count);
// If no graphics app found other than the one excluded, count again without excluding any
if ((0 == graphics_app_count) && (avoid != NULL) && avoid->length()) {
if ((0 == graphics_app_count) && (avoid != NULL)) {
avoid = NULL;
graphics_app_count = count_active_graphic_apps(results, avoid);
}
@ -101,7 +107,7 @@ RESULT* get_random_graphics_app(RESULTS& results, std::string *exclude) {
for (i = 0; i < results.results.size(); i++) {
if (!is_task_active(results.results[i])) continue;
if (results.results[i]->graphics_exec_path.size() == 0) continue;
if ((avoid != NULL) && (*avoid == results.results[i]->name)) continue;
if (is_same_task(results.results[i], avoid)) continue;
current_counter++;
if (current_counter == random_selection) {

View File

@ -24,12 +24,15 @@
// Determine if the result is active and executing
extern bool is_task_active(RESULT* result);
// Determine if two RESULT pointers refer to the same task
extern bool is_same_task(RESULT* taska, RESULT* taskb);
// Count the number of active graphics-capable apps
extern int count_active_graphic_apps(RESULTS& results, std::string *exclude=NULL);
extern int count_active_graphic_apps(RESULTS& results, RESULT* exclude);
// Choose a ramdom graphics application from the vector that
// was passed in.
extern RESULT* get_random_graphics_app(RESULTS& results, std::string *exclude=NULL);
extern RESULT* get_random_graphics_app(RESULTS& results, RESULT* exclude);
// Launch the screensaver
#ifdef _WIN32