diff options
Diffstat (limited to 'src/profiling/test/ProfilingTestUtils.hpp')
-rw-r--r-- | src/profiling/test/ProfilingTestUtils.hpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/profiling/test/ProfilingTestUtils.hpp b/src/profiling/test/ProfilingTestUtils.hpp index 323a762918..32db72a19d 100644 --- a/src/profiling/test/ProfilingTestUtils.hpp +++ b/src/profiling/test/ProfilingTestUtils.hpp @@ -89,6 +89,46 @@ public: } }; +struct LogLevelSwapper +{ +public: + LogLevelSwapper(arm::pipe::LogSeverity severity) + { + // Set the new log level + arm::pipe::ConfigureLogging(true, true, severity); + } + ~LogLevelSwapper() + { + // The default log level for unit tests is "Fatal" + arm::pipe::ConfigureLogging(true, true, arm::pipe::LogSeverity::Fatal); + } +}; + +struct StreamRedirector +{ +public: + StreamRedirector(std::ostream& stream, std::streambuf* newStreamBuffer) + : m_Stream(stream) + , m_BackupBuffer(m_Stream.rdbuf(newStreamBuffer)) + {} + + ~StreamRedirector() { CancelRedirect(); } + + void CancelRedirect() + { + // Only cancel the redirect once. + if (m_BackupBuffer != nullptr ) + { + m_Stream.rdbuf(m_BackupBuffer); + m_BackupBuffer = nullptr; + } + } + +private: + std::ostream& m_Stream; + std::streambuf* m_BackupBuffer; +}; + } // namespace pipe } // namespace arm |