Added LOGLEVEL support, release will now defined LOGLEVEL 2 (errors and warnings)

LOGGING should not be affected. 


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2550 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee 2009-03-04 22:29:03 +00:00
parent 0ade8bfc56
commit 0708677b53
18 changed files with 85 additions and 69 deletions

View File

@ -61,7 +61,7 @@ enum LOG_TYPE {
};
enum LOG_LEVELS {
LERROR = 0, // Bad errors - that still don't deserve a PanicAlert.
LERROR = 1, // Bad errors - that still don't deserve a PanicAlert.
LWARNING, // Something is suspicious.
LINFO, // General information.
LDEBUG, // Strictly for detailed debugging - might make things slow.
@ -76,19 +76,44 @@ enum LOG_LEVELS {
- Compile the log functions according to LOGLEVEL
*/
#ifdef LOGGING
#define LOGLEVEL 5
#define LOGLEVEL 4 //LogTypes::LDEBUG
#else
#ifndef LOGLEVEL
#define LOGLEVEL 2 //LogTypes::LWARNING
#endif // loglevel
#endif // logging
#define ERROR_LOG(...)
#define WARN_LOG(...)
#define INFO_LOG(...)
#define DEBUG_LOG(...)
extern void __Log(int logNumber, const char* text, ...);
// Let the compiler optimize this out
//#define GENERIC_LOG(t,v, ...) {if (v <= LOGLEVEL) __Log(t + (v)*100, __VA_ARGS__);}
#define GENERIC_LOG(t,v, ...) {__Log(t + (v)*100, __VA_ARGS__);}
#define GENERIC_LOG(t,v, ...) {if (v <= LOGLEVEL) __Log(t + (v)*100, __VA_ARGS__);}
#if LOGLEVEL >= 1 //LogTypes::LERROR
#undef ERROR_LOG
#define ERROR_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LERROR, __VA_ARGS__)}
#define WARN_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LINFO, __VA_ARGS__)}
#define INFO_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__)}
#endif // loglevel LERROR+
#if LOGLEVEL >= 2 //LogTypes::LWARNING
#undef WARN_LOG
#define WARN_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__)}
#endif // loglevel LWARNING+
#if LOGLEVEL >= 3 //LogTypes::LINFO
#undef INFO_LOG
#define INFO_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LINFO, __VA_ARGS__)}
#endif // loglevel LINFO+
#if LOGLEVEL >= 4 //LogTypes::LDEBUG
#undef DEBUG_LOG
#define DEBUG_LOG(t,...) {GENERIC_LOG(LogTypes::t, LogTypes::LDEBUG, __VA_ARGS__)}
#endif // loglevel LDEBUG+
#if LOGLEVEL >= 4 //LogTypes::LDEBUG
#define _dbg_assert_(_t_, _a_) \
if (!(_a_)) {\
ERROR_LOG(_t_, "Error...\n\n Line: %d\n File: %s\n Time: %s\n\nIgnore and continue?", \
@ -102,34 +127,27 @@ extern void __Log(int logNumber, const char* text, ...);
}
#define _dbg_update_() Host_UpdateLogDisplay();
#else // no logging
#define LOGLEVEL 1
#else // not debug
#define _dbg_clear_()
#define _dbg_update_() ;
#ifndef _dbg_assert_
#define _dbg_assert_(_t_, _a_) ;
#define _dbg_assert_msg_(_t_, _a_, _desc_, ...) ;
#endif
#endif // dbg_assert
#endif // LOGLEVEL LDEBUG
#define GENERIC_LOG(t,v, ...) {}
#define ERROR_LOG(t, ...) {}
#define WARN_LOG(t, ...) {}
#define INFO_LOG(t ,...) {}
#define DEBUG_LOG(t, ...) {}
#endif
#ifdef _WIN32
#define _assert_(_a_) _dbg_assert_(MASTER_LOG, _a_)
#define _assert_msg_(_t_, _a_, _fmt_, ...)\
#ifdef _WIN32
#define _assert_msg_(_t_, _a_, _fmt_, ...) \
if (!(_a_)) {\
if (!PanicYesNo(_fmt_, __VA_ARGS__)) {Crash();} \
}
#else
#define _assert_(a)
#define _assert_msg_(...)
#endif
#else // not win32
#define _assert_msg_(_t_, _a_, _fmt_, ...) \
if (!(_a_)) {\
if (!PanicYesNo(_fmt_, ##__VA_ARGS__)) {Crash();} \
}
#endif // WIN32
#endif // LOG_H

View File

@ -178,15 +178,15 @@ void LogInfo(const char *format, ...)
{
if (!b_RanOnce)
{
if (LogManager::Enabled() || logSelf)
if (LogManager::GetLevel() >= LogTypes::LINFO || logSelf)
{
char* temp = (char*)alloca(strlen(format)+512);
va_list args;
va_start(args, format);
CharArrayFromFormatV(temp, 512, format, args);
va_end(args);
if (LogManager::Enabled())
LogManager::Log(LogTypes::ACTIONREPLAY, temp);
INFO_LOG(ACTIONREPLAY, temp);
if (logSelf)
{
std::string text = temp;

View File

@ -53,7 +53,7 @@ void Console_Submit(const char *cmd)
if (addr)
{
#ifdef LOGGING
#if LOGLEVEL >= 3
u32 EA =
#endif
Memory::CheckDTLB(addr, Memory::FLAG_NO_EXCEPTION);

View File

@ -447,7 +447,7 @@ void ExecuteCommand(UDIDMAControlRegister& _DMAControlReg)
//=========================================================================================================
case 0x12:
{
#ifdef LOGGING
#if LOGLEVEL >= 3
u32 offset = dvdMem.Command[1];
// u32 sourcelength = dvdMem.Command[2];
#endif
@ -504,7 +504,7 @@ void ExecuteCommand(UDIDMAControlRegister& _DMAControlReg)
//=========================================================================================================
case 0xAB:
{
#ifdef LOGGING
#if LOGLEVEL >= 4
u32 offset = dvdMem.Command[1] << 2;
#endif
DEBUG_LOG(DVDINTERFACE, "DVD: Trying to seek: offset=%08x", offset);
@ -537,7 +537,7 @@ void ExecuteCommand(UDIDMAControlRegister& _DMAControlReg)
// ugly hack to catch the disable command
if (dvdMem.Command[1]!=0)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
u8 subCommand = (dvdMem.Command[0] & 0x00FF0000) >> 16;
#endif

View File

@ -185,7 +185,7 @@ void CEXIIPL::TransferByte(u8& _uByte)
m_RTC[i] = pGCTime[i^3];
}
#ifdef LOGGING
#if LOGLEVEL >= 3
if ((m_uAddress & 0xF0000000) == 0xb0000000)
{

View File

@ -65,7 +65,7 @@ namespace Memory
// #define NOCHECK
// Always disable memory checks if the Release build
#ifndef LOGGING
#if LOGLEVEL < 4
#define NOCHECK
#endif

View File

@ -237,9 +237,10 @@ void WriteToHardware(u32 em_address, const T data, u32 effective_address, Memory
// ----------------
u32 Read_Opcode(const u32 _Address)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
if (_Address == 0x00000000)
{
// FIXME use assert?
PanicAlert("Program tried to read from [00000000]");
return 0x00000000;
}
@ -282,13 +283,13 @@ u16 Read_U16(const u32 _Address)
u32 Read_U32(const u32 _Address)
{
#ifdef LOGGING
/*#if LOGLEVEL >= 4
if (_Address == 0x00000000)
{
//PanicAlert("Program tried to read from [00000000]");
//return 0x00000000;
}
#endif
#endif*/
u32 _var = 0;
ReadFromHardware<u32>(_var, _Address, _Address, FLAG_READ);
#ifndef NOCHECK

View File

@ -593,7 +593,7 @@ void RunSIBuffer()
else
outLength++;
#ifdef LOGGING
#if LOGLEVEL >= 3
int numOutput =
#endif
g_Channel[g_ComCSR.CHANNEL].m_pDevice->RunBuffer(g_SIBuffer, inLength);

View File

@ -66,7 +66,7 @@ public:
virtual bool IOCtl(u32 _CommandAddress)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
u32 Parameter = Memory::Read_U32(_CommandAddress +0x0C);
u32 Buffer1 = Memory::Read_U32(_CommandAddress +0x10);
u32 BufferSize1 = Memory::Read_U32(_CommandAddress +0x14);
@ -77,7 +77,7 @@ public:
// write return value
Memory::Write_U32(0, _CommandAddress + 0x4);
INFO_LOG(WII_IPC_NET, "%s - IOCtl:\n"
DEBUG_LOG(WII_IPC_NET, "%s - IOCtl:\n"
" Parameter: 0x%x (0x17 could be some kind of Sync RTC) \n"
" Buffer1: 0x%08x\n"
" BufferSize1: 0x%08x\n"

View File

@ -613,7 +613,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventRequestConnection(CWII_IPC_HL
AddEventToQueue(Event);
// Log
#ifdef LOGGING
#if LOGLEVEL >= 4
static char LinkType[][128] =
{
{ "HCI_LINK_SCO 0x00 - Voice"},
@ -718,7 +718,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventConnectionComplete(bdaddr_t _
g_GlobalHandle = pConnectionComplete->Connection_Handle;
#ifdef LOGGING
#if LOGLEVEL >= 4
static char s_szLinkType[][128] =
{
{ "HCI_LINK_SCO 0x00 - Voice"},
@ -1412,7 +1412,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandHostBufferSize(u8* _Input)
// ----------------
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWritePageTimeOut(u8* _Input)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
// command parameters
hci_write_page_timeout_cp* pWritePageTimeOut = (hci_write_page_timeout_cp*)_Input;
#endif
@ -1442,7 +1442,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteScanEnable(u8* _Input)
hci_write_scan_enable_rp Reply;
Reply.status = 0x00;
#ifdef LOGGING
#if LOGLEVEL >= 4
static char Scanning[][128] =
{
{ "HCI_NO_SCAN_ENABLE"},
@ -1463,7 +1463,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteScanEnable(u8* _Input)
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryMode(u8* _Input)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
// command parameters
hci_write_inquiry_mode_cp* pInquiryMode = (hci_write_inquiry_mode_cp*)_Input;
#endif
@ -1472,7 +1472,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryMode(u8* _Input)
hci_write_inquiry_mode_rp Reply;
Reply.status = 0x00;
#ifdef LOGGING
#if LOGLEVEL >= 4
static char InquiryMode[][128] =
{
{ "Standard Inquiry Result event format (default)" },
@ -1489,7 +1489,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryMode(u8* _Input)
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWritePageScanType(u8* _Input)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
// command parameters
hci_write_page_scan_type_cp* pWritePageScanType = (hci_write_page_scan_type_cp*)_Input;
#endif
@ -1498,7 +1498,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWritePageScanType(u8* _Input)
hci_write_page_scan_type_rp Reply;
Reply.status = 0x00;
#ifdef LOGGING
#if LOGLEVEL >= 4
static char PageScanType[][128] =
{
{ "Mandatory: Standard Scan (default)" },
@ -1555,7 +1555,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandInquiry(u8* _Input)
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryScanType(u8* _Input)
{
#ifdef LOGGING
#if LOGLEVEL >= 4
// command parameters
hci_write_inquiry_scan_type_cp* pSetEventFilter = (hci_write_inquiry_scan_type_cp*)_Input;
#endif
@ -1659,7 +1659,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandAcceptCon(u8* _Input)
// command parameters
hci_accept_con_cp* pAcceptCon = (hci_accept_con_cp*)_Input;
#ifdef LOGGING
#if LOGLEVEL >= 4
static char s_szRole[][128] =
{
{ "Master (0x00)"},

View File

@ -94,14 +94,14 @@ CDebugger_LogSettings::~CDebugger_LogSettings(void) {}
void CDebugger_Log::Init()
{
#ifdef LOGGING
#if LOGLEVEL > 0
m_pFile = fopen(m_szFilename, "wtb");
#endif
}
void CDebugger_Log::Shutdown()
{
#ifdef LOGGING
#if LOGLEVEL > 0
if (m_pFile != NULL)
{
fclose(m_pFile);

View File

@ -101,7 +101,7 @@ public:
private:
enum LOG_SETTINGS
{
VERBOSITY_LEVELS = 3
VERBOSITY_LEVELS = LOGLEVEL
};
friend class CDebugger_LogWindow;
@ -118,11 +118,7 @@ public:
static void Init();
static void Clear(void);
static void Shutdown();
#ifdef LOGGING
static bool Enabled() { return true; }
#else
static bool Enabled() { return false; }
#endif
static int GetLevel() {return LOGLEVEL;}
static void Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...);
};

View File

@ -376,7 +376,7 @@ void CCodeWindow::CreateGUIControls(const SCoreStartupParameter& _LocalCoreStart
// Additional dialogs
#ifdef LOGGING
#if LOGLEVEL > 0
if (bLogWindow)
{
m_LogWindow = new CLogWindow(this);
@ -504,7 +504,7 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam
// ---------------
wxMenu* pDebugDialogs = new wxMenu;
if (LogManager::Enabled())
if (LogManager::GetLevel() > 0)
{
wxMenuItem* pLogWindow = pDebugDialogs->Append(IDM_LOGWINDOW, _T("&LogManager"), wxEmptyString, wxITEM_CHECK);
pLogWindow->Check(bLogWindow);

View File

@ -316,7 +316,7 @@ void CCodeWindow::OnSymbolListContextMenu(wxContextMenuEvent& event)
/////////////////////////////////////////////////////////////////////////////////////////////////
void CCodeWindow::OnToggleLogWindow(wxCommandEvent& event)
{
if (LogManager::Enabled())
if (LogManager::GetLevel() > 0)
{
bool show = GetMenuBar()->IsChecked(event.GetId());

View File

@ -50,7 +50,11 @@ CLogWindow::CLogWindow(wxWindow* parent)
// left checkboxes and radio boxes -----------------------------------
int m_radioBoxNChoices[1];
wxString m_radioBoxChoices0[] = { wxT("0"), wxT("1"), wxT("2"), wxT("3") };
wxString m_radioBoxChoices0[LOGLEVEL+1];
for (int i=0;i<=LOGLEVEL;i++) {
m_radioBoxChoices0[i] = wxString::Format(wxT("%d"), i);
}
m_radioBoxNChoices[0] = sizeof( m_radioBoxChoices0 ) / sizeof( wxString );
m_RadioBox[0] = new wxRadioBox( this, IDM_RADIO0, wxT("Verbosity"),
wxDefaultPosition, wxDefaultSize, m_radioBoxNChoices[0], m_radioBoxChoices0, 1, wxRA_SPECIFY_ROWS);

View File

@ -267,7 +267,7 @@ bool DolphinApp::OnInit()
}
if(!UseDebugger && UseLogger)
{
#ifdef LOGGING
#if LOGLEVEL > 0
// We aren't using debugger, just logger
// Should be fine for a local copy
CLogWindow* m_LogWindow = new CLogWindow(main_frame);

View File

@ -113,10 +113,7 @@ void HandleGLError();
#define PRIM_LOG(...) {DEBUG_LOG(VIDEO, ##__VA_ARGS__)}
#endif
#ifdef LOGGING
#define LOG_VTX() PRIM_LOG("vtx: %f %f %f, ", ((float*)VertexManager::s_pCurBufferPointer)[0], ((float*)VertexManager::s_pCurBufferPointer)[1], ((float*)VertexManager::s_pCurBufferPointer)[2]);
#else
#define LOG_VTX()
#endif
#define LOG_VTX() DEBUG_LOG(VIDEO, "vtx: %f %f %f, ", ((float*)VertexManager::s_pCurBufferPointer)[0], ((float*)VertexManager::s_pCurBufferPointer)[1], ((float*)VertexManager::s_pCurBufferPointer)[2]);
#endif // _VIDEOCOMMON_H

View File

@ -60,7 +60,7 @@ static FILE* pfLog = NULL;
// This is on by default, but can be controlled from the debugging window
bool LocalLogFile = true;
#ifdef LOGGING
#if LOGLEVEL > 0
void __Log(const char *fmt, ...)
{
int len = strlen(fmt);