From 6c9f17dc5fe58e23db0ba591302168766b38ab2a Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Thu, 10 Mar 2022 23:13:01 +0000 Subject: IVGCVSW-6843 replace armnn::Logging with arm::pipe::Logging in profiling code Change-Id: I9c3af46ca02c5685e06657b8af0e4658d71891d4 Signed-off-by: Jim Flynn --- profiling/common/include/Logging.hpp | 17 ++- profiling/common/src/CMakeLists.txt | 1 + profiling/common/src/Logging.cpp | 204 +++++++++++++++++++++++++++++++++++ 3 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 profiling/common/src/Logging.cpp (limited to 'profiling/common') diff --git a/profiling/common/include/Logging.hpp b/profiling/common/include/Logging.hpp index a31c2aaa7b..7a265d552d 100644 --- a/profiling/common/include/Logging.hpp +++ b/profiling/common/include/Logging.hpp @@ -16,6 +16,14 @@ namespace arm namespace pipe { +#if defined(__clang__) &&((__clang_major__>=3)||(__clang_major__==3 && __clang_minor__ >= 5)) +# define ARM_PIPE_FALLTHROUGH [[clang::fallthrough]] +#elif defined(__GNUC__) && (__GNUC__ >= 7) +# define ARM_PIPE_FALLTHROUGH __attribute__((fallthrough)) +#else +# define ARM_PIPE_FALLTHROUGH ((void)0) +#endif + enum class LogSeverity { Trace, @@ -47,6 +55,13 @@ inline std::string LevelToString(LogSeverity level) } } +/// Configures the logging behaviour of the ARMNN library. +/// printToStandardOutput: Set to true if log messages should be printed to the standard output. +/// printToDebugOutput: Set to true if log messages be printed to a platform-specific debug output +/// (where supported). +/// severity: All log messages that are at this severity level or higher will be printed, others will be ignored. +void ConfigureLogging(bool printToStandardOutput, bool printToDebugOutput, LogSeverity severity); + class LogSink { public: @@ -124,7 +139,7 @@ public: { } - static SimpleLogger& Get() + static SimpleLogger& Get() { static SimpleLogger logger; return logger; diff --git a/profiling/common/src/CMakeLists.txt b/profiling/common/src/CMakeLists.txt index b4dc59f53d..1b47b6cf73 100644 --- a/profiling/common/src/CMakeLists.txt +++ b/profiling/common/src/CMakeLists.txt @@ -10,6 +10,7 @@ if(BUILD_TIMELINE_DECODER) CommandHandlerKey.cpp CommandHandlerRegistry.cpp CommonProfilingUtils.cpp + Logging.cpp NetworkSockets.cpp PacketVersionResolver.cpp SwTrace.cpp diff --git a/profiling/common/src/Logging.cpp b/profiling/common/src/Logging.cpp new file mode 100644 index 0000000000..72f6aec40f --- /dev/null +++ b/profiling/common/src/Logging.cpp @@ -0,0 +1,204 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include +#include + +#if defined(_MSC_VER) +#include +#endif + +#if defined(__ANDROID__) +#include +#endif + +#include + +namespace arm +{ + +namespace pipe +{ + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +template<> +SimpleLogger& SimpleLogger::Get() +{ + static SimpleLogger logger; + return logger; +} + +void SetLogFilter(LogSeverity level) +{ + SimpleLogger::Get().Enable(false); + SimpleLogger::Get().Enable(false); + SimpleLogger::Get().Enable(false); + SimpleLogger::Get().Enable(false); + SimpleLogger::Get().Enable(false); + SimpleLogger::Get().Enable(false); + switch (level) + { + case LogSeverity::Trace: + SimpleLogger::Get().Enable(true); + ARM_PIPE_FALLTHROUGH; + case LogSeverity::Debug: + SimpleLogger::Get().Enable(true); + ARM_PIPE_FALLTHROUGH; + case LogSeverity::Info: + SimpleLogger::Get().Enable(true); + ARM_PIPE_FALLTHROUGH; + case LogSeverity::Warning: + SimpleLogger::Get().Enable(true); + ARM_PIPE_FALLTHROUGH; + case LogSeverity::Error: + SimpleLogger::Get().Enable(true); + ARM_PIPE_FALLTHROUGH; + case LogSeverity::Fatal: + SimpleLogger::Get().Enable(true); + break; + default: + ARM_PIPE_ASSERT(false); + } +} + +class StandardOutputColourSink : public LogSink +{ +public: + StandardOutputColourSink(LogSeverity level = LogSeverity::Info) + : m_Level(level) + { + } + + void Consume(const std::string& s) override + { + std::cout << GetColour(m_Level) << s << ResetColour() << std::endl; + } + +private: + std::string ResetColour() + { + return "\033[0m"; + } + + std::string GetColour(LogSeverity level) + { + switch(level) + { + case LogSeverity::Trace: + return "\033[35m"; + case LogSeverity::Debug: + return "\033[32m"; + case LogSeverity::Info: + return "\033[0m"; + case LogSeverity::Warning: + return "\033[33m"; + case LogSeverity::Error: + return "\033[31m"; + case LogSeverity::Fatal: + return "\033[41;30m"; + + default: + return "\033[0m"; + } + } + LogSeverity m_Level; +}; + +class DebugOutputSink : public LogSink +{ +public: + void Consume(const std::string& s) override + { + IgnoreUnused(s); +#if defined(_MSC_VER) + OutputDebugString(s.c_str()); + OutputDebugString("\n"); +#elif defined(__ANDROID__) + __android_log_write(ANDROID_LOG_DEBUG, "armnn", s.c_str()); +#else + IgnoreUnused(s); +#endif + } +}; + +template +inline void SetLoggingSinks(bool standardOut, bool debugOut, bool coloured) +{ + SimpleLogger::Get().RemoveAllSinks(); + + if (standardOut) + { + if (coloured) + { + SimpleLogger::Get().AddSink( + std::make_shared(Level)); + } else + { + SimpleLogger::Get().AddSink( + std::make_shared()); + } + } + + if (debugOut) + { + SimpleLogger::Get().AddSink( + std::make_shared()); + } +} + +void SetAllLoggingSinks(bool standardOut, bool debugOut, bool coloured) +{ + SetLoggingSinks(standardOut, debugOut, coloured); + SetLoggingSinks(standardOut, debugOut, coloured); + SetLoggingSinks(standardOut, debugOut, coloured); + SetLoggingSinks(standardOut, debugOut, coloured); + SetLoggingSinks(standardOut, debugOut, coloured); + SetLoggingSinks(standardOut, debugOut, coloured); +} + +void ConfigureLogging(bool printToStandardOutput, bool printToDebugOutput, LogSeverity severity) +{ + SetAllLoggingSinks(printToStandardOutput, printToDebugOutput, false); + SetLogFilter(severity); +} + +} // namespace pipe + +} // namespace armnn -- cgit v1.2.1