Lines Matching refs:queue

194   WorkQueue queue(kThreadCount);  // Start the threads.
201 base::AutoLock auto_lock(*queue.lock());
202 while (!queue.EveryIdWasAllocated())
203 queue.all_threads_have_ids()->Wait();
208 queue.SpinUntilAllThreadsAreWaiting();
212 base::AutoLock auto_lock(*queue.lock());
213 EXPECT_EQ(0, queue.GetNumThreadsTakingAssignments());
214 EXPECT_EQ(0, queue.GetNumThreadsCompletingTasks());
215 EXPECT_EQ(0, queue.task_count());
216 EXPECT_EQ(0, queue.GetMaxCompletionsByWorkerThread());
217 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
218 EXPECT_EQ(0, queue.GetNumberOfCompletedTasks());
221 queue.ResetHistory();
222 queue.SetTaskCount(kTaskCount);
223 queue.SetWorkTime(kThirtyMs);
224 queue.SetAllowHelp(false);
229 queue.work_is_available()->Signal(); // Start up one thread.
231 queue.SpinUntilTaskCountLessThan(kTaskCount);
235 base::AutoLock auto_lock(*queue.lock());
236 while (queue.task_count())
237 queue.no_more_tasks()->Wait();
240 EXPECT_LE(queue.GetWorkTime().InMilliseconds() * (kTaskCount - 1),
243 EXPECT_EQ(1, queue.GetNumThreadsTakingAssignments());
244 EXPECT_EQ(1, queue.GetNumThreadsCompletingTasks());
245 EXPECT_LE(kTaskCount - 1, queue.GetMaxCompletionsByWorkerThread());
246 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
247 EXPECT_LE(kTaskCount - 1, queue.GetNumberOfCompletedTasks());
251 queue.SpinUntilAllThreadsAreWaiting();
255 base::AutoLock auto_lock(*queue.lock());
256 EXPECT_EQ(1, queue.GetNumThreadsTakingAssignments());
257 EXPECT_EQ(1, queue.GetNumThreadsCompletingTasks());
258 EXPECT_EQ(0, queue.task_count());
259 EXPECT_EQ(kTaskCount, queue.GetMaxCompletionsByWorkerThread());
260 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
261 EXPECT_EQ(kTaskCount, queue.GetNumberOfCompletedTasks());
265 queue.ResetHistory();
266 queue.SetTaskCount(kTaskCount);
267 queue.SetWorkTime(kThirtyMs);
268 queue.SetAllowHelp(true);
273 queue.work_is_available()->Signal(); // But each worker can signal another.
275 queue.SpinUntilTaskCountLessThan(kTaskCount);
277 queue.SpinUntilAllThreadsAreWaiting();
281 base::AutoLock auto_lock(*queue.lock());
282 while (queue.task_count())
283 queue.no_more_tasks()->Wait();
288 EXPECT_LE(2, queue.GetNumThreadsTakingAssignments());
289 EXPECT_EQ(kTaskCount, queue.GetNumberOfCompletedTasks());
292 queue.ResetHistory();
293 queue.SetTaskCount(3);
294 queue.SetWorkTime(kThirtyMs);
295 queue.SetAllowHelp(false);
297 queue.work_is_available()->Broadcast(); // Make them all try.
299 queue.SpinUntilTaskCountLessThan(3);
301 queue.SpinUntilAllThreadsAreWaiting();
304 base::AutoLock auto_lock(*queue.lock());
305 EXPECT_EQ(3, queue.GetNumThreadsTakingAssignments());
306 EXPECT_EQ(3, queue.GetNumThreadsCompletingTasks());
307 EXPECT_EQ(0, queue.task_count());
308 EXPECT_EQ(1, queue.GetMaxCompletionsByWorkerThread());
309 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
310 EXPECT_EQ(3, queue.GetNumberOfCompletedTasks());
313 queue.ResetHistory();
314 queue.SetTaskCount(3);
315 queue.SetWorkTime(kThirtyMs);
316 queue.SetAllowHelp(true); // Allow (unnecessary) help requests.
318 queue.work_is_available()->Broadcast(); // Signal all threads.
320 queue.SpinUntilTaskCountLessThan(3);
322 queue.SpinUntilAllThreadsAreWaiting();
325 base::AutoLock auto_lock(*queue.lock());
326 EXPECT_EQ(3, queue.GetNumThreadsTakingAssignments());
327 EXPECT_EQ(3, queue.GetNumThreadsCompletingTasks());
328 EXPECT_EQ(0, queue.task_count());
329 EXPECT_EQ(1, queue.GetMaxCompletionsByWorkerThread());
330 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
331 EXPECT_EQ(3, queue.GetNumberOfCompletedTasks());
334 queue.ResetHistory();
335 queue.SetTaskCount(20); // 2 tasks per thread.
336 queue.SetWorkTime(kThirtyMs);
337 queue.SetAllowHelp(true);
339 queue.work_is_available()->Signal(); // But each worker can signal another.
341 queue.SpinUntilTaskCountLessThan(20);
343 queue.SpinUntilAllThreadsAreWaiting(); // Should take about 60 ms.
346 base::AutoLock auto_lock(*queue.lock());
347 EXPECT_EQ(10, queue.GetNumThreadsTakingAssignments());
348 EXPECT_EQ(10, queue.GetNumThreadsCompletingTasks());
349 EXPECT_EQ(0, queue.task_count());
350 EXPECT_EQ(20, queue.GetNumberOfCompletedTasks());
353 queue.ResetHistory();
354 queue.SetTaskCount(20); // 2 tasks per thread.
355 queue.SetWorkTime(kThirtyMs);
356 queue.SetAllowHelp(true);
358 queue.work_is_available()->Broadcast();
360 queue.SpinUntilTaskCountLessThan(20);
362 queue.SpinUntilAllThreadsAreWaiting(); // Should take about 60 ms.
365 base::AutoLock auto_lock(*queue.lock());
366 EXPECT_EQ(10, queue.GetNumThreadsTakingAssignments());
367 EXPECT_EQ(10, queue.GetNumThreadsCompletingTasks());
368 EXPECT_EQ(0, queue.task_count());
369 EXPECT_EQ(20, queue.GetNumberOfCompletedTasks());
371 queue.SetShutdown();
373 queue.work_is_available()->Broadcast(); // Force check for shutdown.
376 queue.ThreadSafeCheckShutdown(kThreadCount));
381 WorkQueue queue(kThreadCount); // Start the threads.
388 base::AutoLock auto_lock(*queue.lock());
389 while (!queue.EveryIdWasAllocated())
390 queue.all_threads_have_ids()->Wait();
394 queue.SpinUntilAllThreadsAreWaiting();
398 base::AutoLock auto_lock(*queue.lock());
399 EXPECT_EQ(0, queue.GetNumThreadsTakingAssignments());
400 EXPECT_EQ(0, queue.GetNumThreadsCompletingTasks());
401 EXPECT_EQ(0, queue.task_count());
402 EXPECT_EQ(0, queue.GetMaxCompletionsByWorkerThread());
403 EXPECT_EQ(0, queue.GetMinCompletionsByWorkerThread());
404 EXPECT_EQ(0, queue.GetNumberOfCompletedTasks());
407 queue.ResetHistory();
408 queue.SetTaskCount(20 * kThreadCount);
409 queue.SetWorkTime(kFortyFiveMs);
410 queue.SetAllowHelp(false);
412 queue.work_is_available()->Broadcast(); // Start up all threads.
415 base::AutoLock auto_lock(*queue.lock());
416 while (queue.task_count() != 0)
417 queue.no_more_tasks()->Wait();
421 queue.SpinUntilAllThreadsAreWaiting();
426 base::AutoLock auto_lock(*queue.lock());
427 EXPECT_EQ(kThreadCount, queue.GetNumThreadsTakingAssignments());
428 EXPECT_EQ(kThreadCount, queue.GetNumThreadsCompletingTasks());
429 EXPECT_EQ(0, queue.task_count());
430 EXPECT_LE(20, queue.GetMaxCompletionsByWorkerThread());
431 EXPECT_EQ(20 * kThreadCount, queue.GetNumberOfCompletedTasks());
434 queue.ResetHistory();
435 queue.SetTaskCount(kThreadCount * 4);
436 queue.SetWorkTime(kFortyFiveMs);
437 queue.SetAllowHelp(true); // Might outperform Broadcast().
439 queue.work_is_available()->Signal(); // Start up one thread.
443 base::AutoLock auto_lock(*queue.lock());
444 while (queue.task_count() != 0)
445 queue.no_more_tasks()->Wait();
449 queue.SpinUntilAllThreadsAreWaiting();
454 base::AutoLock auto_lock(*queue.lock());
455 EXPECT_EQ(kThreadCount, queue.GetNumThreadsTakingAssignments());
456 EXPECT_EQ(kThreadCount, queue.GetNumThreadsCompletingTasks());
457 EXPECT_EQ(0, queue.task_count());
458 EXPECT_LE(4, queue.GetMaxCompletionsByWorkerThread());
459 EXPECT_EQ(4 * kThreadCount, queue.GetNumberOfCompletedTasks());
461 queue.SetShutdown();
463 queue.work_is_available()->Broadcast(); // Force check for shutdown.
467 queue.ThreadSafeCheckShutdown(kThreadCount));
723 // Get our task duration from the queue.