87 struct WorkerThreadState;
93 void processNextWorkerRequest(WorkerThreadState* state, PerThreadStorage&
perThreadStorage);
105 void runPageRequestProducerLoop();
108 void addNewCursors();
111 void runWorkerThreadLoop(WorkerThreadState* state);
114 void notifyAllThreads();
117 void launchWorkerThreads();
120 int getCurrentNumberOfPageRequestsInQueues();
123 void wakeupProducerIfWaitingForQueue();
129 void stopProcessingOnAllThreads();
132 void moveRequestsFromGUIQueuesToOtherQueues();
138 void startCreatingWorkSingleThreaded();
144 bool _producerWorking;
146 int _workerThreadsWorking;
149 int _maxPageRequestsInQueues;
152 bool _producerWaitingForQueue;
155 bool _processingAllowed;
157 bool _useMultiThreading;
158 bool _processingWasSingleThreaded;
159 bool _allowLateMultiThreadingStart;
174 std::vector<PageRequestCursor*> _newCursors;
177 std::deque<PageRequest*> _parallelWorkQueue;
178 std::deque<PageRequest*> _ioWorkQueue;
181 struct WorkerThreadState
184 ~WorkerThreadState();
187 boost::thread* _thread;
199 std::deque<PageRequest*>* _queue;
209 std::size_t _numDesiredWorkerThreads;
212 std::vector<WorkerThreadState*> _workerThreads;
215 WorkerThreadState* _ioThread;
218 boost::thread* _producerThread;
221 ProcessingTimeLine::TimeLine* _producerThreadTimeLine;
224 struct ProfilingInfo {
238 std::map<PagedImage*, ProfilingInfo> _profilingData;
241 void addThreadTimesToMLProfiling();