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