• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef IMAGE_CODEC_LOG_H
17 #define IMAGE_CODEC_LOG_H
18 
19 #include <cinttypes>
20 #include <chrono>
21 #include "log_tags.h"
22 #include "hilog/log.h"
23 #include "hitrace_meter.h"
24 
25 #undef LOG_DOMAIN
26 #define LOG_DOMAIN LOG_TAG_DOMAIN_ID_IMAGE
27 
28 #undef LOG_TAG
29 #define LOG_TAG "HEIF_HW_DECODER"
30 
31 #ifdef __FILE_NAME__
32 #define FILENAME __FILE_NAME__
33 #else
34 #define FILENAME __FILE__
35 #endif
36 
37 #define LOG_FMT "[%{public}s][%{public}s %{public}d] "
38 #define LOGE(x, ...) \
39     HILOG_ERROR(LOG_CORE, LOG_FMT x, FILENAME, __FUNCTION__, __LINE__, ##__VA_ARGS__)
40 #define LOGW(x, ...) \
41     HILOG_WARN(LOG_CORE, LOG_FMT x, FILENAME, __FUNCTION__, __LINE__, ##__VA_ARGS__)
42 #define LOGI(x, ...) \
43     HILOG_INFO(LOG_CORE, LOG_FMT x, FILENAME, __FUNCTION__, __LINE__, ##__VA_ARGS__)
44 #define LOGD(x, ...) \
45     HILOG_DEBUG(LOG_CORE, LOG_FMT x, FILENAME, __FUNCTION__, __LINE__, ##__VA_ARGS__)
46 
47 // for ImageCodecBuffer
48 #define HLOG_FMT "%{public}s[%{public}s][%{public}s %{public}d] "
49 #define HLOGE(x, ...) HILOG_ERROR(LOG_CORE, HLOG_FMT x, compUniqueStr_.c_str(), \
50     currState_->GetName().c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
51 #define HLOGW(x, ...) HILOG_WARN(LOG_CORE, HLOG_FMT x, compUniqueStr_.c_str(), \
52     currState_->GetName().c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
53 #define HLOGI(x, ...) HILOG_INFO(LOG_CORE, HLOG_FMT x, compUniqueStr_.c_str(), \
54     currState_->GetName().c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
55 #define HLOGD(x, ...) \
56     do {    \
57         if (debugMode_) {   \
58             HILOG_DEBUG(LOG_CORE, HLOG_FMT x, compUniqueStr_.c_str(), \
59             currState_->GetName().c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__); \
60         }   \
61     } while (0)
62 
63 // for ImageCodecBuffer inner state
64 #define SLOGE(x, ...) HILOG_ERROR(LOG_CORE, HLOG_FMT x, \
65     codec_->compUniqueStr_.c_str(), stateName_.c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
66 #define SLOGW(x, ...) HILOG_WARN(LOG_CORE, HLOG_FMT x, \
67     codec_->compUniqueStr_.c_str(), stateName_.c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
68 #define SLOGI(x, ...) HILOG_INFO(LOG_CORE, HLOG_FMT x, \
69     codec_->compUniqueStr_.c_str(), stateName_.c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__)
70 #define SLOGD(x, ...) \
71     do {    \
72         if (codec_->debugMode_) {   \
73             HILOG_DEBUG(LOG_CORE, HLOG_FMT x, \
74             codec_->compUniqueStr_.c_str(), stateName_.c_str(), __FUNCTION__, __LINE__, ##__VA_ARGS__); \
75         }   \
76     } while (0)
77 
78 #define IF_TRUE_RETURN_VAL(cond, val)  \
79     do {                               \
80         if (cond) {                    \
81             return val;                \
82         }                              \
83     } while (0)
84 #define IF_TRUE_RETURN_VAL_WITH_MSG(cond, val, msg, ...) \
85     do {                                        \
86         if (cond) {                             \
87             LOGE(msg, ##__VA_ARGS__);           \
88             return val;                         \
89         }                                       \
90     } while (0)
91 #define IF_TRUE_RETURN_VOID(cond)  \
92     do {                                \
93         if (cond) {                     \
94             return;                     \
95         }                               \
96     } while (0)
97 #define IF_TRUE_RETURN_VOID_WITH_MSG(cond, msg, ...)     \
98     do {                                        \
99         if (cond) {                             \
100             LOGE(msg, ##__VA_ARGS__);           \
101             return;                             \
102         }                                       \
103     } while (0)
104 
105 #ifdef H_SYSTRACE_TAG
106 #undef H_SYSTRACE_TAG
107 #endif
108 #define H_SYSTRACE_TAG HITRACE_TAG_ZMEDIA
109 
110 class HeifPerfTracker {
111 public:
HeifPerfTracker(std::string desc)112     explicit HeifPerfTracker(std::string desc) : desc_(desc)
113     {
114         startTimeInUs_ = GetCurrentTimeInUs();
115         StartTrace(H_SYSTRACE_TAG, desc);
116     }
~HeifPerfTracker()117     ~HeifPerfTracker()
118     {
119         FinishTrace(H_SYSTRACE_TAG);
120         static constexpr float MILLISEC_TO_MICROSEC = 1000.0f;
121         int64_t timeSpanInUs = GetCurrentTimeInUs() - startTimeInUs_;
122         LOGD("%{public}s cost: %{public}.2f ms",
123              desc_.c_str(), static_cast<float>(timeSpanInUs / MILLISEC_TO_MICROSEC));
124     }
125 private:
GetCurrentTimeInUs()126     int64_t GetCurrentTimeInUs()
127     {
128         auto now = std::chrono::steady_clock::now();
129         return std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count();
130     }
131 
132     int64_t startTimeInUs_;
133     std::string desc_;
134 };
135 
136 #endif // IMAGE_CODEC_LOG_H