Skip to content
Snippets Groups Projects
Select Git revision
  • e5655fd38c8191a9a14b35949b8c3f8173697f35
  • trunk
  • RELEASE_6_5_DRIVEDB
  • RELEASE_6_6_DRIVEDB
  • RELEASE_7_0_DRIVEDB
  • RELEASE_7_2_DRIVEDB
  • RELEASE_7_3_DRIVEDB
  • RELEASE_6_0_DRIVEDB
  • RELEASE_6_1_DRIVEDB
  • RELEASE_6_2_DRIVEDB
  • RELEASE_6_3_DRIVEDB
  • RELEASE_6_4_DRIVEDB
  • tags/RELEASE_7_4
  • tags/RELEASE_7_3
  • RELEASE_5_41_DRIVEDB
  • RELEASE_5_42_DRIVEDB
  • RELEASE_5_43_DRIVEDB
  • tags/RELEASE_7_2
  • tags/RELEASE_7_1
  • tags/RELEASE_7_0
  • RELEASE_5_40_DRIVEDB
21 results

TODO

Blame
    • ballen4705's avatar
      e7e94309
      modified length of device name string in smartd internal structure · e7e94309
      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
      e7e94309
      History
      modified length of device name string in smartd internal structure
      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
    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
            );
        }
    }