103 lines
3.1 KiB
C++
103 lines
3.1 KiB
C++
/*
|
|
* Copyright (C) 2024 Amlogic Corporation.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
*
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef DISP_ADPT_LOG_H
|
|
#define DISP_ADPT_LOG_H
|
|
|
|
#include <chrono>
|
|
#include <string>
|
|
|
|
#include <cstdarg>
|
|
|
|
#ifdef MESON_RELEASE
|
|
#define DISPLAY_DEBUG_LEVEL 0
|
|
#else
|
|
#define DISPLAY_DEBUG_LEVEL 1
|
|
#endif
|
|
|
|
#define DISPLAY_TAG "DisplayAdapter"
|
|
#define MESON_MAX_STR_LEN 4096
|
|
|
|
#define DEFAULT_LOG_LEVEL 1
|
|
|
|
#define ALIGN( value, base ) (((value) + ((base) - 1)) & ~((base) - 1))
|
|
#define VIDEO_ALIGN(value) ALIGN(value, 32)
|
|
|
|
void DispAdptLog(int level, const char *fmt, ...);
|
|
#ifdef DISPLAY_LOGLIB
|
|
void DispAdptLogPrint(int prio, const char* tag, const char* fmt, va_list args);
|
|
#endif
|
|
|
|
#if DISPLAY_DEBUG_LEVEL > 0
|
|
#define DISPLAY_LOGV(fmt,...) DispAdptLog(4, "[V] %s: " fmt "\n", DISPLAY_TAG, ##__VA_ARGS__)
|
|
#define DISPLAY_LOGD(fmt,...) DispAdptLog(3, "[D] %s: " fmt "\n", DISPLAY_TAG, ##__VA_ARGS__)
|
|
#define DISPLAY_LOGI(fmt,...) DispAdptLog(2, "[I] %s: " fmt "\n", DISPLAY_TAG, ##__VA_ARGS__)
|
|
#define DISPLAY_LOGW(fmt,...) DispAdptLog(1, "[W] %s: " fmt "\n", DISPLAY_TAG, ##__VA_ARGS__)
|
|
#define DISPLAY_LOGD_IF(level, fmt, ...) if (level) DISPLAY_LOGD(fmt, ##__VA_ARGS__)
|
|
#else
|
|
#define DISPLAY_LOGV(fmt,...) ((void)0)
|
|
#define DISPLAY_LOGD(fmt,...) ((void)0)
|
|
#define DISPLAY_LOGI(fmt,...) ((void)0)
|
|
#define DISPLAY_LOGW(fmt,...) ((void)0)
|
|
#define DISPLAY_LOGD_IF(level, fmt, ...) ((void)0)
|
|
#endif
|
|
#define DISPLAY_LOGE(fmt,...) DispAdptLog(0, "[E] %s: " fmt "\n", DISPLAY_TAG, ##__VA_ARGS__)
|
|
|
|
#if DISPLAY_DEBUG_LEVEL > 0
|
|
#define DISPLAY_ASSERT(condition,fmt,...) \
|
|
if (!(condition)) { \
|
|
DISPLAY_LOGE(fmt, ##__VA_ARGS__); \
|
|
abort(); \
|
|
}
|
|
#else
|
|
#define DISPLAY_ASSERT(condition,fmt,...) \
|
|
if (!(condition)) { \
|
|
DISPLAY_LOGE(fmt, ##__VA_ARGS__); \
|
|
}
|
|
#endif
|
|
|
|
long long DispAdptGetCurrentTime(void);
|
|
long long DispAdptGetCurrentTimeUs(void);
|
|
void DispAdptLogInit();
|
|
int DispAdptReadFile(const char *path, char *val, bool original, int valSize);
|
|
int DispAdptWriteFile(const char *path, const char *val);
|
|
int DispAdptGetDiNumber();
|
|
int DispAdptGetDiLog();
|
|
int DispAdptDebugSetting(char *content);
|
|
|
|
void DispAdptLogDestroy();
|
|
|
|
class Timer {
|
|
public:
|
|
explicit Timer(const std::string& name)
|
|
: name_(name), start_(std::chrono::high_resolution_clock::now()) {}
|
|
|
|
~Timer() {
|
|
auto end = std::chrono::high_resolution_clock::now();
|
|
std::chrono::duration<double, std::milli> diff = end - start_;
|
|
DISPLAY_LOGI("%s: %f ms", name_.c_str(), diff.count());
|
|
}
|
|
|
|
private:
|
|
std::string name_;
|
|
std::chrono::time_point<std::chrono::high_resolution_clock> start_;
|
|
};
|
|
|
|
#define DTRACE_ALL() Timer _timer_##__LINE__(__func__)
|
|
|
|
#endif
|