4#include "InspectorGuiHelper.h"
5#include "Services/TaskManager.h"
16void Cogs::Core::taskManagerInspector(Context* context,
bool* show)
19 ImGui::SetNextWindowSize(ImVec2(600, 1000), ImGuiCond_Once);
20 guiBegin(
"Task Manager", show);
22 QueueState queueState;
23 std::vector<QueueWorkerState> workerStates;
25 size_t queueCount = context->taskManager->getQueueCount();
26 for (
size_t q = 0; q < queueCount; q++) {
27 const std::string& name = context->taskManager->getQueueName((TaskQueueId)q).c_str();
29 if (ImGui::CollapsingHeader(name.c_str(), ImGuiTreeNodeFlags_DefaultOpen)) {
32 context->taskManager->getQueueState(queueState, workerStates, (TaskQueueId)q);
34 ImGui::Columns(4, name.c_str());
35 ImGui::Text(
"Worker"); ImGui::NextColumn();
36 ImGui::Text(
"Utilization"); ImGui::NextColumn();
37 ImGui::Text(
"Tasks/s"); ImGui::NextColumn();
38 ImGui::Text(
"Tasks/frame"); ImGui::NextColumn();
41 for (
size_t i = 0; i < workerStates.size(); i++) {
42 const QueueWorkerState& workerState = workerStates[i];
44 ImGui::Text(
"main thread");
47 ImGui::Text(
"worker %zu", i - 1);
50 ImGui::Text(
"%.1f%%", 100.f * workerState.utilization); ImGui::NextColumn();
51 ImGui::Text(
"%.1f", workerState.tasksPerSecond); ImGui::NextColumn();
52 ImGui::Text(
"%.1f", workerState.tasksPerFrame); ImGui::NextColumn();
55 ImGui::Text(
"Total"); ImGui::NextColumn();
56 ImGui::Text(
"%.1f%%", 100.f * queueState.load / (std::max(
size_t(1), workerStates.size() - 1))); ImGui::NextColumn();
57 ImGui::Text(
"%.1f", queueState.tasksPerSecond); ImGui::NextColumn();
58 ImGui::Text(
"%.1f", queueState.tasksPerFrame); ImGui::NextColumn();