00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00021
00022 #ifndef NET_INSTAWEB_UTIL_PUBLIC_WORKER_H_
00023 #define NET_INSTAWEB_UTIL_PUBLIC_WORKER_H_
00024
00025 #include "base/scoped_ptr.h"
00026 #include "net/instaweb/util/public/basictypes.h"
00027
00028 namespace net_instaweb {
00029
00030 class Function;
00031 class ThreadSystem;
00032 class Waveform;
00033
00041 class Worker {
00042 public:
00044 void Start();
00045
00048 bool IsBusy();
00049
00053 void ShutDown();
00054
00058 void set_queue_size_stat(Waveform* x) { queue_size_ = x; }
00059
00060 protected:
00061 explicit Worker(ThreadSystem* runtime);
00062 virtual ~Worker();
00063
00069 bool QueueIfPermitted(Function* closure);
00070
00073 virtual bool IsPermitted(Function* closure) = 0;
00074
00080 int NumJobs();
00081
00082 private:
00083 class WorkThread;
00084 friend class WorkThread;
00085
00087 void UpdateQueueSizeStat(int size);
00088
00089 scoped_ptr<WorkThread> thread_;
00090 Waveform* queue_size_;
00091
00092 DISALLOW_COPY_AND_ASSIGN(Worker);
00093 };
00094
00095 }
00096
00097 #endif ///< NET_INSTAWEB_UTIL_PUBLIC_WORKER_H_