feat: add an in-game performance panel (#1090)

Add in-game performance panel

Co-authored-by: nmzik <Nmzik@mail.ru>
This commit is contained in:
Juan Pablo Fariasandnmzik authored and GitHub committed 2026-10-17 14:47:51 +02:00
1 parent 415387f00d
commit 6aa3846fb2
35 files changed
+1788 -34

No files matched your search

@@ -1,5 +1,6 @@
#include "common/assert.h"
#include "common/common.h"
#include "common/debugCounters.h"
#include "common/emulatorConfig.h"
#include "common/logging/log.h"
#include "common/profiler.h"
@@ -10,6 +11,7 @@
#include "graphics/host_gpu/renderer/render.h"
#include "graphics/host_gpu/renderer/renderContext.h"
#include "graphics/host_gpu/vulkanCommon.h"
#include "graphics/presentation/performanceOverlay.h"
#include "graphics/presentation/presenter.h"
#include "graphics/presentation/systemOverlay.h"
#include "graphics/presentation/videoOut.h"
@@ -324,6 +326,7 @@ struct Presenter::Impl {
void RecoverSwapchain(Swapchain::Status status) {
LOGF("Recovering Vulkan swapchain%s\n",
status == Swapchain::Status::SurfaceLost ? " and surface" : "");
Common::DebugCounters::Add(Common::DebugCounters::Counter::SwapchainRecreations);
swapchain.Recreate(status == Swapchain::Status::SurfaceLost);
frames.SetFormat(swapchain.Format());
}
@@ -1039,8 +1042,8 @@ void Presenter::Impl::Present() {
// present_mutex owns the prepared frames and this scheduler. Only queue submission
// is shared with rendering, and it has its own queue_mutex.
auto& command = present_scheduler.BeginCommand();
const bool draw_system_overlay =
overlay_visual.active && swapchain.PrepareSystemOverlay();
const bool draw_system_overlay = (overlay_visual.active || PerformanceOverlayEnabled()) &&
swapchain.PrepareSystemOverlay();
swapchain.RecordPresentCommands(command, layers[0].frame, layers[1],
draw_system_overlay);
const auto tick = swapchain.Submit(present_scheduler);
@@ -1060,6 +1063,7 @@ void Presenter::Impl::Present() {
return;
}
LOGF("Vulkan presentation retry exhausted; dropping frame\n");
Common::DebugCounters::Add(Common::DebugCounters::Counter::DroppedPresents);
}
void Presenter::Discard(Frame& frame) {