Adds ability to monitor current CPU speed.
MONITOR=cpu.speed
This will become more useful as the monitoring code becomes threaded allowing in-run probing.
MONITOR=cpu.speed
This will become more useful as the monitoring code becomes threaded allowing in-run probing.
Code:
diff --git a/pts-core/functions/pts-functions.php b/pts-core/functions/pts-functions.php index 71f7a85..5510b74 100644 --- a/pts-core/functions/pts-functions.php +++ b/pts-core/functions/pts-functions.php @@ -33,7 +33,7 @@ function pts_directory() if(substr($dir, -1) != '/') $dir .= '/'; } - + return $dir; } @@ -112,6 +112,7 @@ if(($to_show = getenv("MONITOR"))) $monitor_temp = in_array("all.temp", $to_show) || $monitor_all; $monitor_power = in_array("all.power", $to_show) || $monitor_all; $monitor_voltage = in_array("all.voltage", $to_show) || $monitor_all; + $monitor_speed = in_array("all.speed", $to_show) || $monitor_all; define("PTS_START_TIME", time()); if(in_array("gpu.temp", $to_show) || $monitor_temp) @@ -120,22 +121,22 @@ if(($to_show = getenv("MONITOR"))) $GPU_TEMPERATURE = array(); } if(in_array("cpu.temp", $to_show) || $monitor_temp) - { + { define("MONITOR_CPU_TEMP", 1); $CPU_TEMPERATURE = array(); } if(in_array("sys.temp", $to_show) || $monitor_temp) - { + { define("MONITOR_SYS_TEMP", 1); $SYS_TEMPERATURE = array(); } if(in_array("battery.power", $to_show) || $monitor_power) - { + { define("MONITOR_BATTERY_POWER", 1); $BATTERY_POWER = array(); } if(in_array("cpu.voltage", $to_show) || $monitor_voltage) - { + { define("MONITOR_CPU_VOLTAGE", 1); $CPU_VOLTAGE = array(); } @@ -146,16 +147,22 @@ if(($to_show = getenv("MONITOR"))) } if(in_array("v5.voltage", $to_show) || $monitor_voltage) { - + define("MONITOR_V5_VOLTAGE", 1); $V5_VOLTAGE = array(); } if(in_array("v12.voltage", $to_show) || $monitor_voltage) { - + define("MONITOR_V12_VOLTAGE", 1); $V12_VOLTAGE = array(); } + if(in_array("cpu.speed", $to_show) || $monitor_speed) + { + + define("MONITOR_CPU_SPEED", 1); + $CPU_SPEED = array(); + } register_shutdown_function("pts_monitor_statistics"); } @@ -294,7 +301,7 @@ function pts_save_result($save_to = null, $save_results = null) if(!is_file($save_to_dir . "/pts-results-viewer.xsl") && !is_link($save_to_dir . "/pts-results-viewer.xsl")) link(SAVE_RESULTS_DIR . "pts-results-viewer/pts-results-viewer.xsl", $save_to_dir . "/pts-results-viewer.xsl"); - + if($save_to == null || $save_results == null) $bool = true; else @@ -600,7 +607,7 @@ function pts_version_comparable($old, $new) if($old[0] != $new[0] || $old[1] != $new[1]) $compare = false; - return $compare; + return $compare; } function pts_beep($times = 1) { diff --git a/pts-core/functions/pts-functions_monitor.php b/pts-core/functions/pts-functions_monitor.php index 5b96546..aa92fbc 100644 --- a/pts-core/functions/pts-functions_monitor.php +++ b/pts-core/functions/pts-functions_monitor.php @@ -26,10 +26,12 @@ function pts_monitor_update() pts_record_v5_voltage(); if(defined("MONITOR_V12_VOLTAGE")) pts_record_v12_voltage(); + if(defined("MONITOR_CPU_SPEED")) + pts_record_cpu_speed(); } function pts_monitor_arguments() { - return array("all", "all.temp", "all.power", "all.voltage", "gpu.temp", "cpu.temp", "sys.temp", "battery.power", "cpu.voltage", "v3.voltage", "v5.voltage", "v12.voltage"); + return array("all", "all.temp", "all.power", "all.voltage", "all.speed", "gpu.temp", "cpu.temp", "sys.temp", "battery.power", "cpu.voltage", "v3.voltage", "v5.voltage", "v12.voltage", "cpu.speed"); } function pts_monitor_statistics() { @@ -46,6 +48,7 @@ function pts_monitor_statistics() $type_index["THERMAL"] = array(); $type_index["POWER"] = array(); $type_index["VOLTAGE"] = array(); + $type_index["SPEED"] = array(); if(isset($GLOBALS["GPU_TEMPERATURE"])) { @@ -151,6 +154,19 @@ function pts_monitor_statistics() array_push($type_index["VOLTAGE"], count($m_array) - 1); } } + if(isset($GLOBALS["CPU_SPEED"])) + { + $this_array = $GLOBALS["CPU_SPEED"]; + + if(is_array($this_array) && !empty($this_array[0])) + { + array_push($device, "CPU"); + array_push($type, "Speed"); + array_push($unit, "MHz"); + array_push($m_array, $this_array); + array_push($type_index["SPEED"], count($m_array) - 1); + } + } $info_report = ""; diff --git a/pts-core/functions/pts-functions_system_cpu.php b/pts-core/functions/pts-functions_system_cpu.php index 263f2f6..ff33a45 100644 --- a/pts-core/functions/pts-functions_system_cpu.php +++ b/pts-core/functions/pts-functions_system_cpu.php @@ -125,6 +125,30 @@ function processor_temperature() return $temp_c; } +function current_processor_frequency($cpu_core = 0) +{ + + if(is_file("/sys/devices/system/cpu/cpu" . $cpu_core . "/cpufreq/scaling_max_freq")) // The ideal way, with modern CPUs using CnQ or EIST and cpuinfo reporting the current +{ + $info = trim(file_get_contents("/sys/devices/system/cpu/cpu" . $cpu_core . "/cpufreq/scaling_cur_freq")); + $info = pts_trim_double(intval($info) / 1000, 2); +} + else if(is_file("/proc/cpuinfo")) // fall back for those without cpufreq +{ + $cpu_speeds = read_cpuinfo("cpu MHz"); + + if(count($cpu_speeds) > $cpu_core) + $info = $cpu_speeds[$cpu_core]; + else + $info = $cpu_speeds[0]; + + $info = pts_trim_double(intval($info), 2); +} + else + $info = 0; + + return $info; +} function pts_record_cpu_temperature() { global $CPU_TEMPERATURE; @@ -133,6 +157,14 @@ function pts_record_cpu_temperature() if($temp != -1) array_push($CPU_TEMPERATURE, $temp); } +function pts_record_cpu_speed() +{ + global $CPU_SPEED; + $speed = current_processor_frequency(); + + if($speed != -1) + array_push($CPU_SPEED, $speed); +} function pts_processor_power_savings_enabled() { $return_string = "";