Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 18 additions & 10 deletions Client/core/CCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1315,25 +1315,32 @@ bool CCore::IsWindowMinimized()

void CCore::DoPreFramePulse()
{
CLOCK_SET_SECTION("CCore::DoPreFramePulse");
CLOCK1("Total");

TIMING_CHECKPOINT("+CorePreFrame");

if constexpr (bFreezeWatchdogEnabledInCurrentBuild)
UpdateWatchdogHeartbeat();

m_pKeyBinds->DoPreFramePulse();
CLOCK_CALL1(m_pKeyBinds->DoPreFramePulse(););

// Notify the mod manager
m_pModManager->DoPulsePreFrame();
CLOCK_CALL1(m_pModManager->DoPulsePreFrame(););

m_pLocalGUI->DoPulse();
CLOCK_CALL1(m_pLocalGUI->DoPulse(););

CCrashDumpWriter::UpdateCounters();

TIMING_CHECKPOINT("-CorePreFrame");
UNCLOCK1("Total");
}

void CCore::DoPostFramePulse()
{
CLOCK_SET_SECTION("CCore::DoPostFramePulse");
CLOCK1("Total");

TIMING_CHECKPOINT("+CorePostFrame1");
if (m_bQuitOnPulse)
Quit();
Expand Down Expand Up @@ -1441,19 +1448,19 @@ void CCore::DoPostFramePulse()
m_bLastFocused = true;
}

GetJoystickManager()->DoPulse(); // Note: This may indirectly call CMessageLoopHook::ProcessMessage
m_pKeyBinds->DoPostFramePulse();
CLOCK_CALL1(GetJoystickManager()->DoPulse();); // Note: This may indirectly call CMessageLoopHook::ProcessMessage
CLOCK_CALL1(m_pKeyBinds->DoPostFramePulse(););

if (m_pWebCore)
m_pWebCore->DoPulse();
CLOCK_CALL1(m_pWebCore->DoPulse(););

// Notify the mod manager and the connect manager
TIMING_CHECKPOINT("-CorePostFrame1");
m_pModManager->DoPulsePostFrame();
CLOCK_CALL1(m_pModManager->DoPulsePostFrame(););
TIMING_CHECKPOINT("+CorePostFrame2");
GetMemStats()->Draw();
GetGraphStats()->Draw();
m_pConnectManager->DoPulse();
CLOCK_CALL1(GetMemStats()->Draw(););
CLOCK_CALL1(GetGraphStats()->Draw(););
CLOCK_CALL1(m_pConnectManager->DoPulse(););

// Update Discord Rich Presence status
if (const long long ticks = GetTickCount64_(); ticks > m_timeDiscordAppLastUpdate + TIME_DISCORD_UPDATE_RICH_PRESENCE_RATE)
Expand All @@ -1470,6 +1477,7 @@ void CCore::DoPostFramePulse()
}

TIMING_CHECKPOINT("-CorePostFrame2");
UNCLOCK1("Total");
}

