ArmaScriptProfiler: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (removed broken file link)
m (Text replacement - "<code>" to "<code style="display: block">")
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{toclimit|limit=3}}
{{TOC|side||3}}
 
== General ==
==General==


Arma Script Profiler is a Mod that provides the ability to profile [[Scheduler|unscheduled]] SQF Scripts just like how [[Performance_Profiling]] does it for Engine internals.<br>
Arma Script Profiler is a Mod that provides the ability to profile [[Scheduler|unscheduled]] SQF Scripts just like how [[Performance_Profiling]] does it for Engine internals.<br>


Once you Capture a Frame the data is put into your Clipboard. To display it properly you need the [[Performance_Profiling#Versions_with_performance_profiling|Profiling build]] of Arma.<br>
Once you Capture a Frame the data is put into your Clipboard. To display it properly you need the [[Performance_Profiling#Versions with performance profiling|Profiling build]] of Arma.<br>
When one or multiple Frames were Captured it automatically opens the captureFrame UI and you have to click on "PASTE ALL" to paste your clipboard content and display the data.<br>
When one or multiple Frames were Captured it automatically opens the captureFrame UI and you have to click on "PASTE ALL" to paste your clipboard content and display the data.


Image:ArmaScriptProfiler_profilerLogExample.png
{{Clear}}
== Commands ==


==Commands==
<section begin=Commands />
<div class="_description cmd">
<div class="_description cmd">


Line 33: Line 31:


<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>private _scope = createProfileScope "testScope";</code>[[File:ArmaScriptProfiler_profilerLogExample.png|thumb|example output]]</dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">private _scope = createProfileScope "testScope";</code><!--[[File:ArmaScriptProfiler_profilerLogExample.png|thumb|example output]]--></dd>
</dl>
</dl>


Line 75: Line 73:


<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>profilerCaptureFrame</code></dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">profilerCaptureFrame</code></dd>
</dl>
</dl>
<h4>Additional Information</h4>
<h4>Additional Information</h4>
Line 105: Line 103:


<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>profilerCaptureFrames 10;</code></dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">profilerCaptureFrames 10;</code></dd>
</dl>
</dl>
<h4>Additional Information</h4>
<h4>Additional Information</h4>
Line 136: Line 134:


<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>profilerCaptureSlowFrame 2;</code></dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">profilerCaptureSlowFrame 2;</code></dd>
</dl>
</dl>
<h4>Additional Information</h4>
<h4>Additional Information</h4>
Line 190: Line 188:
<dd>  
<dd>  
Adds a log message to the current Scope.
Adds a log message to the current Scope.
[[File:ArmaScriptProfiler_profilerLogExample.png|thumb|profilerLog example output]]
<!--[[File:ArmaScriptProfiler_profilerLogExample.png|thumb|profilerLog example output]]-->
</dd>
</dd>
</dl>
</dl>
Line 204: Line 202:
</dl>
</dl>
<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>profilerLog "testLog";</code></dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">profilerLog "testLog";</code></dd>
</dl>
</dl>


Line 223: Line 221:
<dt>Parameters:</dt>
<dt>Parameters:</dt>
<dd class="param">code: [[Code]] - Your code to run</dd>
<dd class="param">code: [[Code]] - Your code to run</dd>
<dd class="param">arguments: [[Any]] - The arguments passed in _this (Warning: This overwrites your _this in your current scope</dd>
<dd class="param">arguments: [[Anything]] - The arguments passed in _this (Warning: This overwrites your _this in your current scope</dd>
<dd class="param">runs: [[Number]] - Number of runs to do (Default: 10000)</dd>
<dd class="param">runs: [[Number]] - Number of runs to do (Default: 10000)</dd>
<dt>Return Value:</dt>
<dt>Return Value:</dt>
Line 229: Line 227:
</dl>
</dl>
<h4>Examples</h4>
<h4>Examples</h4>
<dl><dt>Example 1:</dt><dd class="example"><code>profileScript [{_a = 1 + 2 + 3}];</code></dd>
<dl><dt>Example 1:</dt><dd class="example"><code style="display: block">profileScript [{_a = 1 + 2 + 3}];</code></dd>
</dl>
</dl>


</div>




</div>
[[Category:Community Tools]]
<section end=Commands />

Latest revision as of 11:52, 11 January 2023

General

Arma Script Profiler is a Mod that provides the ability to profile unscheduled SQF Scripts just like how Performance_Profiling does it for Engine internals.

Once you Capture a Frame the data is put into your Clipboard. To display it properly you need the Profiling build of Arma.
When one or multiple Frames were Captured it automatically opens the captureFrame UI and you have to click on "PASTE ALL" to paste your clipboard content and display the data.

Commands

createProfileScope

Description:
This creates a new scope. Store it in a a private local variable. Don't store it in a Global Variable!

Syntax

Syntax:
createProfileScope scopeName
Parameters:
scopeName : String - The name of your scope. This will be displayed in the output.
Return Value:
ProfileScope - a proprietary variable Type. This value going out of scope defines the end of the current Scope. So you have to store the result in a local variable.

Examples

Example 1:
private _scope = createProfileScope "testScope";



profilerBlockingSleep

Description:
This freezes the engine for 17ms. Used for testing.

Syntax

Syntax:
profilerBlockingSleep
Return Value:
Nothing



profilerCaptureFrame

Description:
Captures the next Frame.

Syntax

Syntax:
profilerCaptureFrame
Return Value:
Nothing

Examples

Example 1:
profilerCaptureFrame

Additional Information

See also:
diag_captureFrame



profilerCaptureFrames

Description:
Captures N Frames.

Syntax

Syntax:
profilerCaptureFrames NumberOfFrames
Parameters:
NumberOfFrames : Number - The Number of Frames to capture.
Return Value:
ProfileScope - a proprietary variable Type. This value going out of scope defines the end of the current Scope. So you have to store the result in a local variable.

Examples

Example 1:
profilerCaptureFrames 10;

Additional Information

See also:
diag_captureFrame



profilerCaptureSlowFrame

Description:
Captures the first frame that hits the threshold.
The runtime of all scripts in the current Frame are summed up. And if they hit the threshold it triggers a Capture.

Syntax

Syntax:
profilerCaptureSlowFrame threshold
Parameters:
threshold : Number - Threshold in milliseconds
Return Value:
Nothing

Examples

Example 1:
profilerCaptureSlowFrame 2;

Additional Information

See also:
diag_captureSlowFrame



profilerCaptureTrigger

Description:
Captures the first frame that contains a Trigger.

Syntax

Syntax:
profilerCaptureTrigger
Return Value:
Nothing



profilerTrigger

Description:
A Trigger for profilerCaptureTrigger.

Syntax

Syntax:
profilerTrigger
Return Value:
Nothing



profilerLog

Description:
Adds a log message to the current Scope.

Syntax

Syntax:
profilerLog message
Parameters:
message : String - The message to add.
Return Value:
Nothing

Examples

Example 1:
profilerLog "testLog";

profileScript

Description:
A more precise alternative to diag_codePerformance.
This outputs the results as double precision microseconds without any rounding. And it doesn't check for a timeout.
Meaning this WILL freeze your game if you go overboard with it. And it also works in MP.

Syntax

Syntax:
profileScript [code, arguments, runs]
Parameters:
code: Code - Your code to run
arguments: Anything - The arguments passed in _this (Warning: This overwrites your _this in your current scope
runs: Number - Number of runs to do (Default: 10000)
Return Value:
[Execution time per run in microseconds as Number, Execution time per run in microseconds as String, number of runs]

Examples

Example 1:
profileScript [{_a = 1 + 2 + 3}];