| // Copyright 2023 The Fuchsia 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 "src/ui/testing/util/logging_event_loop.h" |
| |
| #include <lib/syslog/cpp/macros.h> |
| |
| #include "lib/async-loop/testing/cpp/real_loop.h" |
| |
| namespace ui_testing { |
| |
| namespace { |
| /// Returns a string describing the provided source location. |
| static std::string ToString(const cpp20::source_location& location) { |
| std::string file = location.file_name() ? location.file_name() : "<unknown>"; |
| std::string line = std::to_string(location.line()); |
| std::string func = location.function_name() ? location.function_name() : "<unknown>"; |
| return file + ":" + line + " (" + func + ")"; |
| } |
| } // namespace |
| |
| void LoggingEventLoop::RunLoop(cpp20::source_location caller) { |
| FX_LOGS(INFO) << "Running loop (from " << ToString(caller) << ")"; |
| RealLoop::RunLoop(); |
| } |
| |
| bool LoggingEventLoop::RunLoopWithTimeout(zx::duration timeout, cpp20::source_location caller) { |
| FX_LOGS(INFO) << "Running until timeout (from " << ToString(caller) << ")"; |
| return RealLoop::RunLoopWithTimeout(timeout); |
| } |
| |
| void LoggingEventLoop::RunLoopUntil(fit::function<bool()> condition, |
| cpp20::source_location caller) { |
| FX_LOGS(INFO) << "Waiting for condition from " << ToString(caller); |
| RealLoop::RunLoopUntil(std::move(condition)); |
| } |
| |
| bool LoggingEventLoop::RunLoopWithTimeoutOrUntil(fit::function<bool()> condition, |
| zx::duration timeout, zx::duration step, |
| cpp20::source_location caller) { |
| FX_LOGS(INFO) << "Waiting for condition or timeout from " << ToString(caller); |
| return RealLoop::RunLoopWithTimeoutOrUntil(std::move(condition), timeout); |
| } |
| |
| void LoggingEventLoop::RunLoopUntilIdle(cpp20::source_location caller) { |
| FX_LOGS(INFO) << "Running until idle (from " << ToString(caller) << ")"; |
| RealLoop::RunLoopUntilIdle(); |
| } |
| |
| async_dispatcher_t* LoggingEventLoop::dispatcher() { return RealLoop::dispatcher(); } |
| |
| } // namespace ui_testing |