src/share/vm/runtime/task.hpp

Print this page


   1 /*
   2  * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 





  25 // A PeriodicTask has the sole purpose of executing its task
  26 // function with regular intervals.
  27 // Usage:
  28 //   PeriodicTask pf(10);
  29 //   pf.enroll();
  30 //   ...
  31 //   pf.disenroll();
  32 
  33 class PeriodicTask: public CHeapObj {
  34  public:
  35   // Useful constants.
  36   // The interval constants are used to ensure the declared interval
  37   // is appropriate;  it must be between min_interval and max_interval,
  38   // and have a granularity of interval_gran (all in millis).
  39   enum { max_tasks     = 10,       // Max number of periodic tasks in system
  40          interval_gran = 10,
  41          min_interval  = 10,
  42          max_interval  = 10000 };
  43 
  44   static int num_tasks()   { return _num_tasks; }


  96   // Called by the WatcherThread's run method.
  97   // This assumes that periodic tasks aren't entering the system
  98   // dynamically, except for during startup.
  99   static size_t time_to_wait() {
 100     if (_num_tasks == 0) {
 101       // Don't wait any more; shut down the thread since we don't
 102       // currently support dynamic enrollment.
 103       return 0;
 104     }
 105 
 106     size_t delay = _tasks[0]->time_to_next_interval();
 107     for (int index = 1; index < _num_tasks; index++) {
 108       delay = MIN2(delay, _tasks[index]->time_to_next_interval());
 109     }
 110     return delay;
 111   }
 112 
 113   // The task to perform at each period
 114   virtual void task() = 0;
 115 };


   1 /*
   2  * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_RUNTIME_TASK_HPP
  26 #define SHARE_VM_RUNTIME_TASK_HPP
  27 
  28 #include "utilities/top.hpp"
  29 
  30 // A PeriodicTask has the sole purpose of executing its task
  31 // function with regular intervals.
  32 // Usage:
  33 //   PeriodicTask pf(10);
  34 //   pf.enroll();
  35 //   ...
  36 //   pf.disenroll();
  37 
  38 class PeriodicTask: public CHeapObj {
  39  public:
  40   // Useful constants.
  41   // The interval constants are used to ensure the declared interval
  42   // is appropriate;  it must be between min_interval and max_interval,
  43   // and have a granularity of interval_gran (all in millis).
  44   enum { max_tasks     = 10,       // Max number of periodic tasks in system
  45          interval_gran = 10,
  46          min_interval  = 10,
  47          max_interval  = 10000 };
  48 
  49   static int num_tasks()   { return _num_tasks; }


 101   // Called by the WatcherThread's run method.
 102   // This assumes that periodic tasks aren't entering the system
 103   // dynamically, except for during startup.
 104   static size_t time_to_wait() {
 105     if (_num_tasks == 0) {
 106       // Don't wait any more; shut down the thread since we don't
 107       // currently support dynamic enrollment.
 108       return 0;
 109     }
 110 
 111     size_t delay = _tasks[0]->time_to_next_interval();
 112     for (int index = 1; index < _num_tasks; index++) {
 113       delay = MIN2(delay, _tasks[index]->time_to_next_interval());
 114     }
 115     return delay;
 116   }
 117 
 118   // The task to perform at each period
 119   virtual void task() = 0;
 120 };
 121 
 122 #endif // SHARE_VM_RUNTIME_TASK_HPP