| // Copyright 2013 The Flutter 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 FLUTTER_FML_PLATFORM_FUCHSIA_LOG_STATE_H_ |
| #define FLUTTER_FML_PLATFORM_FUCHSIA_LOG_STATE_H_ |
| |
| #include <fidl/fuchsia.logger/cpp/fidl.h> |
| #include <lib/fidl/cpp/wire/internal/transport_channel.h> |
| #include <lib/zx/socket.h> |
| |
| #include <atomic> |
| #include <initializer_list> |
| #include <memory> |
| #include <mutex> |
| #include <string> |
| #include <vector> |
| |
| namespace fml { |
| |
| // Class for holding the global connection to the Fuchsia LogSink service. |
| class LogState { |
| public: |
| // Connects to the Fuchsia LogSink service. |
| LogState(); |
| |
| // Get the socket for sending log messages. |
| const zx::socket& socket() const { return socket_; } |
| |
| // Get the current list of tags. |
| std::shared_ptr<const std::vector<std::string>> tags() const { |
| return std::atomic_load(&tags_); |
| } |
| |
| // Take ownership of the log sink channel (e.g. for LogInterestListener). |
| // This is thread-safe. |
| fidl::ClientEnd<::fuchsia_logger::LogSink> TakeClientEnd(); |
| |
| // Updates the default tags. |
| // This is thread-safe. |
| void SetTags(const std::initializer_list<std::string>& tags); |
| |
| // Get the default instance of LogState. |
| static LogState& Default(); |
| |
| private: |
| std::mutex mutex_; |
| fidl::ClientEnd<::fuchsia_logger::LogSink> client_end_; |
| zx::socket socket_; |
| std::shared_ptr<const std::vector<std::string>> tags_; |
| }; |
| |
| } // namespace fml |
| |
| #endif // FLUTTER_FML_PLATFORM_FUCHSIA_LOG_STATE_H_ |