diff --git a/src/hud_elements.cpp b/src/hud_elements.cpp index c05fbfa2..6abb331d 100644 --- a/src/hud_elements.cpp +++ b/src/hud_elements.cpp @@ -348,10 +348,50 @@ void HudElements::cpu_stats(){ } } + +static float get_core_load_stat(void*,int); +static float get_core_load_stat(void *data, int idx){ + return ((CPUStats *)data)->GetCPUData().at(idx).percent; +} + void HudElements::core_load(){ - if (HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_core_load]){ - for (const CPUData &cpuData : cpuStats.GetCPUData()) - { + if (!HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_core_load]) + return; + + if (HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_core_bars]){ + ImguiNextColumnFirstItem(); + ImGui::PushFont(HUDElements.sw_stats->font1); + if (!HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_horizontal] && !HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_hud_compact]){ + ImGui::Dummy(ImVec2(0.0f, real_font_size.y)); + HUDElements.TextColored(HUDElements.colors.cpu, "CPU Cores"); + ImGui::TableSetColumnIndex(ImGui::TableGetColumnCount() - 1); + ImGui::Dummy(ImVec2(0.0f, real_font_size.y)); + ImguiNextColumnFirstItem(); + } + char hash[40]; + snprintf(hash, sizeof(hash), "##%s", overlay_param_names[OVERLAY_PARAM_ENABLED_core_bars]); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); + float width, height = 0; + if (HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_horizontal]){ + width = 150; + height = HUDElements.params->font_size; + } else { + width = ImGui::GetWindowContentRegionWidth(); + height = 50; + } + + if (ImGui::BeginChild("core_bars_window", ImVec2(width, height))) { + ImGui::PlotHistogram(hash, get_core_load_stat, &cpuStats, + cpuStats.GetCPUData().size(), 0, + NULL, 0.0, 100.0, + ImVec2(width, height)); + } + ImGui::EndChild(); + ImGui::PopFont(); + ImGui::PopStyleColor(); + } else { + for (const CPUData &cpuData : cpuStats.GetCPUData()) + { ImguiNextColumnFirstItem(); HUDElements.TextColored(HUDElements.colors.cpu, "CPU"); ImGui::SameLine(0, 1.0f); @@ -386,7 +426,7 @@ void HudElements::core_load(){ ImGui::PushFont(HUDElements.sw_stats->font1); HUDElements.TextColored(HUDElements.colors.text, "MHz"); ImGui::PopFont(); - } + } } } diff --git a/src/overlay_params.cpp b/src/overlay_params.cpp index 17128fa5..ac0d934f 100644 --- a/src/overlay_params.cpp +++ b/src/overlay_params.cpp @@ -591,6 +591,7 @@ parse_overlay_env(struct overlay_params *params, params->enabled[OVERLAY_PARAM_ENABLED_engine_short_names] = 0; params->enabled[OVERLAY_PARAM_ENABLED_dynamic_frame_timing] = 0; params->enabled[OVERLAY_PARAM_ENABLED_temp_fahrenheit] = 0; + params->enabled[OVERLAY_PARAM_ENABLED_core_bars] = false; } #define OVERLAY_PARAM_BOOL(name) \ if (!strcmp(#name, key)) { \ @@ -616,6 +617,7 @@ static void set_param_defaults(struct overlay_params *params){ params->enabled[OVERLAY_PARAM_ENABLED_fps] = true; params->enabled[OVERLAY_PARAM_ENABLED_frame_timing] = true; params->enabled[OVERLAY_PARAM_ENABLED_core_load] = false; + params->enabled[OVERLAY_PARAM_ENABLED_core_bars] = false; params->enabled[OVERLAY_PARAM_ENABLED_cpu_temp] = false; params->enabled[OVERLAY_PARAM_ENABLED_cpu_power] = false; params->enabled[OVERLAY_PARAM_ENABLED_gpu_temp] = false; @@ -787,6 +789,7 @@ parse_overlay_config(struct overlay_params *params, params->enabled[OVERLAY_PARAM_ENABLED_dynamic_frame_timing] = 0; params->enabled[OVERLAY_PARAM_ENABLED_temp_fahrenheit] = 0; params->enabled[OVERLAY_PARAM_ENABLED_duration] = false; + params->enabled[OVERLAY_PARAM_ENABLED_core_bars] = false; params->options.erase("full"); } for (auto& it : params->options) { diff --git a/src/overlay_params.h b/src/overlay_params.h index 313d0766..582b4450 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -29,6 +29,7 @@ typedef unsigned long KeySym; OVERLAY_PARAM_BOOL(fps) \ OVERLAY_PARAM_BOOL(frame_timing) \ OVERLAY_PARAM_BOOL(core_load) \ + OVERLAY_PARAM_BOOL(core_bars) \ OVERLAY_PARAM_BOOL(cpu_temp) \ OVERLAY_PARAM_BOOL(cpu_power) \ OVERLAY_PARAM_BOOL(gpu_temp) \