<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hox</id>
	<title>Spring - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hox"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Hox"/>
	<updated>2026-11-08T20:28:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetupGuide&amp;diff=16764</id>
		<title>SetupGuide</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetupGuide&amp;diff=16764"/>
		<updated>2017-09-29T20:37:44Z</updated>

		<summary type="html">&lt;p&gt;Hox: /* Linux/Unix Setup Guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Linux/Unix Setup Guide=&lt;br /&gt;
&lt;br /&gt;
{{#css:&lt;br /&gt;
  table.glossy {&lt;br /&gt;
    margin: 4px; padding:10px;&lt;br /&gt;
    border: 1px solid rgba(0,0,0,0.5);&lt;br /&gt;
    border-radius: 10px 10px 10px 10px;&lt;br /&gt;
    box-shadow: 0 2px 6px rgba(0,0,0,0.5), inset 0 1px rgba(255,255,255,0.3), inset 0 10px rgba(255,255,255,0.2), inset 0 10px 20px rgba(255,255,255,0.25), inset 0 -15px 30px rgba(0,0,0,0.3);&lt;br /&gt;
    text-align: center;&lt;br /&gt;
  }&lt;br /&gt;
  /*table.glossy:hover {&lt;br /&gt;
    background: rgba(160,160,220,0.4);&lt;br /&gt;
  }*/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:70%; margin-left:15%; margin-right:15%;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=From Source|link=Build_from_source|icon=Git.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Ubuntu|link=Ubuntu_install|icon=Distributions-ubuntu.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Gentoo|link=Gentoo_install|icon=Distributions-gentoo.png}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Slackware|link=Slackware12_install|icon=Distributions-slackware.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Debian|link=Debian_install|icon=Distributions-debian.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Mandriva|link=Mandriva_install|icon=Distributions-mandriva_linux.png}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=openSUSE|link=openSUSE_install|icon=Distributions-opensuse_linux.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=Fedora|extlink=http://projects.springlobby.info/projects/springlobby/wiki/Install#Fedora-10|icon=Distributions-fedora.png}}&lt;br /&gt;
