ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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::ONERT_LOG_ENABLE);
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
46private:
47 bool _enabled;
48};
49
50static inline Context &ctx = Context::get();
51
52inline std::string decorated_name(const char *input)
53{
54 const int min_prefix = 16;
55 std::string prefix(input);
56 auto len_prefix = prefix.size();
57 if (len_prefix > min_prefix)
58 return "[" + prefix + "] ";
59 std::string spaces((min_prefix - len_prefix) / 2, ' ');
60 return (len_prefix % 2 ? "[ " : "[") + spaces + prefix + spaces + "] ";
61}
62
63} // namespace onert::util::logging
64
65#define VERBOSE(name) \
66 if (::onert::util::logging::ctx.enabled()) \
67 std::cout << ::onert::util::logging::decorated_name(#name)
68
69#define VERBOSE_F() \
70 if (::onert::util::logging::ctx.enabled()) \
71 std::cout << ::onert::util::logging::decorated_name(__func__)
72
73#define WHEN_LOG_ENABLED(METHOD) \
74 if (::onert::util::logging::ctx.enabled()) \
75 do \
76 { \
77 METHOD; \
78 } while (0)
79
80#define MEASURE_TIME_START(name) \
81 do \
82 { \
83 auto beg_##name = std::chrono::steady_clock::now()
84
85#define MEASURE_TIME_END(name) \
86 auto end_##name = std::chrono::steady_clock::now(); \
87 auto dur_##name = \
88 std::chrono::duration_cast<std::chrono::microseconds>(end_##name - beg_##name); \
89 if (::onert::util::logging::ctx.enabled()) \
90 std::cout << ::onert::util::logging::decorated_name(__func__) << #name \
91 << " time = " << dur_##name.count() << std::endl; \
92 } \
93 while (0)
94
95#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:52
bool getConfigBool(const std::string &key)