Skip to content

Commit

Permalink
Merge pull request #19931 from hrydgard/rename-log-functions
Browse files Browse the repository at this point in the history
Rename and consolidate log functions
  • Loading branch information
hrydgard authored Jan 29, 2025
2 parents b9decb2 + 2af7a04 commit 9ad42bc
Show file tree
Hide file tree
Showing 45 changed files with 448 additions and 443 deletions.
4 changes: 4 additions & 0 deletions Common/CommonTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@

#if defined(_MSC_VER)

#define NO_INLINE __declspec(noinline)

typedef unsigned __int8 u8;
typedef unsigned __int16 u16;
typedef unsigned __int32 u32;
Expand All @@ -36,6 +38,8 @@ typedef signed __int64 s64;

#else

#define NO_INLINE __attribute__((noinline))

#ifdef __SWITCH__
// Some HID conflicts
#define KEY_UP PKEY_UP
Expand Down
6 changes: 3 additions & 3 deletions Core/HLE/AtracCtx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ int Atrac::SetData(u32 buffer, u32 readSize, u32 bufferSize, int outputChannels,
Memory::Memcpy(dataBuf_, buffer, copybytes, "AtracSetData");
}
CreateDecoder();
return hleLogSuccessInfoI(Log::ME, successCode, "%s %s audio", codecName, channelName);
return hleLogInfo(Log::ME, successCode, "%s %s audio", codecName, channelName);
}

