Skip to content

Commit 4bf5801

Browse files
committed
Performance tweaks for CEF AJAX
1 parent 2646504 commit 4bf5801

File tree

6 files changed

+24
-7
lines changed

6 files changed

+24
-7
lines changed

Client/cefweb/CAjaxResourceHandler.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ CAjaxResourceHandler::~CAjaxResourceHandler()
2727
m_callback = nullptr;
2828
}
2929

30-
void CAjaxResourceHandler::SetResponse(const std::string& data)
30+
void CAjaxResourceHandler::SetResponse(std::string data)
3131
{
3232
// Prevent response corruption: ignore subsequent calls after data is set
3333
if (m_bHasData) [[unlikely]]
3434
return;
3535

36-
m_strResponse = data;
36+
m_strResponse = std::move(data);
3737
m_bHasData = true;
3838

3939
if (!m_callback)
@@ -72,14 +72,17 @@ void CAjaxResourceHandler::GetResponseHeaders(CefRefPtr<CefResponse> response, i
7272

7373
bool CAjaxResourceHandler::ProcessRequest([[maybe_unused]] CefRefPtr<CefRequest> request, CefRefPtr<CefCallback> callback)
7474
{
75+
if (!callback)
76+
return false;
77+
7578
// Store callback so SetResponse can resume once data is ready
7679
m_callback = callback;
7780

7881
// Do not call Continue() yet; SetResponse triggers it after data is prepared
7982
return true;
8083
}
8184

82-
bool CAjaxResourceHandler::ReadResponse(void* data_out, int bytes_to_read, int& bytes_read, CefRefPtr<CefCallback> callback)
85+
bool CAjaxResourceHandler::ReadResponse(void* data_out, int bytes_to_read, int& bytes_read, [[maybe_unused]] CefRefPtr<CefCallback> callback)
8386
{
8487
// Validate input parameters first
8588
if (!data_out || bytes_to_read <= 0) [[unlikely]]

Client/cefweb/CAjaxResourceHandler.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <core/CAjaxResourceHandlerInterface.h>
1414
#include <cef3/cef/include/cef_resource_handler.h>
1515
#include <SString.h>
16+
#include <string>
1617

1718
class CWebView;
1819

@@ -24,7 +25,7 @@ class CAjaxResourceHandler : public CefResourceHandler, public CAjaxResourceHand
2425

2526
std::vector<std::string>& GetGetData() override { return m_vecGetData; }
2627
std::vector<std::string>& GetPostData() override { return m_vecPostData; }
27-
void SetResponse(const std::string& data) override;
28+
void SetResponse(std::string data) override;
2829

2930
// CefResourceHandler
3031
virtual void Cancel() override;

Client/cefweb/CWebApp.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,10 @@ CefRefPtr<CefResourceHandler> CWebApp::Create(CefRefPtr<CefBrowser> browser, Cef
201201
vecTmp.reserve(8); // Reserve space for common query parameter count
202202
strGet.Split("&", vecTmp);
203203

204+
const size_t paramCount = vecTmp.size();
205+
if (paramCount > 0)
206+
vecGet.reserve(vecGet.size() + paramCount * 2);
207+
204208
SString key;
205209
SString value;
206210
for (auto&& param : vecTmp)
@@ -239,6 +243,10 @@ CefRefPtr<CefResourceHandler> CWebApp::Create(CefRefPtr<CefBrowser> browser, Cef
239243
vecTmp.reserve(8);
240244
postParam.Split("&", vecTmp);
241245

246+
const size_t postParamCount = vecTmp.size();
247+
if (postParamCount > 0)
248+
vecPost.reserve(vecPost.size() + postParamCount * 2);
249+
242250
for (auto&& param : vecTmp)
243251
{
244252
param.Split("=", &key, &value);

Client/mods/deathmatch/logic/CClientWebBrowser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,9 @@ void CClientWebBrowser::Events_OnAjaxRequest(CAjaxResourceHandlerInterface* pHan
328328
return;
329329
}
330330

331-
auto callback = callbackMapEntry->second;
331+
auto& callback = callbackMapEntry->second;
332332
std::string result = callback(pHandler->GetGetData(), pHandler->GetPostData());
333-
pHandler->SetResponse(result);
333+
pHandler->SetResponse(std::move(result));
334334
}
335335

336336
void CClientWebBrowser::Events_OnConsoleMessage(const std::string& message, const std::string& source, int line, std::int16_t level)

Client/sdk/core/CAjaxResourceHandlerInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ class CAjaxResourceHandlerInterface
1818
public:
1919
virtual std::vector<std::string>& GetGetData() = 0;
2020
virtual std::vector<std::string>& GetPostData() = 0;
21-
virtual void SetResponse(const std::string& data) = 0;
21+
virtual void SetResponse(std::string data) = 0;
2222
};

Client/sdk/core/CWebViewInterface.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
*
99
*****************************************************************************/
1010
#pragma once
11+
12+
#include <functional>
13+
#include <string>
14+
#include <vector>
15+
1116
#include "CWebCoreInterface.h"
1217

1318
class CWebBrowserEventsInterface;

0 commit comments

Comments
 (0)