MaNGusT wrote:Will it be easy or just not that hard to implement ready to use libs as Ogre3d engine does?
CEGUI is in Debian and MXE (though both somewhat outdated), I think it's the only option if we don't want to make our 3rdparty directory larger. It has also been around for quite a while (so is unlikely to be abandoned soon), and its features and tool support look good (on paper/screen).Per wrote:Also I have little idea which of them would be a good fit for us. It would need to be easily multiplatform, and work well with SDL and Qt.
wuz21m wrote:You see these rotating models "Angry Python with Guns" on the Manufacture Menu? The matrix model is transformed, the model is actually redrawn every frame. The font rendering code? It transforms the code into UCS4, picks the glyphs (and measures the length), transforms the view matrix and renders the damn thing every frame (thus I get ~16% CPU usage just staring at the title screen). A correct approach should just use a texture and then re-use it every frame.
google profiler tools
I think the CPU usage stats we get from Valgrind are on track
$ pprof --text src/warzone2100 /tmp/mybin.prof
Using local file src/warzone2100.
Using local file /tmp/mybin.prof.
Removing __funlockfile from all stack traces.
Total: 2231 samples
893 40.0% 40.0% 893 40.0% __memset_sse2
155 6.9% 47.0% 155 6.9% _init@750
131 5.9% 52.8% 131 5.9% _init@38f98
117 5.2% 58.1% 117 5.2% __ioctl
101 4.5% 62.6% 101 4.5% __driDriverGetExtensions_i965
33 1.5% 64.1% 33 1.5% drm_intel_bufmgr_fake_init
31 1.4% 65.5% 31 1.4% inflateBackEnd
26 1.2% 66.7% 26 1.2% tx_compress_dxtn
21 0.9% 67.6% 21 0.9% png_set_read_user_transform_fn
18 0.8% 68.4% 19 0.9% atmosUpdateSystem
17 0.8% 69.2% 17 0.8% edgeLessThan
16 0.7% 69.9% 16 0.7% __driDriverGetExtensions_i915
16 0.7% 70.6% 16 0.7% __fsync_nocancel
16 0.7% 71.3% 27 1.2% drawTerrain
15 0.7% 72.0% 15 0.7% __GI___poll
15 0.7% 72.7% 15 0.7% __GI___pthread_mutex_lock
14 0.6% 73.3% 14 0.6% __memcpy_avx_unaligned
13 0.6% 73.9% 15 0.7% atmosDrawParticles
10 0.4% 74.3% 27 1.2% locateMouse
wuz21m wrote:I have read on the forums that plans were underway to port WZ2100 to QT 5. I know we are already using QT 5 to build Warzone2100.
I know that we are using QT 5 extensively and a map editor is already using QT 5.
But what about the game frontend and in-game widgets? My searches didn't turn up any conclusive results. The current solution performs many re-draws and is probably a major performance bottleneck. Are there any plans in place to do something about this?
- For graphics engine optimizations, you'd better look for another thread; a lot of such discussions were happening in ArtRevolution threads, and in fact a lot of new optimizations were already introduced in -master. Also, you may want to synchronize your performance analysis with .
- Ah, valgrind. It introduces a huge overhead, but then works around it; numbers it displays are not exactly time, but rather number of emulated processor instructions, though it's still pretty accurate. Things to be aware of:
- It doesn't take sleep times into account, which means that you really don't know the absolute CPU usage values for the functions you found. It may be "10% of almost-nothing", and after adding 10-20 units on the board it may reduce to a negligible 1%. In any case, it is much more relevant to collect profile performance-critical situations, like with 1500 units on board (the limit we say to support in a 10-player game), especially when it comes to tools that discard sleep time, like valgrind or perf (in its out-of-the-box variant).
- Time-based application logic may be scewed by the large overhead. Performance statistics for the game running @60fps and @3fps are completely different, even if the same things are happening. It might be that console redraws (or anything else) happen at game frame rather than at render frame.
- As far as i remember, there was a way to arbitrary enable and disable collecting statistics (not instrumentation, of course) in valgrind to avoid mixing in statistics from the start menu, not sure if you used it.
# /usr/share/dtrace/toolkit/procsystime -n warzone2100
Tracing... Hit Ctrl-C to end...
dtrace: 12797 dynamic variable drops with non-empty dirty list
dtrace: 13867 dynamic variable drops with non-empty dirty list
Elapsed Times for processes warzone2100,
SYSCALL TIME (ns)
The game parameter requires one of the following keywords:CAM_1A, CAM_2A, CAM_3A, TUTORIAL3, or FASTPLAY.
root@System-Product-Name:/home/test/war-test# src/warzone2100 --game TUTORIAL3
Unrecognized option: TUTORIAL3
perf record -F 99 -p 16323 -g -- sleep 60
perf script | ./stackcollapse-perf.pl > out.perf-folded
./flamegraph.pl out.perf-folded > perf.svg