Skip to content

Commit bd24ea1

Browse files
committed
Make NetworkProfiler callstack optional
1 parent 4499154 commit bd24ea1

File tree

3 files changed

+56
-47
lines changed

3 files changed

+56
-47
lines changed

src/NetworkProfiler.cpp

Lines changed: 54 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ClassEntrySizeCounter : public param_archive_entry {
1717
uint64_t* sizeCounter;
1818
ClassEntrySizeCounter* parent = nullptr;
1919
std::vector<ClassEntrySizeCounter*> activeSubs;
20-
std::string* data;
20+
std::string* data = nullptr;
2121

2222
ClassEntrySizeCounter(r_string name_, uint64_t* size) : sizeCounter(size) {
2323
*sizeCounter += name_.length();
@@ -34,6 +34,10 @@ class ClassEntrySizeCounter : public param_archive_entry {
3434
ClassEntrySizeCounter(r_string name_, ClassEntrySizeCounter* parent_) : sizeCounter(parent_->sizeCounter), parent(parent_), data(parent_->data) {
3535
*sizeCounter += name_.length();
3636
parent->activeSubs.push_back(this);
37+
if (data) {
38+
*data += name_;
39+
data->push_back('/');
40+
}
3741
};
3842

3943
//! virtual destructor
@@ -178,10 +182,9 @@ class ClassEntrySizeCounter : public param_archive_entry {
178182
void NetworkProfiler::init() {
179183
auto iface = client::host::request_plugin_interface("BIDebugEngine_getCallstack", 1);
180184
if (!iface) {
181-
diag_log("ASP: Network statistics failed to enable because ArmaDebugEngine is missing"sv);
182-
return;
183-
}
184-
getCallstackRaw = reinterpret_cast<decltype(getCallstackRaw)>(*iface);
185+
diag_log("ASP: Network statistics ArmaDebugEngine not present, you won't get callstacks"sv);
186+
} else
187+
getCallstackRaw = reinterpret_cast<decltype(getCallstackRaw)>(*iface);
185188

186189
static auto _pubVar = client::host::register_sqf_command("publicVariable", "Profiler redirect", [](game_state& gs, game_value_parameter arg) -> game_value {
187190
static tracy::SourceLocationData info {
@@ -191,7 +194,8 @@ void NetworkProfiler::init() {
191194
0
192195
};
193196
static int64_t publicVarSize;
194-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
197+
auto_array<std::pair<r_string, uint32_t>> callstack;
198+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
195199

196200
r_string varName = arg;
197201
auto varValue = sqf::get_variable(sqf::current_namespace(), varName);
@@ -200,8 +204,8 @@ void NetworkProfiler::init() {
200204
publicVarSize += getVariableSize(varValue, logPacketContent ? &data : nullptr);
201205
publicVarSize += varName.size();
202206

203-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
204-
AdapterTracy::sendCallstack(callstack);
207+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
208+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
205209
if (logPacketContent)
206210
zone.Text(data.c_str(), data.size());
207211
else
@@ -222,7 +226,8 @@ void NetworkProfiler::init() {
222226
0
223227
};
224228
static int64_t publicVarSize;
225-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
229+
auto_array<std::pair<r_string, uint32_t>> callstack;
230+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
226231

227232
r_string varName = arg;
228233
auto varValue = sqf::get_variable(sqf::current_namespace(), varName);
@@ -232,8 +237,8 @@ void NetworkProfiler::init() {
232237
publicVarSize += varName.size();
233238
publicVarSize += 4; //clientID
234239

235-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
236-
AdapterTracy::sendCallstack(callstack);
240+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
241+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
237242
if (logPacketContent)
238243
zone.Text(data.c_str(), data.size());
239244
else
@@ -254,7 +259,8 @@ void NetworkProfiler::init() {
254259
0
255260
};
256261
static int64_t publicVarSize;
257-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
262+
auto_array<std::pair<r_string, uint32_t>> callstack;
263+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
258264

259265
r_string varName = arg;
260266
auto varValue = sqf::get_variable(sqf::current_namespace(), varName);
@@ -263,8 +269,8 @@ void NetworkProfiler::init() {
263269
publicVarSize += getVariableSize(varValue, logPacketContent ? &data : nullptr);
264270
publicVarSize += varName.size();
265271

266-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
267-
AdapterTracy::sendCallstack(callstack);
272+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
273+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
268274
if (logPacketContent)
269275
zone.Text(data.c_str(), data.size());
270276
else
@@ -284,15 +290,16 @@ void NetworkProfiler::init() {
284290
"",
285291
0
286292
};
287-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
293+
auto_array<std::pair<r_string, uint32_t>> callstack;
294+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
288295

289296
std::string data;
290297
remoteExecSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
291298

292299
r_string name = arg[0];
293300

294-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
295-
AdapterTracy::sendCallstack(callstack);
301+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
302+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
296303
if (logPacketContent)
297304
zone.Text(data.c_str(), data.size());
298305
else
@@ -310,16 +317,17 @@ void NetworkProfiler::init() {
310317
"",
311318
0
312319
};
313-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
320+
auto_array<std::pair<r_string, uint32_t>> callstack;
321+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
314322

315323
std::string data;
316324
remoteExecSize += getVariableSize(par, logPacketContent ? &data : nullptr);
317325
remoteExecSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
318326

319327
r_string name = arg[0];
320328

321-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
322-
AdapterTracy::sendCallstack(callstack);
329+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
330+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
323331
if (logPacketContent)
324332
zone.Text(data.c_str(), data.size());
325333
else
@@ -336,15 +344,16 @@ void NetworkProfiler::init() {
336344
"",
337345
0
338346
};
339-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
347+
auto_array<std::pair<r_string, uint32_t>> callstack;
348+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
340349

341350
std::string data;
342351
remoteExecSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
343352

344353
r_string name = arg[0];
345354

346-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
347-
AdapterTracy::sendCallstack(callstack);
355+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
356+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
348357
if (logPacketContent)
349358
zone.Text(data.c_str(), data.size());
350359
else
@@ -363,16 +372,17 @@ void NetworkProfiler::init() {
363372
0
364373
};
365374

366-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
375+
auto_array<std::pair<r_string, uint32_t>> callstack;
376+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
367377

368378
std::string data;
369379
remoteExecSize += getVariableSize(par, logPacketContent ? &data : nullptr);
370380
remoteExecSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
371381

372382
r_string name = arg[0];
373383

374-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
375-
AdapterTracy::sendCallstack(callstack);
384+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
385+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
376386
if (logPacketContent)
377387
zone.Text(data.c_str(), data.size());
378388
else
@@ -393,16 +403,17 @@ void NetworkProfiler::init() {
393403
if (arg.size() != 3 || arg[2].type_enum() != game_data_type::BOOL || !static_cast<bool>(arg[2]))
394404
return host::functions.invoke_raw_binary(__sqf::binary__setvariable__object__array__ret__nothing, par, arg);
395405

396-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
406+
auto_array<std::pair<r_string, uint32_t>> callstack;
407+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
397408

398409
std::string data;
399410
setVariableSize += getVariableSize(par, logPacketContent ? &data : nullptr);
400411
setVariableSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
401412

402413
r_string name = arg[0];
403414

404-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
405-
AdapterTracy::sendCallstack(callstack);
415+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
416+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
406417
if (logPacketContent)
407418
zone.Text(data.c_str(), data.size());
408419
else
@@ -423,16 +434,17 @@ void NetworkProfiler::init() {
423434
if (arg.size() != 3 || arg[2].type_enum() != game_data_type::BOOL || !static_cast<bool>(arg[2]))
424435
return host::functions.invoke_raw_binary(__sqf::binary__setvariable__namespace__array__ret__nothing, par, arg);
425436

426-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
437+
auto_array<std::pair<r_string, uint32_t>> callstack;
438+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
427439

428440
std::string data;
429441
setVariableSize += getVariableSize(par, logPacketContent ? &data : nullptr);
430442
setVariableSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
431443

432444
r_string name = arg[0];
433445

434-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
435-
AdapterTracy::sendCallstack(callstack);
446+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
447+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
436448
if (logPacketContent)
437449
zone.Text(data.c_str(), data.size());
438450
else
@@ -453,16 +465,17 @@ void NetworkProfiler::init() {
453465
if (arg.size() != 3 || arg[2].type_enum() != game_data_type::BOOL || !static_cast<bool>(arg[2]))
454466
return host::functions.invoke_raw_binary(__sqf::binary__setvariable__location__array__ret__nothing, par, arg);
455467

456-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
468+
auto_array<std::pair<r_string, uint32_t>> callstack;
469+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
457470

458471
std::string data;
459472
setVariableSize += getVariableSize(par, logPacketContent ? &data : nullptr);
460473
setVariableSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
461474

462475
r_string name = arg[0];
463476

464-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
465-
AdapterTracy::sendCallstack(callstack);
477+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
478+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
466479
if (logPacketContent)
467480
zone.Text(data.c_str(), data.size());
468481
else
@@ -483,16 +496,17 @@ void NetworkProfiler::init() {
483496
if (arg.size() != 3 || arg[2].type_enum() != game_data_type::BOOL || !static_cast<bool>(arg[2]))
484497
return host::functions.invoke_raw_binary(__sqf::binary__setvariable__group__array__ret__nothing, par, arg);
485498

486-
auto callstack = NetworkProfiler::getCallstackRaw(&gs);
499+
auto_array<std::pair<r_string, uint32_t>> callstack;
500+
if (getCallstackRaw) callstack = getCallstackRaw(&gs);
487501

488502
std::string data;
489503
setVariableSize += getVariableSize(par, logPacketContent ? &data : nullptr);
490504
setVariableSize += getVariableSize(arg, logPacketContent ? &data : nullptr);
491505

492506
r_string name = arg[0];
493507

494-
tracy::ScopedZone zone(&info, tracy::t_withCallstack{});
495-
AdapterTracy::sendCallstack(callstack);
508+
tracy::ScopedZone zone(&info, tracy::t_withCallstack{ getCallstackRaw != nullptr });
509+
if (getCallstackRaw) AdapterTracy::sendCallstack(callstack);
496510
if (logPacketContent)
497511
zone.Text(data.c_str(), data.size());
498512
else
@@ -506,15 +520,10 @@ void NetworkProfiler::init() {
506520
uint32_t NetworkProfiler::getVariableSize(const game_value& var, std::string* data) {
507521
auto ncnst = const_cast<game_value&>(var);
508522
uint64_t size = 0;
509-
if (data) {
510-
param_archive ar(rv_allocator<ClassEntrySizeCounter>::create_single(""sv, &size, data));
511523

512-
(&ncnst)->serialize(ar);
513-
} else {
514-
param_archive ar(rv_allocator<ClassEntrySizeCounter>::create_single(""sv, &size));
524+
param_archive ar(rv_allocator<ClassEntrySizeCounter>::create_single(""sv, &size, data));
515525

516-
(&ncnst)->serialize(ar);
517-
}
526+
(&ncnst)->serialize(ar);
518527

519528
return size;
520529
}

src/scriptProfiler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,7 @@ void scriptProfiler::preStart() {
12921292
}, game_data_type::STRING, game_data_type::STRING);
12931293
}
12941294

1295-
if (getCommandLineParam("-profilerNetwork"sv)) {
1295+
if (getCommandLineParam("-profilerEnableNetwork"sv)) {
12961296
if (std::dynamic_pointer_cast<AdapterTracy>(GProfilerAdapter)) {
12971297
diag_log("ASP: Network statistics enabled"sv);
12981298
GNetworkProfiler.init();

tracy

Submodule tracy updated from c65f9fb to 55a2208

0 commit comments

Comments
 (0)