// Copyright 2019 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. #include "platform/impl/text_trace_logging_platform.h" #include #include #include "util/chrono_helpers.h" #include "util/osp_logging.h" namespace openscreen { bool TextTraceLoggingPlatform::IsTraceLoggingEnabled( TraceCategory::Value category) { constexpr uint64_t kAllLogCategoriesMask = std::numeric_limits::max(); return (kAllLogCategoriesMask & category) != 0; } TextTraceLoggingPlatform::TextTraceLoggingPlatform() { StartTracing(this); } TextTraceLoggingPlatform::~TextTraceLoggingPlatform() { StopTracing(); } void TextTraceLoggingPlatform::LogTrace(const char* name, const uint32_t line, const char* file, Clock::time_point start_time, Clock::time_point end_time, TraceIdHierarchy ids, Error::Code error) { auto total_runtime = to_microseconds(end_time - start_time).count(); constexpr auto microseconds_symbol = "\u03BCs"; // Greek Mu + 's' std::stringstream ss; ss << "TRACE [" << std::hex << ids.root << ":" << ids.parent << ":" << ids.current << "] (" << std::dec << total_runtime << microseconds_symbol << ") " << name << "<" << file << ":" << line << "> " << error; OSP_LOG_INFO << ss.str(); } void TextTraceLoggingPlatform::LogAsyncStart(const char* name, const uint32_t line, const char* file, Clock::time_point timestamp, TraceIdHierarchy ids) { std::stringstream ss; ss << "ASYNC TRACE START [" << std::hex << ids.root << ":" << ids.parent << ":" << ids.current << std::dec << "] (" << timestamp << ") " << name << "<" << file << ":" << line << ">"; OSP_LOG_INFO << ss.str(); } void TextTraceLoggingPlatform::LogAsyncEnd(const uint32_t line, const char* file, Clock::time_point timestamp, TraceId trace_id, Error::Code error) { OSP_LOG_INFO << "ASYNC TRACE END [" << std::hex << trace_id << std::dec << "] (" << timestamp << ") " << error; } } // namespace openscreen