u32 Atrac::SetSecondBuffer(u32 secondBuffer, u32 secondBufferSize) {
Expand All @@ -714,7 +714,7 @@ u32 Atrac::SetSecondBuffer(u32 secondBuffer, u32 secondBufferSize) {
second_.addr = secondBuffer;
second_.size = secondBufferSize;
second_.fileoffset = secondFileOffset;
return hleLogSuccessI(Log::ME, 0);
return hleLogDebug(Log::ME, 0);
}

int AtracBase::GetSecondBufferInfo(u32 *fileOffset, u32 *desiredSize) {
Expand All @@ -727,7 +727,7 @@ int AtracBase::GetSecondBufferInfo(u32 *fileOffset, u32 *desiredSize) {

*fileOffset = track_.FileOffsetBySample(track_.loopEndSample - track_.firstSampleOffset);
*desiredSize = track_.fileSize - *fileOffset;
return hleLogSuccessI(Log::ME, 0);
return hleLogDebug(Log::ME, 0);
}

void Atrac::GetStreamDataInfo(u32 *writePtr, u32 *writableBytes, u32 *readOffset) {
Expand Down
2 changes: 1 addition & 1 deletion Core/HLE/AtracCtx2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ int Atrac2::SetData(u32 buffer, u32 readSize, u32 bufferSize, int outputChannels
} else {
bufferState_ = ATRAC_STATUS_HALFWAY_BUFFER;
}
return hleLogSuccessI(Log::ME, successCode);
return hleLogDebug(Log::ME, successCode);
}

u32 Atrac2::SetSecondBuffer(u32 secondBuffer, u32 secondBufferSize) {
Expand Down
43 changes: 28 additions & 15 deletions Core/HLE/HLE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ void hleLeave() {
} // else warn?
}

void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason) {
void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, const char *reason, const char *formatted_reason) {
char formatted_args[2048];
const char *funcName = "?";
u32 funcFlags = 0;
Expand All @@ -995,6 +995,7 @@ void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line

const HLEFunction *hleFunc = g_stack[g_stackSize - 1];

char retmask = hleFunc->retmask;
if (stackSize) {
_dbg_assert_(hleFunc->argmask != nullptr);

Expand All @@ -1007,35 +1008,47 @@ void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line
truncate_cpy(formatted_args, "...N/A...");
}

// This acts as an override (for error returns which are usually hex.)
if (retmask == '\0')
retmask = hleFunc->retmask;

funcName = hleFunc->name;
funcFlags = hleFunc->flags;
} else {
strcpy(formatted_args, "?");
formatted_args[0] = '?';
formatted_args[1] = '\0';
}

const char *fmt;
if (retmask == 'x') {
fmt = "%s%08llx=%s(%s)%s";
switch (retmask) {
case 'x':
// Truncate the high bits of the result (from any sign extension.)
res = (u32)res;
} else if (retmask == 'i' || retmask == 'I') {
fmt = "%s%08llx=%s(%s)%s";
break;
case 'i':
case 'I':
fmt = "%s%lld=%s(%s)%s";
} else if (retmask == 'f') {
break;
case 'f':
// TODO: For now, floats are just shown as bits.
fmt = "%s%08x=%s(%s)%s";
} else {
fmt = "%s%08llx=%s(%s)%s";
break;
case 'v':
// Void. Return value should not be shown.
fmt = "%s=%s(%s)%s";
break;
default:
_dbg_assert_msg_(false, "Invalid return format: %c", retmask);
fmt = "%s%08llx=%s(%s)%s";
break;
}

const char *kernelFlag = (funcFlags & HLE_KERNEL_SYSCALL) != 0 ? "K " : "";
GenericLog(level, t, file, line, fmt, kernelFlag, res, funcName, formatted_args, formatted_reason);
const char *kernelFlag = (funcFlags & HLE_KERNEL_SYSCALL) ? "K " : "";
if (retmask != 'v') {
GenericLog(level, t, file, line, fmt, kernelFlag, res, funcName, formatted_args, formatted_reason);
} else {
// Skipping the res argument for this format string.
GenericLog(level, t, file, line, fmt, kernelFlag, funcName, formatted_args, formatted_reason);
}

if (reportTag != nullptr) {
if (reportTag) {
// A blank string means always log, not just once.
if (reportTag[0] == '\0' || Reporting::ShouldLogNTimes(reportTag, 1)) {
// Here we want the original key, so that different args, etc. group together.
Expand Down
45 changes: 20 additions & 25 deletions Core/HLE/HLE.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,14 +172,15 @@ const HLEFunction *GetSyscallFuncPointer(MIPSOpcode op);
// For jit, takes arg: const HLEFunction *
void *GetQuickSyscallFunc(MIPSOpcode op);

void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason);
void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, const char *reason, const char *formatted_reason);

template <bool leave, typename T>
[[nodiscard]]
#ifdef __GNUC__
__attribute__((format(printf, 8, 9)))
__attribute__((format(printf, 7, 8)))
#endif
T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char *reportTag, char retmask, const char *reasonFmt, ...) {
NO_INLINE
T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char *reportTag, const char *reasonFmt, ...) {
if (!GenericLogEnabled(level, t)) {
if (leave) {
hleLeave();
Expand All @@ -205,7 +206,7 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char
} else if (std::is_signed<T>::value) {
fmtRes = (s64)res;
}
hleDoLogInternal(t, level, fmtRes, file, line, reportTag, retmask, reasonFmt, formatted_reason);
hleDoLogInternal(t, level, fmtRes, file, line, reportTag, reasonFmt, formatted_reason);
if (leave) {
hleLeave();
}
Expand All @@ -214,7 +215,8 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char

template <bool leave, typename T>
[[nodiscard]]
T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char *reportTag, char retmask) {
NO_INLINE
T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char *reportTag) {
if (((int)level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) && !reportTag) {
if (leave) {
hleLeave();
Expand All @@ -229,7 +231,7 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char
} else if (std::is_signed<T>::value) {
fmtRes = (s64)res;
}
hleDoLogInternal(t, level, fmtRes, file, line, reportTag, retmask, nullptr, "");
hleDoLogInternal(t, level, fmtRes, file, line, reportTag, nullptr, "");
if (leave) {
hleLeave();
}
Expand Down Expand Up @@ -281,25 +283,18 @@ inline R hleCallImpl(std::string_view module, std::string_view funcName, F func,
// IMPORTANT: These *must* only be used directly in HLE functions. They cannot be used by utility functions
// called by them. Use regular ERROR_LOG etc for those.

#define hleLogHelper(t, level, res, retmask, ...) \
(((int)level <= MAX_LOGLEVEL) ? hleDoLog<true>(t, level, (res), __FILE__, __LINE__, nullptr, retmask, ##__VA_ARGS__) : (res))
#define hleLogReturnHelper(t, level, res, ...) \
(((int)level <= MAX_LOGLEVEL) ? hleDoLog<true>(t, level, (res), __FILE__, __LINE__, nullptr, ##__VA_ARGS__) : (res))

#define hleLogError(t, res, ...) hleLogHelper(t, LogLevel::LERROR, res, 'x', ##__VA_ARGS__)
#define hleLogWarning(t, res, ...) hleLogHelper(t, LogLevel::LWARNING, res, 'x', ##__VA_ARGS__)
#define hleLogVerbose(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'x', ##__VA_ARGS__)
#define hleLogError(t, res, ...) hleLogReturnHelper(t, LogLevel::LERROR, res, ##__VA_ARGS__)
#define hleLogWarning(t, res, ...) hleLogReturnHelper(t, LogLevel::LWARNING, res, ##__VA_ARGS__)
#define hleLogDebug(t, res, ...) hleLogReturnHelper(t, HLE_LOG_LDEBUG, res, ##__VA_ARGS__)
#define hleLogInfo(t, res, ...) hleLogReturnHelper(t, LogLevel::LINFO, res, ##__VA_ARGS__)
#define hleLogVerbose(t, res, ...) hleLogReturnHelper(t, HLE_LOG_LVERBOSE, res, ##__VA_ARGS__)

// If res is negative, log warn/error, otherwise log debug.
#define hleLogSuccessOrWarn(t, res, ...) hleLogHelper(t, ((int)res < 0 ? LogLevel::LWARNING : HLE_LOG_LDEBUG), res, 'x', ##__VA_ARGS__)
#define hleLogSuccessOrError(t, res, ...) hleLogHelper(t, ((int)res < 0 ? LogLevel::LERROR : HLE_LOG_LDEBUG), res, 'x', ##__VA_ARGS__)

// NOTE: hleLogDebug is equivalent to hleLogSuccessI/X.
#define hleLogDebug(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'x', ##__VA_ARGS__)
#define hleLogSuccessX(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'x', ##__VA_ARGS__)
#define hleLogSuccessI(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'i', ##__VA_ARGS__)
#define hleLogSuccessInfoX(t, res, ...) hleLogHelper(t, LogLevel::LINFO, res, 'x', ##__VA_ARGS__)
#define hleLogSuccessInfoI(t, res, ...) hleLogHelper(t, LogLevel::LINFO, res, 'i', ##__VA_ARGS__)
#define hleLogSuccessVerboseX(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'x', ##__VA_ARGS__)
#define hleLogSuccessVerboseI(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'i', ##__VA_ARGS__)

#define hleReportError(t, res, ...) hleDoLog<true>(t, LogLevel::LERROR, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
#define hleReportWarning(t, res, ...) hleDoLog<true>(t, LogLevel::LWARNING, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
#define hleLogDebugOrWarn(t, res, ...) hleLogReturnHelper(t, ((int)res < 0 ? LogLevel::LWARNING : HLE_LOG_LDEBUG), res, ##__VA_ARGS__)
#define hleLogDebugOrError(t, res, ...) hleLogReturnHelper(t, ((int)res < 0 ? LogLevel::LERROR : HLE_LOG_LDEBUG), res, ##__VA_ARGS__)

#define hleReportError(t, res, ...) hleDoLog<true>(t, LogLevel::LERROR, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
#define hleReportWarning(t, res, ...) hleDoLog<true>(t, LogLevel::LWARNING, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
Loading

0 comments on commit 9ad42bc

Please sign in to comment.