aboutsummaryrefslogtreecommitdiff
path: root/profiling
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2022-03-10 23:13:01 +0000
committerJim Flynn <jim.flynn@arm.com>2022-03-12 15:14:48 +0000
commit6c9f17dc5fe58e23db0ba591302168766b38ab2a (patch)
tree50b302f1bdfcce997a2b8330a8142d6858c672d5 /profiling
parent6730fe9cbc195f054d697b25daba8516d70658e0 (diff)
downloadarmnn-6c9f17dc5fe58e23db0ba591302168766b38ab2a.tar.gz
IVGCVSW-6843 replace armnn::Logging with arm::pipe::Logging in profiling code
Change-Id: I9c3af46ca02c5685e06657b8af0e4658d71891d4 Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'profiling')
-rw-r--r--profiling/common/include/Logging.hpp17
-rw-r--r--profiling/common/src/CMakeLists.txt1
-rw-r--r--profiling/common/src/Logging.cpp204
3 files changed, 221 insertions, 1 deletions
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<Level>& Get()
{
static SimpleLogger<Level> 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 <common/include/Logging.hpp>
+#include <common/include/IgnoreUnused.hpp>
+#include <common/include/Assert.hpp>
+
+#if defined(_MSC_VER)
+#include <common/include/WindowsWrapper.hpp>
+#endif
+
+#if defined(__ANDROID__)
+#include <android/log.h>
+#endif
+
+#include <iostream>
+
+namespace arm
+{
+
+namespace pipe
+{
+
+template<>
+SimpleLogger<LogSeverity::Debug>& SimpleLogger<LogSeverity::Debug>::Get()
+{
+ static SimpleLogger<LogSeverity::Debug> logger;
+ return logger;
+}
+
+template<>
+SimpleLogger<LogSeverity::Trace>& SimpleLogger<LogSeverity::Trace>::Get()
+{
+ static SimpleLogger<LogSeverity::Trace> logger;
+ return logger;
+}
+
+template<>
+SimpleLogger<LogSeverity::Info>& SimpleLogger<LogSeverity::Info>::Get()
+{
+ static SimpleLogger<LogSeverity::Info> logger;
+ return logger;
+}
+
+template<>
+SimpleLogger<LogSeverity::Warning>& SimpleLogger<LogSeverity::Warning>::Get()
+{
+ static SimpleLogger<LogSeverity::Warning> logger;
+ return logger;
+}
+
+template<>
+SimpleLogger<LogSeverity::Error>& SimpleLogger<LogSeverity::Error>::Get()
+{
+ static SimpleLogger<LogSeverity::Error> logger;
+ return logger;
+}
+
+template<>
+SimpleLogger<LogSeverity::Fatal>& SimpleLogger<LogSeverity::Fatal>::Get()
+{
+ static SimpleLogger<LogSeverity::Fatal> logger;
+ return logger;
+}
+
+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);
+ ARM_PIPE_FALLTHROUGH;
+ case LogSeverity::Debug:
+ SimpleLogger<LogSeverity::Debug>::Get().Enable(true);
+ ARM_PIPE_FALLTHROUGH;
+ case LogSeverity::Info:
+ SimpleLogger<LogSeverity::Info>::Get().Enable(true);
+ ARM_PIPE_FALLTHROUGH;
+ case LogSeverity::Warning:
+ SimpleLogger<LogSeverity::Warning>::Get().Enable(true);
+ ARM_PIPE_FALLTHROUGH;
+ case LogSeverity::Error:
+ SimpleLogger<LogSeverity::Error>::Get().Enable(true);
+ ARM_PIPE_FALLTHROUGH;
+ case LogSeverity::Fatal:
+ SimpleLogger<LogSeverity::Fatal>::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<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);
+}
+
+void ConfigureLogging(bool printToStandardOutput, bool printToDebugOutput, LogSeverity severity)
+{
+ SetAllLoggingSinks(printToStandardOutput, printToDebugOutput, false);
+ SetLogFilter(severity);
+}
+
+} // namespace pipe
+
+} // namespace armnn