&lt;br /&gt;
|{{Template:LinuxSetupGuideButton|name=FreeBSD|link=FreeBSD_install|icon=Distributions-freebsd.png}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;float:right&amp;quot;&amp;gt;[[Linux:Packaging | Package Maintainers]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Hox</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Widgets&amp;diff=12518</id>
		<title>Lua Widgets</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Widgets&amp;diff=12518"/>
		<updated>2017-05-21T17:49:53Z</updated>

		<summary type="html">&lt;p&gt;Hox: /* Installing Widgets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===General===&lt;br /&gt;
&#039;&#039;&#039;[[Lua:WidgetDirectory|LuaUI Widget Directory]]&#039;&#039;&#039; -  A list of LuaUI widgets&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Lua_Scripting|Lua Scripting and Development]]&#039;&#039;&#039; -  Look here to get started with making your own Lua widgets and gadgets&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=23 Spring Lua Forum]&#039;&#039;&#039; -  Browse and discuss published widgets, or publish your own&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction:  What&#039;s a &amp;quot;Widget&amp;quot;?===&lt;br /&gt;
LuaUI widgets are files containing Lua code that you can run while playing a Spring game in order to assist you with unit management, provide you with valuable information, or otherwise supplement the basic Spring user interface.  They are easy to install, easy to run and manage ingame, and relatively easy to write should you choose to learn how to do so.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Widgets===&lt;br /&gt;
Widget code and files are quite often released as posts in the &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=23&amp;amp;sid=83343bd3a47bc826fc973e4bd6a15f04 Spring Lua Forum]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
It is also highly recommended that you visit the wiki&#039;s &#039;&#039;&#039;[[Lua:WidgetDirectory|LuaUI Widget Directory]]&#039;&#039;&#039;, which contains a list of many widgets, along with mod compatibility information and possible additional installation instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Installing Widgets===&lt;br /&gt;
Widget files have the extension .lua, but only contain plain text.  To install widgets you&#039;ve downloaded, just move the .lua file to the LuaUI\Widgets folder in your Spring installation directory.  &#039;&#039;&#039;Mods like BA ver&amp;gt;9.47 or Evolution RTS explicitly disable widgets from this path.&#039;&#039;&#039; Please refer to the mod&#039;s manual for details. Sometimes, a widget file may come in a zip archive, or be bundled with other dependent files.  These files will need to be unarchived, then moved to their proper respective folders in the LuaUI folder.  Look for a help or readme file included in the package, or read any installation instructions listed with the widget at the &#039;&#039;&#039;[[Lua:WidgetDirectory|LuaUI Widget Directory]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Using Widgets===&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Before you can use widgets, you MUST make sure that you have checked the &amp;quot;Enable LuaUI widgets&amp;quot; box in [[SpringSettings]].&lt;br /&gt;
&lt;br /&gt;
To list/manage all available widgets, press F11 while ingame.  Each widget is listed by name and sorted alphabetically, and mod included widgets appear first on the list with their names surrounded by asterisks.  You may click on each widget name to enable/disable that widget.  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&#039;&#039;&#039;Green&#039;&#039;&#039;&amp;lt;/font&amp;gt; widgets are currently running, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&#039;&#039;red&#039;&#039;&#039;&amp;lt;/font&amp;gt; widgets are currently disabled and &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;orange&#039;&#039;&#039;&amp;lt;/font&amp;gt; widgets have malfunctioned or turned themselves off.&lt;br /&gt;
&lt;br /&gt;
To rearrange the Lua widgets, press Ctrl-F11 while ingame. To escape Lua tweaking mode, just hit Esc.&lt;br /&gt;
&lt;br /&gt;
In the case that you begin to see Lua errors and/or your user interface inexplicably crashes or becomes &amp;quot;messed up&amp;quot;, you can use the command &#039;&#039;&#039;/luaui reload&#039;&#039;&#039; in order to restart the Lua user interface.  If for any reason you wish to shutdown the Lua user interface while ingame, you may issue the command &#039;&#039;&#039;/luaui disable&#039;&#039;&#039;.&lt;br /&gt;
[[Category: Lua]]&lt;/div&gt;</summary>
		<author><name>Hox</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Engine_Profiling&amp;diff=6372</id>
		<title>Engine Profiling</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Engine_Profiling&amp;diff=6372"/>
		<updated>2017-05-17T22:29:30Z</updated>

		<summary type="html">&lt;p&gt;Hox: /* Engine Profiling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; Engine Profiling&lt;br /&gt;
&lt;br /&gt;
= Engine Profiling =&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
There are several ways to profile an application.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gprof&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The compiler injects special code in the binary that self profiles it when it runs. this is what &amp;lt;code&amp;gt;cmake -DCMAKE_BUILD_TYPE=PROFILING&amp;lt;/code&amp;gt; is here for. We are not going to use this. It does not interfere with normal program&#039;s work-flow. With spring, it gets so slow that it is unusable for profiling anything in late game (which is where it is needed the most). It requires special compiling options.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;oprof&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
OProfile uses statistical sampling. It is a kernel module, which every n clock ticks, registers which function is currently being processed. It is lightweight; it may run with almost 0 performance impact. This method always profiles your profiles your whole system; relevant info has to be filtered out after the profiling run has finished.&lt;br /&gt;
The downside of statistical profiling, is that it requires at least a certain sample size to achieve good accuracy. Also remember, that &#039;&#039;oprof&#039;&#039; still requires the debug symbols, to resolve addresses into function names.&lt;br /&gt;
It can be turned on/off at any time, so for instance, you may skip spring loading so you would only profile in-game runtime. You can also merge multiple profiling sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;perf&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Powerful and lightweight Linux performance profiler based on perf events. Part of linux kernel from version 2.6.31. &lt;br /&gt;
&lt;br /&gt;
=== Setting up &#039;&#039;oprof&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Required stuff:&lt;br /&gt;
* &#039;&#039;oprof&#039;&#039; kernel module&lt;br /&gt;
* &#039;&#039;oprof&#039;&#039; package&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;&#039;oprof&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| Note: Modern CPUs have special statistical sampling timing functions to make profiling with software like &#039;&#039;oprof&#039;&#039; fast.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will have to load the kernel module.&lt;br /&gt;
The profiling daemon is controlled using &#039;&#039;opcontrol&#039;&#039; as root.&lt;br /&gt;
As regular user, you can do post-processing using &#039;&#039;opreport&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended settings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* use a call-graph depth of size 16&lt;br /&gt;
* disable kernel profiling &amp;amp; enable user-space profiling&lt;br /&gt;
* separate each application in its own profile&lt;br /&gt;
* separate each thread in its own profile; you can always merge them later, using &#039;&#039;opreport&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A typical profiling session&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# We need to be root&lt;br /&gt;
su -&lt;br /&gt;
&lt;br /&gt;
# In case the kernel module is not already loaded ...&lt;br /&gt;
modprobe -v oprofile&lt;br /&gt;
&lt;br /&gt;
# This has to be sent only once; it will be saved&lt;br /&gt;
opcontrol --event=CPU_CLK_UNHALTED:1000000:0x0:0:1 \&lt;br /&gt;
          --callgraph=16 \&lt;br /&gt;
          --separate=thread,library \&lt;br /&gt;
          --no-vmlinux&lt;br /&gt;
&lt;br /&gt;
# -- Bring spring into a state where you want to start profiling --&lt;br /&gt;
&lt;br /&gt;
# start the profiler&lt;br /&gt;
opcontrol --start&lt;br /&gt;
&lt;br /&gt;
# -- In spring, do whatever you want to profile --&lt;br /&gt;
&lt;br /&gt;
# stop the profiler&lt;br /&gt;
opcontrol --stop&lt;br /&gt;
&lt;br /&gt;
# in order to make the profile data available to user-space,&lt;br /&gt;
# you have to dump the data&lt;br /&gt;
opcontrol --dump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Post processing &#039;&#039;oprof&#039;&#039; data ===&lt;br /&gt;
&lt;br /&gt;
[[File:Oprof_engine_part.png|710px]]&lt;br /&gt;
&lt;br /&gt;
We will first explain the post processing steps, and then give a script that should work for most general spring profiling tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Extract the data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The data is now stored in &#039;&#039;oprofile&#039;&#039;s cache, and we need to extract the parts of it that we are interested in, and write them to a file.&lt;br /&gt;
With the settings we used above, &#039;&#039;oprofile&#039;&#039; indexes stuff by thread- and process-ID. In order to generate a report, we will have to tell which program, which threads and which sampling sessions to include.&lt;br /&gt;
If you do not care much, you can just merge thread data and sampling data, as we do here too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Converting the data file to a dot-graph file&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/p/jrfonseca/wiki/Gprof2Dot gprof2dot] takes &#039;&#039;oprof&#039;&#039; data and outputs a nice dot-graph. We use it to generate the dot graph out of &#039;&#039;oprofile&#039;&#039;s &amp;lt;code&amp;gt;--callgraph&amp;lt;/code&amp;gt; version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Finalizing (Creating an image out of the graph file)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then you can either use [https://code.google.com/p/jrfonseca/wiki/XDot XDot] to view it directly, or create an image out of the graph file. We will use [http://www.graphviz.org/ GraphViz]&#039;s &#039;&#039;dot&#039;&#039; utility to render to an image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post Processing Script&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
SPRING_INSTALL_PATH=$(dirname $(which spring))&lt;br /&gt;
BIN_ENGINE=${SPRING_INSTALL_PATH}/spring&lt;br /&gt;
BIN_AIS=$(ls ${SPRING_INSTALL_PATH}/AI/Skirmish/*/*/libSkirmishAI.so)&lt;br /&gt;
&lt;br /&gt;
SETTINGS_CREATE_TABLE=0&lt;br /&gt;
SETTINGS_CREATE_CALLGRAPH=1&lt;br /&gt;
SETTINGS_CREATE_PNG=1&lt;br /&gt;
SETTINGS_CREATE_SVG=1&lt;br /&gt;
SETTINGS_CLEANUP=1&lt;br /&gt;
&lt;br /&gt;
function profileBins() {&lt;br /&gt;
	BASE_OUT_FILE_PATH=$1&lt;br /&gt;
	MY_BINARIES=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	# extract relevant oprof data as table&lt;br /&gt;
	if [ ${SETTINGS_CREATE_TABLE} == 1 ]; then&lt;br /&gt;
		opreport \&lt;br /&gt;
				--long-filenames \&lt;br /&gt;
				--demangle=smart \&lt;br /&gt;
				--merge=tid,tgid \&lt;br /&gt;
				--symbols ${MY_BINARIES} \&lt;br /&gt;
				--output-file ${BASE_OUT_FILE_PATH}.txt&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
	if [ ${SETTINGS_CREATE_CALLGRAPH} == 1 ]; then&lt;br /&gt;
		# extract relevant oprof data as callgraph&lt;br /&gt;
		opreport \&lt;br /&gt;
				--long-filenames \&lt;br /&gt;
				--callgraph \&lt;br /&gt;
				--demangle=smart \&lt;br /&gt;
				--merge=tid,tgid \&lt;br /&gt;
				--symbols ${MY_BINARIES} \&lt;br /&gt;
				--output-file ${BASE_OUT_FILE_PATH}.oprof&lt;br /&gt;
&lt;br /&gt;
		# create graph file&lt;br /&gt;
		gprof2dot --format=oprofile --output=${BASE_OUT_FILE_PATH}.dot ${BASE_OUT_FILE_PATH}.oprof&lt;br /&gt;
&lt;br /&gt;
		# create images&lt;br /&gt;
		if [ ${SETTINGS_CREATE_PNG} == 1 ]; then&lt;br /&gt;
			dot -Tpng ${BASE_OUT_FILE_PATH}.dot &amp;gt; ${BASE_OUT_FILE_PATH}.png&lt;br /&gt;
		fi&lt;br /&gt;
		if [ ${SETTINGS_CREATE_SVG} == 1 ]; then&lt;br /&gt;
			dot -Tsvg ${BASE_OUT_FILE_PATH}.dot &amp;gt; ${BASE_OUT_FILE_PATH}.svg&lt;br /&gt;
		fi&lt;br /&gt;
		# ... likewise for other formats&lt;br /&gt;
&lt;br /&gt;
		if [ ${SETTINGS_CLEANUP} == 1 ]; then&lt;br /&gt;
			rm ${BASE_OUT_FILE_PATH}.oprof&lt;br /&gt;
			rm ${BASE_OUT_FILE_PATH}.dot&lt;br /&gt;
		fi&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profileBins ./profiling_engine         &amp;quot;${BIN_ENGINE}&amp;quot;&lt;br /&gt;
profileBins ./profiling_ais            &amp;quot;${BIN_AIS}&amp;quot;&lt;br /&gt;
profileBins ./profiling_engine_and_ais &amp;quot;${BIN_ENGINE} ${BIN_AIS}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
This will leave you with these graph files:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
./profiling_ais.png&lt;br /&gt;
./profiling_ais.svg&lt;br /&gt;
./profiling_engine_and_ais.png&lt;br /&gt;
./profiling_engine_and_ais.svg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;&#039;perf&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For ubuntu install linux-tools-common using apt-get. In fedora the package&#039;s name is perf.&lt;br /&gt;
Make sure &amp;lt;code&amp;gt;/proc/sys/kernel/kptr_restrict&amp;lt;/code&amp;gt; contains value &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Useful commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* perf top - shows statistics in real time&lt;br /&gt;
* perf record - save statistics to file for further insight&lt;br /&gt;
* perf report - read previously generated data&lt;br /&gt;
* perf diff a.data b.data - show differences between two report files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Get data of running spring proccess for 10 seconds. Pay attention to frequency parameter -F. At this rate the output takes about 17 mb of space. Parameter call-graph dwarf unwinds the stack even when frame pointer optimization is on.&lt;br /&gt;
&amp;lt;code&amp;gt;perf record -F 99 -p PID_NUMBER -o my_output1.data --call-graph dwarf sleep 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* Read the report. Press / and type symbol to narrow list to e.g &amp;quot;air&amp;quot;&lt;br /&gt;
&amp;lt;code&amp;gt;perf report -i my_output1.data -g&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  Children      Self  Command  Shared  Symbol                                                                                   &lt;br /&gt;
+  132.33%    29.15%  unknown  spring  [.] CStrafeAirMoveType::Update&lt;br /&gt;
+   71.36%     3.35%  unknown  spring  [.] CStrafeAirMoveType::UpdateFlying&lt;br /&gt;
+   52.01%    32.48%  unknown  spring  [.] CStrafeAirMoveType::UpdateAirPhysics&lt;br /&gt;
+   36.42%     0.00%  unknown  spring  [.] CAirCAI::ExecuteFight&lt;br /&gt;
    34.50%    12.55%  unknown  spring  [.] CommandDrawer::DrawAirCAICommands&lt;br /&gt;
+   32.11%     0.00%  unknown  spring  [.] CStrafeAirMoveType::UpdateLanding&lt;br /&gt;
    26.65%    12.90%  unknown  spring  [.] CGameHelper::GetClosestEnemyAircraft&lt;br /&gt;
    16.73%     0.00%  unknown  spring  [.] CAirCAI::GiveCommandReal&lt;br /&gt;
    15.91%     0.00%  unknown  spring  [.] CStrafeAirMoveType::FindLandingPos&lt;br /&gt;
    15.91%     6.42%  unknown  spring  [.] CStrafeAirMoveType::BrakingDistance&lt;br /&gt;
     9.82%     0.00%  unknown  spring  [.] CAirCAI::AirAutoGenerateTarget&lt;br /&gt;
     9.82%     0.00%  unknown  spring  [.] CAirCAI::SlowUpdate&lt;br /&gt;
     3.28%     0.00%  unknown  spring  [.] CAirCAI::ExecuteMove&lt;br /&gt;
     3.26%     0.00%  unknown  spring  [.] CStrafeAirMoveType::HandleCollisions&lt;br /&gt;
     3.17%     3.17%  unknown  spring  [.] AAirMoveType::UseSmoothMesh                                                &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flamegraph&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;perf script -i a.data | ./stackcollapse-perf.pl &amp;gt; out.perf-folded&amp;lt;/code&amp;gt; - convert perf stacks data to text representation&lt;br /&gt;
* &amp;lt;code&amp;gt;./flamegraph.pl out.perf-folded &amp;gt; my_idle_air.svg&amp;lt;/code&amp;gt; - create flamegraph from perf data&lt;br /&gt;
or&lt;br /&gt;
* &amp;lt;code&amp;gt;grep -i air out.perf-folded | ./flamegraph.pl &amp;gt; my_idle_air.svg&amp;lt;/code&amp;gt; - same as above, but it ignores stacks that do not contain &amp;quot;air&amp;quot; in symbol names&lt;br /&gt;
&lt;br /&gt;
[[File:flamegraph-grepped-example.png|flamegraph-grepped-example.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://perf.wiki.kernel.org/index.php/Tutorial perf kernel wiki tutorial]&lt;br /&gt;
&lt;br /&gt;
[http://www.brendangregg.com/perf.html perf examples by Brendan Gregg]&lt;br /&gt;
&lt;br /&gt;
[https://eclipse.org/linuxtools/projectPages/perf/ Eclipse perf plugin]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/brendangregg/FlameGraph Flamegraph]&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Please add&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Engine Dev]]&lt;/div&gt;</summary>
		<author><name>Hox</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Flamegraph-grepped-example.png&amp;diff=21738</id>
		<title>File:Flamegraph-grepped-example.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Flamegraph-grepped-example.png&amp;diff=21738"/>
		<updated>2017-05-17T22:24:32Z</updated>

		<summary type="html">&lt;p&gt;Hox: Grepped flamegraph.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Grepped flamegraph.&lt;/div&gt;</summary>
		<author><name>Hox</name></author>
	</entry>
</feed>