// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <brillo/message_loops/message_loop_utils.h>

#include <base/location.h>
#include <brillo/bind_lambda.h>

namespace brillo {

void MessageLoopRunUntil(
    MessageLoop* loop,
    base::TimeDelta timeout,
    base::Callback<bool()> terminate) {
  bool timeout_called = false;
  MessageLoop::TaskId task_id = loop->PostDelayedTask(
      FROM_HERE,
      base::Bind([](bool* timeout_called) { *timeout_called = true; },
                 base::Unretained(&timeout_called)),
      timeout);
  while (!timeout_called && (terminate.is_null() || !terminate.Run()))
    loop->RunOnce(true);

  if (!timeout_called)
    loop->CancelTask(task_id);
}

int MessageLoopRunMaxIterations(MessageLoop* loop, int iterations) {
  int result;
  for (result = 0; result < iterations && loop->RunOnce(false); result++) {}
  return result;
}

}  // namespace brillo
