Home | History | Annotate | Download | only in message_loops
      1 // Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <brillo/message_loops/message_loop_utils.h>
      6 
      7 #include <base/location.h>
      8 #include <brillo/bind_lambda.h>
      9 
     10 namespace brillo {
     11 
     12 void MessageLoopRunUntil(
     13     MessageLoop* loop,
     14     base::TimeDelta timeout,
     15     base::Callback<bool()> terminate) {
     16   bool timeout_called = false;
     17   MessageLoop::TaskId task_id = loop->PostDelayedTask(
     18       FROM_HERE,
     19       base::Bind([&timeout_called]() { timeout_called = true; }),
     20       timeout);
     21   while (!timeout_called && (terminate.is_null() || !terminate.Run()))
     22     loop->RunOnce(true);
     23 
     24   if (!timeout_called)
     25     loop->CancelTask(task_id);
     26 }
     27 
     28 int MessageLoopRunMaxIterations(MessageLoop* loop, int iterations) {
     29   int result;
     30   for (result = 0; result < iterations && loop->RunOnce(false); result++) {}
     31   return result;
     32 }
     33 
     34 }  // namespace brillo
     35