From 0a0224f1ef90c0b1988c93c976184b91addfdad0 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 24 Sep 2009 19:51:38 +0000 Subject: [PATCH] auto-cpu-data --- panda/src/display/graphicsPipe.cxx | 11 +++ panda/src/display/graphicsPipe.h | 1 + panda/src/windisplay/config_windisplay.cxx | 6 ++ panda/src/windisplay/config_windisplay.h | 1 + panda/src/windisplay/winGraphicsPipe.cxx | 93 +++++++++++++--------- panda/src/windisplay/winGraphicsPipe.h | 2 + 6 files changed, 75 insertions(+), 39 deletions(-) diff --git a/panda/src/display/graphicsPipe.cxx b/panda/src/display/graphicsPipe.cxx index d447b8d375..8fb73c10f0 100644 --- a/panda/src/display/graphicsPipe.cxx +++ b/panda/src/display/graphicsPipe.cxx @@ -147,3 +147,14 @@ DisplayInformation * GraphicsPipe:: get_display_information() { return _display_information; } + +//////////////////////////////////////////////////////////////////// +// Function: GraphicsPipe::lookup_cpu_data +// Access: Public, Virtual +// Description: Looks up the detailed CPU information and stores it +// in _display_information, if supported by the OS. +// This may take a second or two. +//////////////////////////////////////////////////////////////////// +void GraphicsPipe:: +lookup_cpu_data() { +} diff --git a/panda/src/display/graphicsPipe.h b/panda/src/display/graphicsPipe.h index 7f6f6febf0..f98ed3c10b 100644 --- a/panda/src/display/graphicsPipe.h +++ b/panda/src/display/graphicsPipe.h @@ -97,6 +97,7 @@ PUBLISHED: INLINE int get_display_height() const; DisplayInformation *get_display_information(); + virtual void lookup_cpu_data(); virtual string get_interface_name() const=0; diff --git a/panda/src/windisplay/config_windisplay.cxx b/panda/src/windisplay/config_windisplay.cxx index ba63fb3b0c..852aecfce1 100644 --- a/panda/src/windisplay/config_windisplay.cxx +++ b/panda/src/windisplay/config_windisplay.cxx @@ -40,6 +40,12 @@ ConfigVariableBool do_vidmemsize_check PRC_DESC("if true, use ddraw's GetAvailVidMem to fail if driver says " "it has too little video mem")); +ConfigVariableBool auto_cpu_data +("auto-cpu-data", false, + PRC_DESC("Set this true to automatically get the CPU data at start; false to " + "require an explicit call to pipe->lookup_cpu_data(). Setting this " + "true may slow down startup time by 1-2 seconds.")); + ConfigVariableBool ime_aware ("ime-aware", false, PRC_DESC("Set this true to show ime texts on the chat panel and hide the " diff --git a/panda/src/windisplay/config_windisplay.h b/panda/src/windisplay/config_windisplay.h index b14a1a900b..8560aea6c8 100644 --- a/panda/src/windisplay/config_windisplay.h +++ b/panda/src/windisplay/config_windisplay.h @@ -25,6 +25,7 @@ NotifyCategoryDecl(windisplay, EXPCL_PANDAWIN, EXPTP_PANDAWIN); extern ConfigVariableBool responsive_minimized_fullscreen_window; extern ConfigVariableBool hold_keys_across_windows; extern ConfigVariableBool do_vidmemsize_check; +extern ConfigVariableBool auto_cpu_data; extern ConfigVariableBool ime_composition_w; extern ConfigVariableBool ime_aware; extern ConfigVariableBool ime_hide; diff --git a/panda/src/windisplay/winGraphicsPipe.cxx b/panda/src/windisplay/winGraphicsPipe.cxx index 852615aa97..5bdbf0ab1a 100644 --- a/panda/src/windisplay/winGraphicsPipe.cxx +++ b/panda/src/windisplay/winGraphicsPipe.cxx @@ -836,7 +836,60 @@ WinGraphicsPipe() { state = true; } #endif + + if (auto_cpu_data) { + lookup_cpu_data(); + } + + OSVERSIONINFO version_info; + + version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if (GetVersionEx (&version_info)) { + sprintf (string, "OS version: %d.%d.%d.%d \n", version_info.dwMajorVersion, version_info.dwMinorVersion, version_info.dwPlatformId, version_info.dwBuildNumber); + windisplay_cat.info() << string; + windisplay_cat.info() << " " << version_info.szCSDVersion << "\n"; + + _display_information -> _os_version_major = version_info.dwMajorVersion; + _display_information -> _os_version_minor = version_info.dwMinorVersion; + _display_information -> _os_version_build = version_info.dwBuildNumber; + _display_information -> _os_platform_id = version_info.dwPlatformId; + } + // Screen size + _display_width = GetSystemMetrics(SM_CXSCREEN); + _display_height = GetSystemMetrics(SM_CYSCREEN); + HMODULE power_dll; + + power_dll = LoadLibrary ("PowrProf.dll"); + if (power_dll) { + CallNtPowerInformationFunction = (CallNtPowerInformationType) GetProcAddress (power_dll, "CallNtPowerInformation"); + if (CallNtPowerInformationFunction) { + + _display_information -> _update_cpu_frequency_function = update_cpu_frequency_function; + update_cpu_frequency_function(0, _display_information); + + sprintf (string, "max Mhz %I64d, current Mhz %I64d \n", _display_information -> _maximum_cpu_frequency, _display_information -> _current_cpu_frequency); + + windisplay_cat.info() << string; + } + } + + if (state) { + + } +} + +//////////////////////////////////////////////////////////////////// +// Function: WinGraphicsPipe::lookup_cpu_data +// Access: Public, Virtual +// Description: Looks up the detailed CPU information and stores it +// in _display_information, if supported by the OS. +// This may take a second or two. +//////////////////////////////////////////////////////////////////// +void WinGraphicsPipe:: +lookup_cpu_data() { + char string [512]; + // set callback for memory function _display_information -> _get_memory_information_function = get_memory_information; @@ -860,7 +913,6 @@ WinGraphicsPipe() { HANDLE thread; windisplay_cat.info() << "begin QueryPerformanceFrequency\n"; - thread = GetCurrentThread(); priority = GetThreadPriority (thread); SetThreadPriority(thread, THREAD_PRIORITY_TIME_CRITICAL); @@ -881,12 +933,12 @@ WinGraphicsPipe() { } SetThreadPriority(thread, priority); - sprintf (string, "QueryPerformanceFrequency: %I64d\n", frequency.QuadPart); windisplay_cat.info() << string; sprintf (string, "CPU frequency: %I64d\n", _display_information -> _cpu_frequency); windisplay_cat.info() << string; + // CPUID CPU_ID cpu_id; @@ -937,43 +989,6 @@ WinGraphicsPipe() { // Number of CPU's count_number_of_cpus(_display_information); - - OSVERSIONINFO version_info; - - version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (GetVersionEx (&version_info)) { - sprintf (string, "OS version: %d.%d.%d.%d \n", version_info.dwMajorVersion, version_info.dwMinorVersion, version_info.dwPlatformId, version_info.dwBuildNumber); - windisplay_cat.info() << string; - windisplay_cat.info() << " " << version_info.szCSDVersion << "\n"; - - _display_information -> _os_version_major = version_info.dwMajorVersion; - _display_information -> _os_version_minor = version_info.dwMinorVersion; - _display_information -> _os_version_build = version_info.dwBuildNumber; - _display_information -> _os_platform_id = version_info.dwPlatformId; - } - // Screen size - _display_width = GetSystemMetrics(SM_CXSCREEN); - _display_height = GetSystemMetrics(SM_CYSCREEN); - - HMODULE power_dll; - - power_dll = LoadLibrary ("PowrProf.dll"); - if (power_dll) { - CallNtPowerInformationFunction = (CallNtPowerInformationType) GetProcAddress (power_dll, "CallNtPowerInformation"); - if (CallNtPowerInformationFunction) { - - _display_information -> _update_cpu_frequency_function = update_cpu_frequency_function; - update_cpu_frequency_function(0, _display_information); - - sprintf (string, "max Mhz %I64d, current Mhz %I64d \n", _display_information -> _maximum_cpu_frequency, _display_information -> _current_cpu_frequency); - - windisplay_cat.info() << string; - } - } - - if (state) { - - } } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/windisplay/winGraphicsPipe.h b/panda/src/windisplay/winGraphicsPipe.h index 56a5d52a89..96bdc0ed2c 100644 --- a/panda/src/windisplay/winGraphicsPipe.h +++ b/panda/src/windisplay/winGraphicsPipe.h @@ -37,6 +37,8 @@ public: WinGraphicsPipe(); virtual ~WinGraphicsPipe(); + virtual void lookup_cpu_data(); + private: HINSTANCE _hUser32; typedef BOOL (WINAPI *PFN_TRACKMOUSEEVENT)(LPTRACKMOUSEEVENT);