blob: 1bf1d28ea112a1771a05624f857bca2c38dcddfa [file] [log] [blame]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef QUICHE_QUIC_TOOLS_QUIC_EVENT_LOOP_TOOLS_H_
#define QUICHE_QUIC_TOOLS_QUIC_EVENT_LOOP_TOOLS_H_
#include "absl/base/attributes.h"
#include "quiche/quic/core/io/quic_event_loop.h"
#include "quiche/quic/core/quic_clock.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/common/quiche_callbacks.h"
namespace quic {
inline constexpr QuicTimeDelta kDefaultTimeoutForTools =
QuicTimeDelta::FromSeconds(3);
inline constexpr QuicTimeDelta kDefaultEventLoopTimeoutForTools =
QuicTimeDelta::FromMilliseconds(50);
// Runs the event loop until the specified callback returns true, or until the
// timeout occurs. Returns true if callback returned true at least once.
ABSL_MUST_USE_RESULT inline bool ProcessEventsUntil(
QuicEventLoop* event_loop, quiche::UnretainedCallback<bool()> callback,
QuicTimeDelta timeout = kDefaultTimeoutForTools) {
const QuicClock* clock = event_loop->GetClock();
QuicTime start = clock->Now();
while (!callback()) {
event_loop->RunEventLoopOnce(kDefaultEventLoopTimeoutForTools);
QuicTimeDelta elapsed = clock->Now() - start;
if (elapsed >= timeout) {
return false;
}
}
return true;
}
} // namespace quic
#endif // QUICHE_QUIC_TOOLS_QUIC_EVENT_LOOP_TOOLS_H_