mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
Add OS version and more CPU frequency info.
This commit is contained in:
parent
70768a6f9b
commit
3e3f394930
@ -22,17 +22,34 @@
|
||||
#include "dtool_config.h"
|
||||
|
||||
#include "psapi.h"
|
||||
#include "powrprof.h"
|
||||
|
||||
TypeHandle WinGraphicsPipe::_type_handle;
|
||||
|
||||
#define MAXIMUM_PROCESSORS 32
|
||||
|
||||
typedef struct _PROCESSOR_POWER_INFORMATION
|
||||
{
|
||||
ULONG Number;
|
||||
ULONG MaxMhz;
|
||||
ULONG CurrentMhz;
|
||||
ULONG MhzLimit;
|
||||
ULONG MaxIdleState;
|
||||
ULONG CurrentIdleState;
|
||||
}
|
||||
PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
|
||||
|
||||
typedef BOOL (WINAPI *GetProcessMemoryInfoType) (HANDLE Process, PROCESS_MEMORY_COUNTERS *ppsmemCounters, DWORD cb);
|
||||
typedef BOOL (WINAPI *GlobalMemoryStatusExType) (LPMEMORYSTATUSEX lpBuffer);
|
||||
typedef long (__stdcall *CallNtPowerInformationType) (POWER_INFORMATION_LEVEL information_level, PVOID InputBuffer, ULONG InputBufferLength, PVOID OutputBuffer, ULONG OutputBufferLength);
|
||||
|
||||
static int initialize = false;
|
||||
static HMODULE psapi_dll = 0;
|
||||
static HMODULE kernel32_dll = 0;
|
||||
static HMODULE power_dll = 0;
|
||||
static GetProcessMemoryInfoType GetProcessMemoryInfoFunction = 0;
|
||||
static GlobalMemoryStatusExType GlobalMemoryStatusExFunction = 0;
|
||||
static CallNtPowerInformationType CallNtPowerInformationFunction = 0;
|
||||
|
||||
void get_memory_information (DisplayInformation *display_information)
|
||||
{
|
||||
@ -641,6 +658,62 @@ int initialize_cpu_id (CPU_ID *cpu_id) {
|
||||
return state;
|
||||
}
|
||||
|
||||
int update_cpu_frequency_function (int processor_number, DisplayInformation *display_information)
|
||||
{
|
||||
int update;
|
||||
|
||||
update = false;
|
||||
display_information -> _maximum_cpu_frequency = 0;
|
||||
display_information -> _current_cpu_frequency = 0;
|
||||
|
||||
if (CallNtPowerInformationFunction) {
|
||||
|
||||
int i;
|
||||
PVOID input_buffer;
|
||||
PVOID output_buffer;
|
||||
ULONG input_buffer_size;
|
||||
ULONG output_buffer_size;
|
||||
POWER_INFORMATION_LEVEL information_level;
|
||||
PROCESSOR_POWER_INFORMATION *processor_power_information;
|
||||
PROCESSOR_POWER_INFORMATION processor_power_information_array [MAXIMUM_PROCESSORS];
|
||||
|
||||
memset (processor_power_information_array, 0, sizeof (PROCESSOR_POWER_INFORMATION) * MAXIMUM_PROCESSORS);
|
||||
|
||||
processor_power_information = processor_power_information_array;
|
||||
for (i = 0; i < MAXIMUM_PROCESSORS; i++) {
|
||||
processor_power_information -> Number = 0xFFFFFFFF;
|
||||
processor_power_information++;
|
||||
}
|
||||
|
||||
information_level = ProcessorInformation;
|
||||
input_buffer = NULL;
|
||||
output_buffer = processor_power_information_array;
|
||||
input_buffer_size = 0;
|
||||
output_buffer_size = sizeof (PROCESSOR_POWER_INFORMATION) * MAXIMUM_PROCESSORS;
|
||||
if (CallNtPowerInformationFunction (information_level, input_buffer, input_buffer_size, output_buffer, output_buffer_size) == 0) {
|
||||
processor_power_information = processor_power_information_array;
|
||||
for (i = 0; i < MAXIMUM_PROCESSORS; i++) {
|
||||
if (processor_power_information -> Number == processor_number) {
|
||||
PN_uint64 value;
|
||||
|
||||
value = processor_power_information -> MaxMhz;
|
||||
display_information -> _maximum_cpu_frequency = value * 1000000;
|
||||
|
||||
value = processor_power_information -> CurrentMhz;
|
||||
display_information -> _current_cpu_frequency = value * 1000000;
|
||||
update = true;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
processor_power_information++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return update;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: WinGraphicsPipe::Constructor
|
||||
// Access: Public
|
||||
@ -782,6 +855,36 @@ WinGraphicsPipe() {
|
||||
|
||||
windisplay_cat.info() << "end CPU ID\n";
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user