diff options
author | Matthew Bentham <Matthew.Bentham@arm.com> | 2020-01-15 17:21:38 +0000 |
---|---|---|
committer | Matthew Bentham <Matthew.Bentham@arm.com> | 2020-01-16 09:19:56 +0000 |
commit | d3a07830771ac6ea0ce3a4d12bfb473cd9a5565d (patch) | |
tree | 03eefc27c29d76293bbf18ace2d1b94da3ec4239 /src | |
parent | c3da2680f605e705c95811c7ba93770e200e5dc0 (diff) | |
download | armnn-d3a07830771ac6ea0ce3a4d12bfb473cd9a5565d.tar.gz |
Remove use of boost from Logging.hpp
This helps prevent leaking of boost names into Arm NN public headers.
Change-Id: I1605d2ed178965f8e502bc6a4b4ac3e627bbbbed
Signed-off-by: Matthew Bentham <Matthew.Bentham@arm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/armnn/Logging.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/armnn/Logging.cpp b/src/armnn/Logging.cpp new file mode 100644 index 0000000000..2c07751aae --- /dev/null +++ b/src/armnn/Logging.cpp @@ -0,0 +1,158 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#include <armnn/Logging.hpp> + + +#include <armnn/Utils.hpp> + +#if defined(_MSC_VER) +#ifndef NOMINMAX +#define NOMINMAX // Prevent definition of min/max macros that interfere with std::min/max +#endif +#include <Windows.h> +#undef TIME_MS // Windows.h defines this but we don't need it and it interferes with our definition in Instrument.hpp +#endif + +#if defined(__ANDROID__) +#include <android/log.h> +#endif + +#include <boost/assert.hpp> +#include <boost/core/ignore_unused.hpp> +#include <iostream> + +namespace armnn +{ + +void SetLogFilter(LogSeverity level) +{ + SimpleLogger<LogSeverity::Trace>::Get().Enable(false); + SimpleLogger<LogSeverity::Debug>::Get().Enable(false); + SimpleLogger<LogSeverity::Info>::Get().Enable(false); + SimpleLogger<LogSeverity::Warning>::Get().Enable(false); + SimpleLogger<LogSeverity::Error>::Get().Enable(false); + SimpleLogger<LogSeverity::Fatal>::Get().Enable(false); + switch (level) + { + case LogSeverity::Trace: + SimpleLogger<LogSeverity::Trace>::Get().Enable(true); + ARMNN_FALLTHROUGH; + case LogSeverity::Debug: + SimpleLogger<LogSeverity::Debug>::Get().Enable(true); + ARMNN_FALLTHROUGH; + case LogSeverity::Info: + SimpleLogger<LogSeverity::Info>::Get().Enable(true); + ARMNN_FALLTHROUGH; + case LogSeverity::Warning: + SimpleLogger<LogSeverity::Warning>::Get().Enable(true); + ARMNN_FALLTHROUGH; + case LogSeverity::Error: + SimpleLogger<LogSeverity::Error>::Get().Enable(true); + ARMNN_FALLTHROUGH; + case LogSeverity::Fatal: + SimpleLogger<LogSeverity::Fatal>::Get().Enable(true); + break; + default: + BOOST_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 + { + boost::ignore_unused(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 + boost::ignore_unused(s); +#endif + } +}; + +template<LogSeverity Level> +inline void SetLoggingSinks(bool standardOut, bool debugOut, bool coloured) +{ + SimpleLogger<Level>::Get().RemoveAllSinks(); + + if (standardOut) + { + if (coloured) + { + SimpleLogger<Level>::Get().AddSink( + std::make_shared<StandardOutputColourSink>(Level)); + } else + { + SimpleLogger<Level>::Get().AddSink( + std::make_shared<StandardOutputSink>()); + } + } + + if (debugOut) + { + SimpleLogger<Level>::Get().AddSink( + std::make_shared<DebugOutputSink>()); + } +} + +void SetAllLoggingSinks(bool standardOut, bool debugOut, bool coloured) +{ + SetLoggingSinks<LogSeverity::Trace>(standardOut, debugOut, coloured); + SetLoggingSinks<LogSeverity::Debug>(standardOut, debugOut, coloured); + SetLoggingSinks<LogSeverity::Info>(standardOut, debugOut, coloured); + SetLoggingSinks<LogSeverity::Warning>(standardOut, debugOut, coloured); + SetLoggingSinks<LogSeverity::Error>(standardOut, debugOut, coloured); + SetLoggingSinks<LogSeverity::Fatal>(standardOut, debugOut, coloured); +} + + +} //namespace armnn |