diff options
| author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-06 21:14:14 -0200 | 
|---|---|---|
| committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-13 02:08:06 -0200 | 
| commit | 4d2a6f8b9b3eeb85574a5e4f93422ffd4feebcd3 (patch) | |
| tree | 1e3fd71256c04a15970b09abd3f7280f8b1ff678 | |
| parent | 0e0a007a2503d468391004c8ea2faae305232345 (diff) | |
Remove old logging system
| -rw-r--r-- | src/citra_qt/main.cpp | 1 | ||||
| -rw-r--r-- | src/common/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/common/console_listener.cpp | 319 | ||||
| -rw-r--r-- | src/common/console_listener.h | 38 | ||||
| -rw-r--r-- | src/common/log.h | 127 | ||||
| -rw-r--r-- | src/common/log_manager.cpp | 198 | ||||
| -rw-r--r-- | src/common/log_manager.h | 166 | 
7 files changed, 2 insertions, 851 deletions
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 817732167..1299338ac 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -7,7 +7,6 @@  #include "main.hxx"  #include "common/common.h" -#include "common/log_manager.h"  #include "common/logging/text_formatter.h"  #include "common/logging/log.h"  #include "common/logging/backend.h" diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 489d2bb7f..15989708d 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -3,14 +3,12 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in" "${CMAKE_CURRENT_SOU  set(SRCS              break_points.cpp -            console_listener.cpp              emu_window.cpp              extended_trace.cpp              file_search.cpp              file_util.cpp              hash.cpp              key_map.cpp -            log_manager.cpp              logging/filter.cpp              logging/text_formatter.cpp              logging/backend.cpp @@ -36,7 +34,6 @@ set(HEADERS              common_paths.h              common_types.h              concurrent_ring_buffer.h -            console_listener.h              cpu_detect.h              debug_interface.h              emu_window.h @@ -48,7 +45,6 @@ set(HEADERS              key_map.h              linear_disk_cache.h              log.h -            log_manager.h              logging/text_formatter.h              logging/filter.h              logging/log.h diff --git a/src/common/console_listener.cpp b/src/common/console_listener.cpp deleted file mode 100644 index b6042796d..000000000 --- a/src/common/console_listener.cpp +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 -// Refer to the license.txt file included. - -#include <algorithm> - -#ifdef _WIN32 -#include <windows.h> -#include <array> -#endif - -#include "common/common.h" -#include "common/log_manager.h" // Common -#include "common/console_listener.h" // Common - -ConsoleListener::ConsoleListener() -{ -#ifdef _WIN32 -    hConsole = nullptr; -    bUseColor = true; -#else -    bUseColor = isatty(fileno(stdout)); -#endif -} - -ConsoleListener::~ConsoleListener() -{ -    Close(); -} - -// 100, 100, "Dolphin Log Console" -// Open console window - width and height is the size of console window -// Name is the window title -void ConsoleListener::Open(bool Hidden, int Width, int Height, const char *Title) -{ -#ifdef _WIN32 -    if (!GetConsoleWindow()) -    { -        // Open the console window and create the window handle for GetStdHandle() -        AllocConsole(); -        // Hide -        if (Hidden) ShowWindow(GetConsoleWindow(), SW_HIDE); -        // Save the window handle that AllocConsole() created -        hConsole = GetStdHandle(STD_OUTPUT_HANDLE); -        // Set the console window title -        SetConsoleTitle(Common::UTF8ToTStr(Title).c_str()); -        // Set letter space -        LetterSpace(80, 4000); -        //MoveWindow(GetConsoleWindow(), 200,200, 800,800, true); -    } -    else -    { -        hConsole = GetStdHandle(STD_OUTPUT_HANDLE); -    } -#endif -} - -void ConsoleListener::UpdateHandle() -{ -#ifdef _WIN32 -    hConsole = GetStdHandle(STD_OUTPUT_HANDLE); -#endif -} - -// Close the console window and close the eventual file handle -void ConsoleListener::Close() -{ -#ifdef _WIN32 -    if (hConsole == nullptr) -        return; -    FreeConsole(); -    hConsole = nullptr; -#else -    fflush(nullptr); -#endif -} - -bool ConsoleListener::IsOpen() -{ -#ifdef _WIN32 -    return (hConsole != nullptr); -#else -    return true; -#endif -} - -/* -  LetterSpace: SetConsoleScreenBufferSize and SetConsoleWindowInfo are -    dependent on each other, that's the reason for the additional checks. -*/ -void ConsoleListener::BufferWidthHeight(int BufferWidth, int BufferHeight, int ScreenWidth, int ScreenHeight, bool BufferFirst) -{ -#ifdef _WIN32 -    BOOL SB, SW; -    if (BufferFirst) -    { -        // Change screen buffer size -        COORD Co = {BufferWidth, BufferHeight}; -        SB = SetConsoleScreenBufferSize(hConsole, Co); -        // Change the screen buffer window size -        SMALL_RECT coo = {0,0,ScreenWidth, ScreenHeight}; // top, left, right, bottom -        SW = SetConsoleWindowInfo(hConsole, TRUE, &coo); -    } -    else -    { -        // Change the screen buffer window size -        SMALL_RECT coo = {0,0, ScreenWidth, ScreenHeight}; // top, left, right, bottom -        SW = SetConsoleWindowInfo(hConsole, TRUE, &coo); -        // Change screen buffer size -        COORD Co = {BufferWidth, BufferHeight}; -        SB = SetConsoleScreenBufferSize(hConsole, Co); -    } -#endif -} -void ConsoleListener::LetterSpace(int Width, int Height) -{ -#ifdef _WIN32 -    // Get console info -    CONSOLE_SCREEN_BUFFER_INFO ConInfo; -    GetConsoleScreenBufferInfo(hConsole, &ConInfo); - -    // -    int OldBufferWidth = ConInfo.dwSize.X; -    int OldBufferHeight = ConInfo.dwSize.Y; -    int OldScreenWidth = (ConInfo.srWindow.Right - ConInfo.srWindow.Left); -    int OldScreenHeight = (ConInfo.srWindow.Bottom - ConInfo.srWindow.Top); -    // -    int NewBufferWidth = Width; -    int NewBufferHeight = Height; -    int NewScreenWidth = NewBufferWidth - 1; -    int NewScreenHeight = OldScreenHeight; - -    // Width -    BufferWidthHeight(NewBufferWidth, OldBufferHeight, NewScreenWidth, OldScreenHeight, (NewBufferWidth > OldScreenWidth-1)); -    // Height -    BufferWidthHeight(NewBufferWidth, NewBufferHeight, NewScreenWidth, NewScreenHeight, (NewBufferHeight > OldScreenHeight-1)); - -    // Resize the window too -    //MoveWindow(GetConsoleWindow(), 200,200, (Width*8 + 50),(NewScreenHeight*12 + 200), true); -#endif -} -#ifdef _WIN32 -COORD ConsoleListener::GetCoordinates(int BytesRead, int BufferWidth) -{ -    COORD Ret = {0, 0}; -    // Full rows -    int Step = (int)floor((float)BytesRead / (float)BufferWidth); -    Ret.Y += Step; -    // Partial row -    Ret.X = BytesRead - (BufferWidth * Step); -    return Ret; -} -#endif -void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool Resize) -{ -#ifdef _WIN32 -    // Check size -    if (Width < 8 || Height < 12) return; - -    bool DBef = true; -    bool DAft = true; -    std::string SLog = ""; - -    const HWND hWnd = GetConsoleWindow(); -    const HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); - -    // Get console info -    CONSOLE_SCREEN_BUFFER_INFO ConInfo; -    GetConsoleScreenBufferInfo(hConsole, &ConInfo); -    DWORD BufferSize = ConInfo.dwSize.X * ConInfo.dwSize.Y; - -    // --------------------------------------------------------------------- -    //  Save the current text -    // ------------------------ -    DWORD cCharsRead = 0; -    COORD coordScreen = { 0, 0 }; - -    static const int MAX_BYTES = 1024 * 16; - -    std::vector<std::array<TCHAR, MAX_BYTES>> Str; -    std::vector<std::array<WORD, MAX_BYTES>> Attr; - -    // ReadConsoleOutputAttribute seems to have a limit at this level -    static const int ReadBufferSize = MAX_BYTES - 32; - -    DWORD cAttrRead = ReadBufferSize; -    DWORD BytesRead = 0; -    while (BytesRead < BufferSize) -    { -        Str.resize(Str.size() + 1); -        if (!ReadConsoleOutputCharacter(hConsole, Str.back().data(), ReadBufferSize, coordScreen, &cCharsRead)) -            SLog += Common::StringFromFormat("WriteConsoleOutputCharacter error"); - -        Attr.resize(Attr.size() + 1); -        if (!ReadConsoleOutputAttribute(hConsole, Attr.back().data(), ReadBufferSize, coordScreen, &cAttrRead)) -            SLog += Common::StringFromFormat("WriteConsoleOutputAttribute error"); - -        // Break on error -        if (cAttrRead == 0) break; -        BytesRead += cAttrRead; -        coordScreen = GetCoordinates(BytesRead, ConInfo.dwSize.X); -    } -    // Letter space -    int LWidth = (int)(floor((float)Width / 8.0f) - 1.0f); -    int LHeight = (int)(floor((float)Height / 12.0f) - 1.0f); -    int LBufWidth = LWidth + 1; -    int LBufHeight = (int)floor((float)BufferSize / (float)LBufWidth); -    // Change screen buffer size -    LetterSpace(LBufWidth, LBufHeight); - - -    ClearScreen(true); -    coordScreen.Y = 0; -    coordScreen.X = 0; -    DWORD cCharsWritten = 0; - -    int BytesWritten = 0; -    DWORD cAttrWritten = 0; -    for (size_t i = 0; i < Attr.size(); i++) -    { -        if (!WriteConsoleOutputCharacter(hConsole, Str[i].data(), ReadBufferSize, coordScreen, &cCharsWritten)) -            SLog += Common::StringFromFormat("WriteConsoleOutputCharacter error"); -        if (!WriteConsoleOutputAttribute(hConsole, Attr[i].data(), ReadBufferSize, coordScreen, &cAttrWritten)) -            SLog += Common::StringFromFormat("WriteConsoleOutputAttribute error"); - -        BytesWritten += cAttrWritten; -        coordScreen = GetCoordinates(BytesWritten, LBufWidth); -    } - -    const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X; -    COORD Coo = GetCoordinates(OldCursor, LBufWidth); -    SetConsoleCursorPosition(hConsole, Coo); - -    if (SLog.length() > 0) Log(LogTypes::LNOTICE, SLog.c_str()); - -    // Resize the window too -    if (Resize) MoveWindow(GetConsoleWindow(), Left,Top, (Width + 100),Height, true); -#endif -} - -void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text) -{ -#if defined(_WIN32) -    WORD Color; - -    switch (Level) -    { -    case OS_LEVEL: // light yellow -        Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; -        break; -    case NOTICE_LEVEL: // light green -        Color = FOREGROUND_GREEN | FOREGROUND_INTENSITY; -        break; -    case ERROR_LEVEL: // light red -        Color = FOREGROUND_RED | FOREGROUND_INTENSITY; -        break; -    case WARNING_LEVEL: // light purple -        Color = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY; -        break; -    case INFO_LEVEL: // cyan -        Color = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; -        break; -    case DEBUG_LEVEL: // gray -        Color = FOREGROUND_INTENSITY; -        break; -    default: // off-white -        Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; -        break; -    } -    SetConsoleTextAttribute(hConsole, Color); -    printf(Text); -#else -    char ColorAttr[16] = ""; -    char ResetAttr[16] = ""; - -    if (bUseColor) -    { -        strcpy(ResetAttr, "\033[0m"); -        switch (Level) -        { -        case NOTICE_LEVEL: // light green -            strcpy(ColorAttr, "\033[92m"); -            break; -        case ERROR_LEVEL: // light red -            strcpy(ColorAttr, "\033[91m"); -            break; -        case WARNING_LEVEL: // light yellow -            strcpy(ColorAttr, "\033[93m"); -            break; -        default: -            break; -        } -    } -    fprintf(stderr, "%s%s%s", ColorAttr, Text, ResetAttr); -#endif -} -// Clear console screen -void ConsoleListener::ClearScreen(bool Cursor) -{ -#if defined(_WIN32) -    COORD coordScreen = { 0, 0 }; -    DWORD cCharsWritten; -    CONSOLE_SCREEN_BUFFER_INFO csbi; -    DWORD dwConSize; - -    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); - -    GetConsoleScreenBufferInfo(hConsole, &csbi); -    dwConSize = csbi.dwSize.X * csbi.dwSize.Y; -    // Write space to the entire console -    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); -    GetConsoleScreenBufferInfo(hConsole, &csbi); -    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); -    // Reset cursor -    if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen); -#endif -} - - diff --git a/src/common/console_listener.h b/src/common/console_listener.h deleted file mode 100644 index ebd90a105..000000000 --- a/src/common/console_listener.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 -// Refer to the license.txt file included. - -#pragma once - -#include "common/log_manager.h" - -#ifdef _WIN32 -#include <windows.h> -#endif - -class ConsoleListener : public LogListener -{ -public: -    ConsoleListener(); -    ~ConsoleListener(); - -    void Open(bool Hidden = false, int Width = 100, int Height = 100, const char * Name = "Console"); -    void UpdateHandle(); -    void Close(); -    bool IsOpen(); -    void LetterSpace(int Width, int Height); -    void BufferWidthHeight(int BufferWidth, int BufferHeight, int ScreenWidth, int ScreenHeight, bool BufferFirst); -    void PixelSpace(int Left, int Top, int Width, int Height, bool); -#ifdef _WIN32 -    COORD GetCoordinates(int BytesRead, int BufferWidth); -#endif -    void Log(LogTypes::LOG_LEVELS, const char *Text) override; -    void ClearScreen(bool Cursor = true); - -private: -#ifdef _WIN32 -    HWND GetHwnd(void); -    HANDLE hConsole; -#endif -    bool bUseColor; -}; diff --git a/src/common/log.h b/src/common/log.h index c0f7ca2df..663eda9ad 100644 --- a/src/common/log.h +++ b/src/common/log.h @@ -8,132 +8,13 @@  #include "common/msg_handler.h"  #include "common/logging/log.h" -#ifndef LOGGING -#define LOGGING -#endif - -enum { -    OS_LEVEL,       // Printed by the emulated operating system -    NOTICE_LEVEL,   // VERY important information that is NOT errors. Like startup and OSReports. -    ERROR_LEVEL,    // Critical errors -    WARNING_LEVEL,  // Something is suspicious. -    INFO_LEVEL,     // General information. -    DEBUG_LEVEL,    // Detailed debugging - might make things slow. -}; - -namespace LogTypes -{ - -enum LOG_TYPE { -    //ACTIONREPLAY, -    //AUDIO, -    //AUDIO_INTERFACE, -    BOOT, -    //COMMANDPROCESSOR, -    COMMON, -    //CONSOLE, -    CONFIG, -    //DISCIO, -    //FILEMON, -    //DSPHLE, -    //DSPLLE, -    //DSP_MAIL, -    //DSPINTERFACE, -    //DVDINTERFACE, -    //DYNA_REC, -    //EXPANSIONINTERFACE, -    //GDB_STUB, -    ARM11, -    GSP, -    OSHLE, -    MASTER_LOG, -    MEMMAP, -    //MEMCARD_MANAGER, -    //OSREPORT, -    //PAD, -    //PROCESSORINTERFACE, -    //PIXELENGINE, -    //SERIALINTERFACE, -    //SP1, -    //STREAMINGINTERFACE, -    VIDEO, -    //VIDEOINTERFACE, -    LOADER, -    FILESYS, -    //WII_IPC_DVD, -    //WII_IPC_ES, -    //WII_IPC_FILEIO, -    //WII_IPC_HID, -    KERNEL, -    SVC, -    HLE, -    RENDER, -    GPU, -    HW, -    TIME, -    //NETPLAY, -    GUI, - -    NUMBER_OF_LOGS // Must be last -}; - -// FIXME: should this be removed? -enum LOG_LEVELS { -    LOS = OS_LEVEL, -    LNOTICE = NOTICE_LEVEL, -    LERROR = ERROR_LEVEL, -    LWARNING = WARNING_LEVEL, -    LINFO = INFO_LEVEL, -    LDEBUG = DEBUG_LEVEL, -}; - -#define LOGTYPES_LEVELS LogTypes::LOG_LEVELS -#define LOGTYPES_TYPE LogTypes::LOG_TYPE - -}  // namespace - -void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int line, -    const char* function, const char* fmt, ...) -#ifdef __GNUC__ -        __attribute__((format(printf, 6, 7))) -#endif -        ; - -#if defined LOGGING || defined _DEBUG || defined DEBUGFAST -#define MAX_LOGLEVEL LDEBUG -#else -#ifndef MAX_LOGLEVEL -#define MAX_LOGLEVEL LWARNING -#endif // loglevel -#endif // logging -  #ifdef _WIN32  #ifndef __func__  #define __func__ __FUNCTION__  #endif  #endif -// Let the compiler optimize this out -#define GENERIC_LOG(t, v, ...) { \ -    if (v <= LogTypes::MAX_LOGLEVEL) \ -        GenericLog(v, t, __FILE__, __LINE__, __func__, __VA_ARGS__); \ -    } - -//#define OS_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LOS, __VA_ARGS__) } while (0) -//#define ERROR_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LERROR, __VA_ARGS__) } while (0) -//#define WARN_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__) } while (0) -//#define NOTICE_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LNOTICE, __VA_ARGS__) } while (0) -//#define INFO_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LINFO, __VA_ARGS__) } while (0) -//#define DEBUG_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LDEBUG, __VA_ARGS__) } while (0) - -//#define OS_LOG(t,...) LOG_INFO(Common, __VA_ARGS__) -//#define ERROR_LOG(t,...) LOG_ERROR(Common_Filesystem, __VA_ARGS__) -//#define WARN_LOG(t,...) LOG_WARNING(Kernel_SVC, __VA_ARGS__) -//#define NOTICE_LOG(t,...) LOG_INFO(Service, __VA_ARGS__) -//#define INFO_LOG(t,...) LOG_INFO(Service_FS, __VA_ARGS__) -//#define DEBUG_LOG(t,...) LOG_DEBUG(Common, __VA_ARGS__) - -#if MAX_LOGLEVEL >= DEBUG_LEVEL +#if _DEBUG  #define _dbg_assert_(_t_, _a_) \      if (!(_a_)) {\          LOG_CRITICAL(_t_, "Error...\n\n  Line: %d\n  File: %s\n  Time: %s\n\nIgnore and continue?", \ @@ -154,11 +35,10 @@ void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int  #define _dbg_assert_(_t_, _a_) {}  #define _dbg_assert_msg_(_t_, _a_, _desc_, ...) {}  #endif // dbg_assert -#endif // MAX_LOGLEVEL DEBUG +#endif  #define _assert_(_a_) _dbg_assert_(MASTER_LOG, _a_) -#ifndef GEKKO  #ifdef _WIN32  #define _assert_msg_(_t_, _a_, _fmt_, ...)        \      if (!(_a_)) {\ @@ -170,6 +50,3 @@ void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int          if (!PanicYesNo(_fmt_, ##__VA_ARGS__)) {Crash();} \      }  #endif // WIN32 -#else // GEKKO -#define _assert_msg_(_t_, _a_, _fmt_, ...) -#endif diff --git a/src/common/log_manager.cpp b/src/common/log_manager.cpp deleted file mode 100644 index adc17444c..000000000 --- a/src/common/log_manager.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 -// Refer to the license.txt file included. - -#include <algorithm> - -#include "common/log_manager.h" -#include "common/console_listener.h" -#include "common/timer.h" - -void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, -    const char* function, const char* fmt, ...) -{ -    va_list args; -    va_start(args, fmt); - -    if (LogManager::GetInstance()) { -        LogManager::GetInstance()->Log(level, type, -            file, line, function, fmt, args); -    } -    va_end(args); -} - -LogManager *LogManager::m_logManager = nullptr; - -LogManager::LogManager() -{ -    // create log files -    m_Log[LogTypes::MASTER_LOG]         = new LogContainer("*",                 "Master Log"); -    m_Log[LogTypes::BOOT]               = new LogContainer("BOOT",              "Boot"); -    m_Log[LogTypes::COMMON]             = new LogContainer("COMMON",            "Common"); -    m_Log[LogTypes::CONFIG]             = new LogContainer("CONFIG",            "Configuration"); -    //m_Log[LogTypes::DISCIO]             = new LogContainer("DIO",               "Disc IO"); -    //m_Log[LogTypes::FILEMON]            = new LogContainer("FileMon",           "File Monitor"); -    //m_Log[LogTypes::PAD]                = new LogContainer("PAD",               "Pad"); -    //m_Log[LogTypes::PIXELENGINE]        = new LogContainer("PE",                "PixelEngine"); -    //m_Log[LogTypes::COMMANDPROCESSOR]   = new LogContainer("CP",                "CommandProc"); -    //m_Log[LogTypes::VIDEOINTERFACE]     = new LogContainer("VI",                "VideoInt"); -    //m_Log[LogTypes::SERIALINTERFACE]    = new LogContainer("SI",                "SerialInt"); -    //m_Log[LogTypes::PROCESSORINTERFACE] = new LogContainer("PI",                "ProcessorInt"); -    m_Log[LogTypes::MEMMAP]             = new LogContainer("MI",                "MI & memmap"); -    //m_Log[LogTypes::SP1]                = new LogContainer("SP1",               "Serial Port 1"); -    //m_Log[LogTypes::STREAMINGINTERFACE] = new LogContainer("Stream",            "StreamingInt"); -    //m_Log[LogTypes::DSPINTERFACE]       = new LogContainer("DSP",               "DSPInterface"); -    //m_Log[LogTypes::DVDINTERFACE]       = new LogContainer("DVD",               "DVDInterface"); -    m_Log[LogTypes::GSP]                = new LogContainer("GSP",               "GSP"); -    //m_Log[LogTypes::EXPANSIONINTERFACE] = new LogContainer("EXI",               "ExpansionInt"); -    //m_Log[LogTypes::GDB_STUB]           = new LogContainer("GDB_STUB",          "GDB Stub"); -    //m_Log[LogTypes::AUDIO_INTERFACE]    = new LogContainer("AI",                "AudioInt"); -    m_Log[LogTypes::ARM11]              = new LogContainer("ARM11",             "ARM11"); -    m_Log[LogTypes::OSHLE]              = new LogContainer("HLE",               "HLE"); -    //m_Log[LogTypes::DSPHLE]             = new LogContainer("DSPHLE",            "DSP HLE"); -    //m_Log[LogTypes::DSPLLE]             = new LogContainer("DSPLLE",            "DSP LLE"); -    //m_Log[LogTypes::DSP_MAIL]           = new LogContainer("DSPMails",          "DSP Mails"); -    m_Log[LogTypes::VIDEO]              = new LogContainer("Video",             "Video Backend"); -    //m_Log[LogTypes::AUDIO]              = new LogContainer("Audio",             "Audio Emulator"); -    //m_Log[LogTypes::DYNA_REC]           = new LogContainer("JIT",               "JIT"); -    //m_Log[LogTypes::CONSOLE]            = new LogContainer("CONSOLE",           "Dolphin Console"); -    //m_Log[LogTypes::OSREPORT]           = new LogContainer("OSREPORT",          "OSReport"); -    m_Log[LogTypes::TIME]               = new LogContainer("Time",              "Core Timing"); -    m_Log[LogTypes::LOADER]             = new LogContainer("Loader",            "Loader"); -    m_Log[LogTypes::FILESYS]            = new LogContainer("FileSys",           "File System"); -    //m_Log[LogTypes::WII_IPC_HID]        = new LogContainer("WII_IPC_HID",       "WII IPC HID"); -    m_Log[LogTypes::KERNEL]             = new LogContainer("KERNEL",            "KERNEL HLE"); -    //m_Log[LogTypes::WII_IPC_DVD]        = new LogContainer("WII_IPC_DVD",       "WII IPC DVD"); -    //m_Log[LogTypes::WII_IPC_ES]         = new LogContainer("WII_IPC_ES",        "WII IPC ES"); -    //m_Log[LogTypes::WII_IPC_FILEIO]     = new LogContainer("WII_IPC_FILEIO",    "WII IPC FILEIO"); -    m_Log[LogTypes::RENDER]             = new LogContainer("RENDER",            "RENDER"); -    m_Log[LogTypes::GPU]                = new LogContainer("GPU",               "GPU"); -    m_Log[LogTypes::SVC]                = new LogContainer("SVC",               "Supervisor Call HLE"); -    m_Log[LogTypes::HLE]                = new LogContainer("HLE",               "High Level Emulation"); -    m_Log[LogTypes::HW]                 = new LogContainer("HW",                "Hardware"); -    //m_Log[LogTypes::ACTIONREPLAY]       = new LogContainer("ActionReplay",      "ActionReplay"); -    //m_Log[LogTypes::MEMCARD_MANAGER]    = new LogContainer("MemCard Manager",   "MemCard Manager"); -    //m_Log[LogTypes::NETPLAY]            = new LogContainer("NETPLAY",           "Netplay"); -    m_Log[LogTypes::GUI]                = new LogContainer("GUI",               "GUI"); - -    m_fileLog = new FileLogListener(FileUtil::GetUserPath(F_MAINLOG_IDX).c_str()); -    m_consoleLog = new ConsoleListener(); -    m_debuggerLog = new DebuggerLogListener(); - -    for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) -    { -        m_Log[i]->SetEnable(true); -        m_Log[i]->AddListener(m_fileLog); -        m_Log[i]->AddListener(m_consoleLog); -#ifdef _MSC_VER -        if (IsDebuggerPresent()) -            m_Log[i]->AddListener(m_debuggerLog); -#endif -    } - -    m_consoleLog->Open(); -} - -LogManager::~LogManager() -{ -    for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) -    { -        m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_fileLog); -        m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_consoleLog); -        m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_debuggerLog); -    } - -    for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) -        delete m_Log[i]; - -    delete m_fileLog; -    delete m_consoleLog; -    delete m_debuggerLog; -} - -void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, -    int line, const char* function, const char *fmt, va_list args) -{ -    char temp[MAX_MSGLEN]; -    char msg[MAX_MSGLEN * 2]; -    LogContainer *log = m_Log[type]; - -    if (!log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners()) -        return; - -    Common::CharArrayFromFormatV(temp, MAX_MSGLEN, fmt, args); - -    static const char level_to_char[7] = "ONEWID"; -    sprintf(msg, "%s %s:%u %c[%s] %s: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line, -        level_to_char[(int)level], log->GetShortName(), function, temp); - -#ifdef ANDROID -    Host_SysMessage(msg); -#endif -    log->Trigger(level, msg); -} - -void LogManager::Init() -{ -    m_logManager = new LogManager(); -} - -void LogManager::Shutdown() -{ -    delete m_logManager; -    m_logManager = nullptr; -} - -LogContainer::LogContainer(const char* shortName, const char* fullName, bool enable) -    : m_enable(enable) -{ -    strncpy(m_fullName, fullName, 128); -    strncpy(m_shortName, shortName, 32); -    m_level = LogTypes::MAX_LOGLEVEL; -} - -// LogContainer -void LogContainer::AddListener(LogListener *listener) -{ -    std::lock_guard<std::mutex> lk(m_listeners_lock); -    m_listeners.insert(listener); -} - -void LogContainer::RemoveListener(LogListener *listener) -{ -    std::lock_guard<std::mutex> lk(m_listeners_lock); -    m_listeners.erase(listener); -} - -void LogContainer::Trigger(LogTypes::LOG_LEVELS level, const char *msg) -{ -    std::lock_guard<std::mutex> lk(m_listeners_lock); - -    std::set<LogListener*>::const_iterator i; -    for (i = m_listeners.begin(); i != m_listeners.end(); ++i) -    { -        (*i)->Log(level, msg); -    } -} - -FileLogListener::FileLogListener(const char *filename) -{ -    OpenFStream(m_logfile, filename, std::ios::app); -    SetEnable(true); -} - -void FileLogListener::Log(LogTypes::LOG_LEVELS, const char *msg) -{ -    if (!IsEnabled() || !IsValid()) -        return; - -    std::lock_guard<std::mutex> lk(m_log_lock); -    m_logfile << msg << std::flush; -} - -void DebuggerLogListener::Log(LogTypes::LOG_LEVELS, const char *msg) -{ -#if _MSC_VER -    ::OutputDebugStringA(msg); -#endif -} diff --git a/src/common/log_manager.h b/src/common/log_manager.h deleted file mode 100644 index baefc4ba8..000000000 --- a/src/common/log_manager.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 -// Refer to the license.txt file included. - -#pragma once - -#include "common/log.h" -#include "common/string_util.h" -#include "common/file_util.h" - -#include <cstring> -#include <set> -#include <mutex> - -#define MAX_MESSAGES 8000 -#define MAX_MSGLEN  1024 - - -// pure virtual interface -class LogListener -{ -public: -    virtual ~LogListener() {} - -    virtual void Log(LogTypes::LOG_LEVELS, const char *msg) = 0; -}; - -class FileLogListener : public LogListener -{ -public: -    FileLogListener(const char *filename); - -    void Log(LogTypes::LOG_LEVELS, const char *msg) override; - -    bool IsValid() { return !m_logfile.fail(); } -    bool IsEnabled() const { return m_enable; } -    void SetEnable(bool enable) { m_enable = enable; } - -    const char* GetName() const { return "file"; } - -private: -    std::mutex m_log_lock; -    std::ofstream m_logfile; -    bool m_enable; -}; - -class DebuggerLogListener : public LogListener -{ -public: -    void Log(LogTypes::LOG_LEVELS, const char *msg) override; -}; - -class LogContainer -{ -public: -    LogContainer(const char* shortName, const char* fullName, bool enable = false); - -    const char* GetShortName() const { return m_shortName; } -    const char* GetFullName() const { return m_fullName; } - -    void AddListener(LogListener* listener); -    void RemoveListener(LogListener* listener); - -    void Trigger(LogTypes::LOG_LEVELS, const char *msg); - -    bool IsEnabled() const { return m_enable; } -    void SetEnable(bool enable) { m_enable = enable; } - -    LogTypes::LOG_LEVELS GetLevel() const { return m_level;    } - -    void SetLevel(LogTypes::LOG_LEVELS level) {    m_level = level; } - -    bool HasListeners() const { return !m_listeners.empty(); } - -private: -    char m_fullName[128]; -    char m_shortName[32]; -    bool m_enable; -    LogTypes::LOG_LEVELS m_level; -    std::mutex m_listeners_lock; -    std::set<LogListener*> m_listeners; -}; - -class ConsoleListener; - -class LogManager : NonCopyable -{ -private: -    LogContainer* m_Log[LogTypes::NUMBER_OF_LOGS]; -    FileLogListener *m_fileLog; -    ConsoleListener *m_consoleLog; -    DebuggerLogListener *m_debuggerLog; -    static LogManager *m_logManager;  // Singleton. Ugh. - -    LogManager(); -    ~LogManager(); -public: - -    static u32 GetMaxLevel() { return LogTypes::MAX_LOGLEVEL;    } - -    void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, -        const char* function, const char *fmt, va_list args); - -    void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) -    { -        m_Log[type]->SetLevel(level); -    } - -    void SetEnable(LogTypes::LOG_TYPE type, bool enable) -    { -        m_Log[type]->SetEnable(enable); -    } - -    bool IsEnabled(LogTypes::LOG_TYPE type) const -    { -        return m_Log[type]->IsEnabled(); -    } - -    const char* GetShortName(LogTypes::LOG_TYPE type) const -    { -        return m_Log[type]->GetShortName(); -    } - -    const char* GetFullName(LogTypes::LOG_TYPE type) const -    { -        return m_Log[type]->GetFullName(); -    } - -    void AddListener(LogTypes::LOG_TYPE type, LogListener *listener) -    { -        m_Log[type]->AddListener(listener); -    } - -    void RemoveListener(LogTypes::LOG_TYPE type, LogListener *listener) -    { -        m_Log[type]->RemoveListener(listener); -    } - -    FileLogListener *GetFileListener() const -    { -        return m_fileLog; -    } - -    ConsoleListener *GetConsoleListener() const -    { -        return m_consoleLog; -    } - -    DebuggerLogListener *GetDebuggerListener() const -    { -        return m_debuggerLog; -    } - -    static LogManager* GetInstance() -    { -        return m_logManager; -    } - -    static void SetInstance(LogManager *logManager) -    { -        m_logManager = logManager; -    } - -    static void Init(); -    static void Shutdown(); -};  | 