// Called after MOD is unloaded
Expand Down
30 changes: 21 additions & 9 deletions Client/core/CModManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,28 +56,39 @@ bool CModManager::TriggerCommand(const char* commandName, size_t commandNameLeng

void CModManager::DoPulsePreFrame()
{
CLOCK_SET_SECTION("CModManager::DoPulsePreFrame");
CLOCK1("Total");

TIMING_GRAPH("+DoPulsePreFrame");
CCore::GetSingleton().GetFPSLimiter()->OnFrameStart(); // Prepare FPS limiting for this frame
CLOCK_CALL1(CCore::GetSingleton().GetFPSLimiter()->OnFrameStart();); // Prepare FPS limiting for this frame

if (m_client)
{
m_client->PreFrameExecutionHandler();
CLOCK_CALL1(m_client->PreFrameExecutionHandler(););
}
TIMING_GRAPH("-DoPulsePreFrame");
UNCLOCK1("Total");
}

void CModManager::DoPulsePreHUDRender(bool bDidUnminimize, bool bDidRecreateRenderTargets)
{
CLOCK_SET_SECTION("CModManager::DoPulsePreHUDRender");
CLOCK1("Total");

TIMING_GRAPH("+DoPulsePreHUDRender");
if (m_client)
{
m_client->PreHUDRenderExecutionHandler(bDidUnminimize, bDidRecreateRenderTargets);
CLOCK_CALL1(m_client->PreHUDRenderExecutionHandler(bDidUnminimize, bDidRecreateRenderTargets););
}
TIMING_GRAPH("-DoPulsePreHUDRender");
UNCLOCK1("Total");
}

void CModManager::DoPulsePostFrame()
{
CLOCK_SET_SECTION("CModManager::DoPulsePostFrame");
CLOCK1("Total");

auto handleStateChange = [&]()
{
if (m_state == State::PendingStart)
Expand All @@ -88,26 +99,27 @@ void CModManager::DoPulsePostFrame()

TIMING_GRAPH("+DoPulsePostFrame");

handleStateChange(); // Handle state changes before pulse
CLOCK_CALL1(handleStateChange();); // Handle state changes before pulse

if (m_client)
{
m_client->PostFrameExecutionHandler();
CLOCK_CALL1(m_client->PostFrameExecutionHandler(););
}
else
{
CCore::GetSingleton().GetNetwork()->DoPulse();
CLOCK_CALL1(CCore::GetSingleton().GetNetwork()->DoPulse(););
}

CCore::GetSingleton().DoReliablePulse(); // Do reliable pulse
CLOCK_CALL1(CCore::GetSingleton().DoReliablePulse();); // Do reliable pulse

handleStateChange(); // Handle state changes after pulse
CLOCK_CALL1(handleStateChange();); // Handle state changes after pulse

// TODO: ENSURE "CModManager::DoPulsePostFrame" IS THE LAST THING BEFORE THE FRAME ENDS
CCore::GetSingleton().GetFPSLimiter()->OnFrameEnd(); // Apply FPS limiting
CLOCK_CALL1(CCore::GetSingleton().GetFPSLimiter()->OnFrameEnd();); // Apply FPS limiting

TIMING_GRAPH("-DoPulsePostFrame");
TIMING_GRAPH("");
UNCLOCK1("Total");
}

bool CModManager::Load(const char* arguments)
Expand Down
24 changes: 20 additions & 4 deletions Client/mods/deathmatch/CClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,36 +202,52 @@ void CClient::ClientShutdown()

void CClient::PreFrameExecutionHandler()
{
CLOCK_SET_SECTION("CClient::PreFrameExecutionHandler");
CLOCK1("Total");

// If the client modification is loaded, pulse it
if (g_pClientGame)
{
g_pClientGame->DoPulsePreFrame();
CLOCK_CALL1(g_pClientGame->DoPulsePreFrame(););
}
UNCLOCK1("Total");
}

void CClient::PreHUDRenderExecutionHandler(bool bDidUnminimize, bool bDidRecreateRenderTargets)
{
CLOCK_SET_SECTION("CClient::PreHUDRenderExecutionHandler");
CLOCK1("Total");

if (g_pClientGame)
{
g_pClientGame->DoPulsePreHUDRender(bDidUnminimize, bDidRecreateRenderTargets);
CLOCK_CALL1(g_pClientGame->DoPulsePreHUDRender(bDidUnminimize, bDidRecreateRenderTargets););
}
UNCLOCK1("Total");
}

void CClient::PostFrameExecutionHandler()
{
CLOCK_SET_SECTION("CClient::PostFrameExecutionHandler");
CLOCK1("Total");

// If the client modification is loaded, pulse it
if (g_pClientGame)
{
g_pClientGame->DoPulsePostFrame();
CLOCK_CALL1(g_pClientGame->DoPulsePostFrame(););
}
UNCLOCK1("Total");
}

void CClient::IdleHandler()
{
CLOCK_SET_SECTION("CClient::IdleHandler");
CLOCK1("Total");

if (g_pClientGame)
{
g_pClientGame->IdleHandler();
CLOCK_CALL1(g_pClientGame->IdleHandler(););
}
UNCLOCK1("Total");
}

bool CClient::WebsiteRequestResultHandler(const std::unordered_set<SString>& newPages)
Expand Down
Loading
Loading