ONE - On-device Neural Engine
Loading...
Searching...
No Matches
logging.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __ONERT_UTIL_LOGGING_H__
18#define __ONERT_UTIL_LOGGING_H__
19
20#include <iostream>
21#include <cstring>
22
23#include "util/ConfigSource.h"
24
26{
27
29{
30public:
31 Context() noexcept : _enabled{false}
32 {
33 const auto env = util::getConfigBool(util::config::ENABLE_LOG);
34
35 if (env)
36 {
37 _enabled = true;
38 }
39 }
40
41 static Context &get() noexcept;
42
43public:
44 bool enabled(void) const { return _enabled; }
45 void update(void) { _enabled = util::getConfigBool(util::config::ENABLE_LOG); }
46
47private:
48 bool _enabled;
49};
50
51static inline Context &ctx = Context::get();
52
53inline std::string decorated_name(const char *input)
54{
55 const int min_prefix = 16;
56 std::string prefix(input);
57 auto len_prefix = prefix.size();
58 if (len_prefix > min_prefix)
59 return "[" + prefix + "] ";
60 std::string spaces((min_prefix - len_prefix) / 2, ' ');
61 return (len_prefix % 2 ? "[ " : "[") + spaces + prefix + spaces + "] ";
62}
63
64} // namespace onert::util::logging
65
66#define VERBOSE(name) \
67 if (::onert::util::logging::ctx.enabled()) \
68 std::cout << ::onert::util::logging::decorated_name(#name)
69
70#define VERBOSE_F() \
71 if (::onert::util::logging::ctx.enabled()) \
72 std::cout << ::onert::util::logging::decorated_name(__func__)
73
74#define WHEN_LOG_ENABLED(METHOD) \
75 if (::onert::util::logging::ctx.enabled()) \
76 do \
77 { \
78 METHOD; \
79 } while (0)
80
81#define UPDATE_VERBOSE_CONFIG() ::onert::util::logging::ctx.update()
82
83#define MEASURE_TIME_START(name) \
84 do \
85 { \
86 auto beg_##name = std::chrono::steady_clock::now()
87
88#define MEASURE_TIME_END(name) \
89 auto end_##name = std::chrono::steady_clock::now(); \
90 auto dur_##name = \
91 std::chrono::duration_cast<std::chrono::microseconds>(end_##name - beg_##name); \
92 if (::onert::util::logging::ctx.enabled()) \
93 std::cout << ::onert::util::logging::decorated_name(__func__) << #name \
94 << " time = " << dur_##name.count() << std::endl; \
95 } \
96 while (0)
97
98#endif // __ONERT_UTIL_LOGGING_H__
static Context & get() noexcept
Definition logging.cc:19
bool enabled(void) const
Definition logging.h:44
std::string decorated_name(const char *input)
Definition logging.h:53
bool getConfigBool(const std::string &key)