Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • fix_Makefile.mingw#2
  • update_Makefile.mingw
  • fix_Makefile.mingw
  • fix_API_for_C_apps
  • fix_procinfo_mac
  • boinccmd_gpu_mode_always_until_sigterm
  • fgrp_osx_hotfix
  • fix_boinc_master@f8250782
  • eah_wrapper_improvements
  • diagnostics_win-hotfix
  • diagnostics_win-hotfix-old
  • current_fgrp_apps
  • testing_gw_apps
  • gw_app_darwin_15
  • current_brp_apps
  • current_brp_apps_android10
  • current_gfx_apps
  • current_server
  • current_gw_apps
  • previous_fgrp_apps
  • previous_gw_apps
  • testing_brp_apps
  • apps_FGRP3_1.07
  • apps_FGRP3_1.08
25 results

graphics2.cpp

Blame
  • 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
            );
        }
    }