|
Improving Performance on a Pi 3 |
Kelly Corcoran
Member #16,776
December 2017
|
I'm working on a project that involves drawing backgrounds (small images drawn with al_draw_scaled_bitmap() to fill a 1366x768 monitor) and some text. Animation may follow in the future, but that's a task for another day. For context, this Raspberry Pi 3 is the logic controller for a custom pinball machine. Physical devices and lights are handled by a trio of Teensy 3.5 boards. My system ignores them if they are not attached at boot time, so they should not be affecting performance. I realize that the Pi is no hardcore gaming device, but I feel that I must be missing some details. Simply drawing a couple of bitmaps - each no more than 1/6 the size of the screen - can drag the frame rate down to 15-20 FPS. It won't make it unplayable, given the real-life physics engine and the peripheral boards' quick reflex times, but it will make the visual experience rather sluggish. Any overhead from the rest of the system seems to be negligible, as the frame rate is excellent when only drawing a line or two of small text. Does anyone have thoughts on how I can improve the frame rate of my rather simple graphics rendering?
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
A couple of guesses. If you load and unload resources on every frame, this will kill the frame rate. Also, if you're unintentionally using memory bitmaps, this will kill the frame rate too. Show some code, at least your main loop drawing and logic. My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Kelly Corcoran
Member #16,776
December 2017
|
Ahh yes, post code. By this point I really should remember these things. I'll go with background drawing, as this alone can easily bring down the frame rate. Backgrounds are encapsulated in a Background class that tracks the bitmap (resource managed by the Bitmap class): 1struct Bitmap
2{
3 ALLEGRO_BITMAP* Map;
4 ~Bitmap(void);
5 int Width;
6 int Height;
7 void draw(float posX, float posY, float cx = 0.f, float cy = 0.f, float angle = 0.f);
8 void drawCenter(float posX, float posY, float angle = 0.f);
9};
10
11struct Background
12{
13 Background(Bitmap* bmap);
14 void draw(void);
15 float PosX;
16 float PosY;
17 float Scale;
18 float Alpha;
19 Bitmap* Map;
20 bool Visible;
21};
Bitmap* objects are created at start and kept in memory for the rest of the session. Their draw functions are used for sprites but not backgrounds so I won't flood the post with the bitmap draw functions unless needed. Background draw function, called once per frame: 1
2void Background::draw(void)
3{
4 float posX = PosX - float(Map->Width / 2) * Scale;
5 al_draw_tinted_scaled_bitmap(Map->Map, al_map_rgba_f(Alpha, Alpha, Alpha, 1.f), 0, 0, Map->Width, Map->Height, posX, PosY, float(Map->Width) * Scale, float(Map->Height) * Scale, 0);
6}
Presumably the most relevant code portion is the frame start and end functions, called once each per frame: 1void Engine::frameStart(void)
2{
3 al_clear_to_color(al_map_rgb(0,0,0));
4
5// This loop here is where the backgrounds are drawn. Currently there are 2 defined, 1 visible at a time.
6 for(auto it = Backgrounds.begin(); it != Backgrounds.end(); ++it)
7 {
8 Background* b = *it;
9 if(b->Visible) b->draw();
10 }
11 for(auto it = Panels.begin(); it != Panels.end(); ++it)
12 {
13 Panel* p = *it;
14 if(p->Visible) p->draw();
15 }
16}
17
18void Engine::frameEnd(float timeDelta)
19{
20 for(size_t i = 0; i < MESSAGE_LINES; ++i)
21 {
22 if(!ScreenText[i].empty())
23 {
24 al_draw_text(Font, al_map_rgb(255, 255, 255), TEXT_POS_X + TextOffset, 504 + (i * 50), ALLEGRO_ALIGN_LEFT, ScreenText[i].data());
25 }
26 }
27 for(auto it = Texts.begin(); it != Texts.end(); ++it)
28 {
29 Text* t = *it;
30 if(t->Visible) t->draw(timeDelta);
31 }
32 if(DebugStr.size() > 0)
33 {
34 al_draw_text(Font, al_map_rgb(255, 255, 255), 10, 10, ALLEGRO_ALIGN_LEFT, DebugStr.data());
35 }
36 al_flip_display();
37}
In case it's relevant, here's the main loop, with the bottom 1/4 being dedicated to calling the graphics engine functions: 1 float timeDelta = 16.6667f;
2 struct timespec rqStart, rqEnd;
3 clock_gettime(CLOCK_REALTIME, &rqStart);
4
5 while(1)
6 {
7 tsGeneral.update(timeDelta);
8 bool running = tsDisplay.update(timeDelta);
9 tsGame.update(timeDelta);
10 clock_gettime(CLOCK_REALTIME, &rqEnd);
11
12 long long startStamp = rqStart.tv_nsec / 1000;
13 long long endStamp = rqEnd.tv_nsec / 1000;
14 startStamp += rqStart.tv_sec * 1000000;
15 endStamp += rqEnd.tv_sec * 1000000;
16 // Stamps now contain microsecond time stamps
17
18 double diff = double(endStamp - startStamp) * 0.001; // diff now contains frame time in ms
19 timeDelta = diff;
20 time_step = diff * 0.01;
21
22 // Messed up timeDelta becomes zero, and don't compensate more than 1 second
23 if(timeDelta <= 0.f) timeDelta = 0.f;
24 if(timeDelta > 1000.f) timeDelta = 1000.f;
25
26 engine->frameStart();
27 battle.update(time_step);
28
29 clock_gettime(CLOCK_REALTIME, &rqStart);
30 battle.drawFrame();
31 updateDevices(timeDelta);
32 engine->frameEnd(timeDelta);
33 }
(If anyone wants frame-time delta calculation, feel free to lift from this code sample; timeDelta seems to be calculated very accurately.) If any more code is needed, ask away and I will post.
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
Okay, why don't you show where you create the display and load or create your resources. My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Chris Katko
Member #1,881
January 2002
|
We should put together a FAQ because what Edgar said, I basically say to almost every post now. "Is it slow?" (check the above) "Is it crashing?" "Make sure to check ALL Allegro function return values for null. Images fail to load. Loading images or using al_map_rgb before Allegro was initialized, like in a constructor. (etc)" As I've mentioned on other threads: If you know how to run a profiler for your compiler (it's really simple), it'll tell us a ton of information. It tells you what functions the majority of the time of your program is spent. [edit] One thing to side note is, if you don't "need" to blank the screen (because you draw graphics over all of it), don't blank it. It's relatively slow, especially on slower systems. al_clear_to_color(al_map_rgb(0,0,0)); Other than that though, I really don't see anything striking me as slow. The clue could be in the setup code like Edgar asked for. -----sig: |
Kelly Corcoran
Member #16,776
December 2017
|
Here's the engine initialization code: 1int Engine::configure(void)
2{
3 if(!al_init()) return 1;
4
5 #ifndef DEBUGMODE
6 al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
7 #endif // DEBUGMODE
8 Display = al_create_display(SCREEN_WIDTH, SCREEN_HEIGHT);
9 if(!Display) return 2;
10 if(!al_install_audio()) return 3;
11 if(!al_init_acodec_addon()) return 4;
12 if(!al_init_image_addon()) return 5;
13 if(!al_init_primitives_addon()) return 6;
14 al_restore_default_mixer();
15
16 Font = createFont("underfont-large.tga", 32, 126);
17 FontScore = createFontBig("bigfont.tga");
18 FontScoreSmall = createFontBig("bigfont2.tga");
19
20 TextOffset = 0.f;
21 al_hide_mouse_cursor(Display);
22
23 return 0;
24}
The function always completes successfully. I thought I posted the code for loading the bitmaps, but apparently I missed it. 1Bitmap* Engine::createBitmap(const char* source)
2{
3 ALLEGRO_BITMAP* Map = al_load_bitmap(source);
4 if(!Map){ DebugStr = "Couldn't load "; DebugStr += source;}
5 Bitmap* result = new Bitmap;
6 result->Map = Map;
7 Bitmaps.push_back(result);
8 if(Map)
9 {
10 result->Width = al_get_bitmap_width(Map);
11 result->Height = al_get_bitmap_height(Map);
12 }
13 return result;
14}
I will do some profiling on the system as soon as I get around to it. Tried it on the desktop with apparently negligible CPU time on everything - but then, that's the desktop, arguably more of a beast than the Pi. Except for scenes with a background, most of the graphics will appear over a black background, and I assume that al_clear_to_color() is the easiest way to accomplish this.
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
So far I don't see anything wrong, except for a little weirdness where you initialize the addons after creating a display. Just odd to me, probably doesn't matter. What I need to see is where you actually call those functions from, like createBitmap. How many do you load how often? Show the loading code. And where and when do you call engine::configure? My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Kelly Corcoran
Member #16,776
December 2017
|
Interesting - I did not realize the addons are usually loaded first. Worth experimenting. The resources are loaded once from the loadResource() function. To save space, I've removed some from this example, mostly sounds. 1void loadResources(void)
2{
3 sndKnocking = engine->createSound("Sounds/knocking.wav");
4 sndMenuHighlight = engine->createSound("Sounds/menuhilite.wav");
5 sndMenuSelect = engine->createSound("Sounds/menuselect.wav");
6
7 bmpHeart = engine->createBitmap("heart.tga");
8 bmpInfo = engine->createBitmap("infostrip.bmp");
9 bmpHeartGib = engine->createBitmap("heart_gib.tga");
10 bmpHeartBroken = engine->createBitmap("heart_broken.tga");
11 bmStory[0] = engine->createBitmap("story1.bmp");
12 bmStory[1] = engine->createBitmap("story2.bmp");
13 bmStory[2] = engine->createBitmap("story3.bmp");
14 bmStory[3] = engine->createBitmap("story4.bmp");
15 bmStory[4] = engine->createBitmap("story5.bmp");
16 bmStory[5] = engine->createBitmap("story6.bmp");
17 bmStory[6] = engine->createBitmap("story7.bmp");
18 bmStory[7] = engine->createBitmap("story8.bmp");
19 bmStory[8] = engine->createBitmap("story9.bmp");
20 bgStory = engine->createBackground(bmStory[0]);
21
22 panHeart = engine->createPanel(bmpHeart);
23 panInfo = engine->createPanel(bmpInfo);
24 panInfo->PosY = 720;
25
26 txtBonusValue = engine->createText(2);
27 txtBonusValue->Align = ALLEGRO_ALIGN_CENTER;
28 txtBonusValue->PosX = SCREEN_WIDTH / 2;
29 txtBonusValue->PosY = 400;
30
31 for(int i = 0; i < MAX_PLAYERS; ++i)
32 {
33 txtScore[i] = engine->createText(1);
34 txtScore[i]->Align = ALLEGRO_ALIGN_CENTER;
35 }
36
37}
Main function, from which the loading and configuration are done: 1int main()
2{
3 engine = new Engine;
4 if(engine->Failed) return engine->Failed;
5
6 sndText1 = engine->createSound("text.wav");
7 bgBattle = engine->createBackground("battlebg2.bmp");
8 bmapRaspberry = engine->createBitmap("raspberry.tga");
9 panRaspberry = engine->createPanel(bmapRaspberry);
10 panRaspberry->PosY = 300;
11
12 loadResources();
13
14// ... Snip .... Device setup code skipped for space
15
16 float timeDelta = 16.6667f;
17 struct timespec rqStart, rqEnd;
18 clock_gettime(CLOCK_REALTIME, &rqStart);
19
20 while(1)
21 {
22 tsGeneral.update(timeDelta);
23 bool running = tsDisplay.update(timeDelta);
24 if(!running) break;
25 tsGame.update(timeDelta);
26 clock_gettime(CLOCK_REALTIME, &rqEnd);
27
28 long long startStamp = rqStart.tv_nsec / 1000;
29 long long endStamp = rqEnd.tv_nsec / 1000;
30 startStamp += rqStart.tv_sec * 1000000;
31 endStamp += rqEnd.tv_sec * 1000000;
32 // Stamps now contain microsecond time stamps
33
34 double diff = double(endStamp - startStamp) * 0.001; // diff now contains frame time in ms
35 timeDelta = diff;
36 time_step = diff * 0.01;
37
38 // Messed up timeDelta becomes zero, and don't compensate more than 1 second
39 if(timeDelta <= 0.f) timeDelta = 0.f;
40 if(timeDelta > 1000.f) timeDelta = 1000.f;
41
42 engine->frameStart();
43 battle.update(time_step);
44
45 clock_gettime(CLOCK_REALTIME, &rqStart);
46 battle.drawFrame();
47 updateDevices(timeDelta);
48 engine->frameEnd(timeDelta);
49 }
50 delete engine;
51 return 0;
52}
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
Okay, I don't see you call Engine::configure anywhere in main - do you do it in the constructor? Where is that called? My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Kelly Corcoran
Member #16,776
December 2017
|
I'm almost wondering if I should just post a zip file of all my source code so I don't miss anything. 1Engine::Engine(void)
2{
3 Display = nullptr;
4 for(size_t i = 0; i < SOUND_CHANNELS; ++i) LastSound[i] = nullptr;
5 Failed = configure();
6}
(Honestly I'll do it if there's any demand for it. I don't mind sharing the source for this not-for-profit hobby project.)
|
Chris Katko
Member #1,881
January 2002
|
Just post it then. It's not that big a deal. But I still think running a profile pass will tell you exactly where it's slowing down. If it's a Raspberry Pi only "bug"/"issue" we'll have to test on one to find the issue. But usually, it's not a specific-branch issue. Since you're on the PI, you know Linux which is a great plus. Profiling is easy. The super easiest way is to simply run gdb ./your_program. And then in the terminal with gdb, pressing control-C, notice where the function is, and then type "continue" to continue the program. Then do it again over and over noticing which functions come up most often. You can type bt (or stack, I can't remember) to get a backtrace and see the full function stack at the moment of pausing. But the most often functions that come up... are statistically the slowest. https://stackoverflow.com/questions/375913/how-can-i-profile-c-code-running-in-linux To do it with a proper GNU profiling tool, add -pg to your compile command in GCC/G++. Then use gprof to look at the profile output. Also, Valgrind is amazing but requires you to install it with apt-get. It has very detailed profiling and memory loss information. Because it runs a virtual CPU it has tons of detailed info (even cache hits/misses) but it's at least 10x slower (which is fine in many programs for occasional testing). All of the techniques I mentioned are detailed in that link. And here's a gprof tutorial which the first link doesn't have: http://www.thegeekstuff.com/2012/08/gprof-tutorial/ Basically, if you post your code, the first thing I'm gonna do is profile it. Also, make sure to include data if the program needs bitmaps to run. Otherwise, we'll have to find and make bitmaps that work for it, and your problem may even be directly related to the specific files (and our new files might not expose the problem). [edit] I just found out Clang doesn't support gprof. Wtf? Valgrind still worked fine though. Clang does support this newer "profile guided optimization" but that's a different tool for a different job. -----sig: |
Kelly Corcoran
Member #16,776
December 2017
|
Ask and ye shall receive. (Did the forum eat my attachment? If so, try this Dropbox share link.) I actually ran Valgrind once to find a bizarre memory corruption issue in this project, which indeed I was able to fix with its help. The attached archive contains all the source code, Code::Blocks project file, and art/sound resources being used. (Contains a very small subset of the original game's soundtrack... sorry Toby Fox, plz don't sue me) The program will demo the initial startup sequence, the start-of-game sequence, score display, and end-of-ball bonus. For testing purposes, the program will exit when the task scheduler is empty, so drop a return(0); somewhere in the storyTick function (for instance) if you don't want to wait for the whole thing to complete. Thanks so much for the help - that's amazing. I'll keep poking at it from here too.
|
Chris Katko
Member #1,881
January 2002
|
I just ran a quick run. It's spending a ton of time in audio. But perhaps it's just because it runs for a long time? It also reports a thing called <cycle 3> not sure what it is. Hmm. A quick google says it's related to recursion that Callgrind can't detect. The majority of time is spent in recursion in the underpin program code. My laptop is about dead I'll look at it more when I can. 25% of all time was in that <cycle 3> area, and 18% in read_to_mixer_linear_float_32 from liballegro. [edit] I just tested on one of my own older C++ programs. I also get a <cycle> so disregard that now. There may be some flag tweaking that can correct it. I notice you don't have an FPS counter (do you?) anywhere in the program. It'd be really funny if your program was running full speed but your delays were the reason it ran slow... [edit] HOLY CRAP. Valgrind with memory leak detection exploooooddesss. 1==13192== Memcheck, a memory error detector
2==13192== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
3==13192== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
4==13192== Command: ./underpin
5==13192== Parent PID: 10448
6==13192==
7--13192--
8--13192-- Valgrind options:
9--13192-- --leak-check=full
10--13192-- --show-leak-kinds=all
11--13192-- --track-origins=yes
12--13192-- --verbose
13--13192-- --log-file=valgrind-out.txt
14--13192-- Contents of /proc/version:
15--13192-- Linux version 4.10.0-041000-generic (kernel@gloin) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #201702191831 SMP Sun Feb 19 23:33:19 UTC 2017
16--13192--
17--13192-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3
18--13192-- Page sizes: currently 4096, max supported 4096
19--13192-- Valgrind library directory: /usr/lib/valgrind
20--13192-- Reading syms from /home/novous/Desktop/dev6/underpin-data/underpin
21--13192-- Reading syms from /lib/x86_64-linux-gnu/ld-2.23.so
22--13192-- Considering /lib/x86_64-linux-gnu/ld-2.23.so ..
23--13192-- .. CRC mismatch (computed 9bc477cd wanted 3da2f12a)
24--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.23.so ..
25--13192-- .. CRC is valid
26--13192-- Reading syms from /usr/lib/valgrind/memcheck-amd64-linux
27--13192-- Considering /usr/lib/valgrind/memcheck-amd64-linux ..
28--13192-- .. CRC mismatch (computed eea41ea9 wanted 2009db78)
29--13192-- object doesn't have a symbol table
30--13192-- object doesn't have a dynamic symbol table
31--13192-- Scheduler: using generic scheduler lock implementation.
32--13192-- Reading suppressions file: /usr/lib/valgrind/default.supp
33==13192== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-13192-by-novous-on-???
34==13192== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-13192-by-novous-on-???
35==13192== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-13192-by-novous-on-???
36==13192==
37==13192== TO CONTROL THIS PROCESS USING vgdb (which you probably
38==13192== don't want to do, unless you know exactly what you're doing,
39==13192== or are doing some strange experiment):
40==13192== /usr/lib/valgrind/../../bin/vgdb --pid=13192 ...command...
41==13192==
42==13192== TO DEBUG THIS PROCESS USING GDB: start GDB like this
43==13192== /path/to/gdb ./underpin
44==13192== and then give GDB the following command
45==13192== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=13192
46==13192== --pid is optional if only one valgrind process is running
47==13192==
48--13192-- REDIR: 0x401cf90 (ld-linux-x86-64.so.2:strlen) redirected to 0x3809e181 (???)
49--13192-- Reading syms from /usr/lib/valgrind/vgpreload_core-amd64-linux.so
50--13192-- Considering /usr/lib/valgrind/vgpreload_core-amd64-linux.so ..
51--13192-- .. CRC mismatch (computed 2567ccf6 wanted 49420590)
52--13192-- object doesn't have a symbol table
53--13192-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
54--13192-- Considering /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so ..
55--13192-- .. CRC mismatch (computed 0e27c9a8 wanted ac585421)
56--13192-- object doesn't have a symbol table
57==13192== WARNING: new redirection conflicts with existing -- ignoring it
58--13192-- old: 0x0401cf90 (strlen ) R-> (0000.0) 0x3809e181 ???
59--13192-- new: 0x0401cf90 (strlen ) R-> (2007.0) 0x04c31020 strlen
60--13192-- REDIR: 0x401b8e0 (ld-linux-x86-64.so.2:index) redirected to 0x4c30bc0 (index)
61--13192-- REDIR: 0x401bb00 (ld-linux-x86-64.so.2:strcmp) redirected to 0x4c320d0 (strcmp)
62--13192-- REDIR: 0x401dcf0 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4c35270 (mempcpy)
63--13192-- Reading syms from /lib/x86_64-linux-gnu/libusb-0.1.so.4.4.4
64--13192-- object doesn't have a symbol table
65--13192-- Reading syms from /usr/local/lib/liballegro.so.5.2.2
66--13192-- Reading syms from /usr/local/lib/liballegro_audio.so.5.2.2
67--13192-- Reading syms from /usr/local/lib/liballegro_acodec.so.5.2.2
68--13192-- Reading syms from /usr/local/lib/liballegro_font.so.5.2.2
69--13192-- Reading syms from /usr/local/lib/liballegro_image.so.5.2.2
70--13192-- Reading syms from /usr/local/lib/liballegro_primitives.so.5.2.2
71--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
72--13192-- Considering /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 ..
73--13192-- .. CRC mismatch (computed 2f26e592 wanted a874dadb)
74--13192-- object doesn't have a symbol table
75--13192-- Reading syms from /lib/x86_64-linux-gnu/libm-2.23.so
76--13192-- Considering /lib/x86_64-linux-gnu/libm-2.23.so ..
77--13192-- .. CRC mismatch (computed 8bd88005 wanted 32b88176)
78--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libm-2.23.so ..
79--13192-- .. CRC is valid
80--13192-- Reading syms from /lib/x86_64-linux-gnu/libgcc_s.so.1
81--13192-- Considering /lib/x86_64-linux-gnu/libgcc_s.so.1 ..
82--13192-- .. CRC mismatch (computed b9a68419 wanted 29d51b00)
83--13192-- object doesn't have a symbol table
84--13192-- Reading syms from /lib/x86_64-linux-gnu/libc-2.23.so
85--13192-- Considering /lib/x86_64-linux-gnu/libc-2.23.so ..
86--13192-- .. CRC mismatch (computed b2979fac wanted 1affc958)
87--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.23.so ..
88--13192-- .. CRC is valid
89--13192-- Reading syms from /lib/x86_64-linux-gnu/libpthread-2.23.so
90--13192-- Considering /usr/lib/debug/.build-id/27/f189ef8db8c3734c6a678e6ef3cb0b206d58b2.debug ..
91--13192-- .. build-id is valid
92--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
93--13192-- Considering /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 ..
94--13192-- .. CRC mismatch (computed afbbdc31 wanted a2ee230b)
95--13192-- object doesn't have a symbol table
96--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2
97--13192-- Considering /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 ..
98--13192-- .. CRC mismatch (computed 63e27661 wanted 89d60ca9)
99--13192-- object doesn't have a symbol table
100--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0
101--13192-- object doesn't have a symbol table
102--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0
103--13192-- Considering /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 ..
104--13192-- .. CRC mismatch (computed 7bb99cdf wanted 61ad4d32)
105--13192-- object doesn't have a symbol table
106--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0
107--13192-- object doesn't have a symbol table
108--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
109--13192-- object doesn't have a symbol table
110--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libpulse-simple.so.0.1.0
111--13192-- object doesn't have a symbol table
112--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libpulse.so.0.19.0
113--13192-- object doesn't have a symbol table
114--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
115--13192-- object doesn't have a symbol table
116--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libFLAC.so.8.3.0
117--13192-- object doesn't have a symbol table
118--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbisfile.so.3.3.7
119--13192-- object doesn't have a symbol table
120--13192-- Reading syms from /lib/x86_64-linux-gnu/libpng12.so.0.54.0
121--13192-- Considering /lib/x86_64-linux-gnu/libpng12.so.0.54.0 ..
122--13192-- .. CRC mismatch (computed c8414c97 wanted f8adabcb)
123--13192-- object doesn't have a symbol table
124--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libjpeg.so.8.0.2
125--13192-- object doesn't have a symbol table
126--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
127--13192-- object doesn't have a symbol table
128--13192-- Reading syms from /lib/x86_64-linux-gnu/libdl-2.23.so
129--13192-- Considering /lib/x86_64-linux-gnu/libdl-2.23.so ..
130--13192-- .. CRC mismatch (computed cf3e24b0 wanted fd1ac2a8)
131--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libdl-2.23.so ..
132--13192-- .. CRC is valid
133--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0
134--13192-- Considering /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 ..
135--13192-- .. CRC mismatch (computed 19f12a45 wanted d5c3c1e7)
136--13192-- object doesn't have a symbol table
137--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0
138--13192-- object doesn't have a symbol table
139--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
140--13192-- Considering /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 ..
141--13192-- .. CRC mismatch (computed b483887a wanted 38c83e44)
142--13192-- object doesn't have a symbol table
143--13192-- Reading syms from /lib/x86_64-linux-gnu/libexpat.so.1.6.0
144--13192-- object doesn't have a symbol table
145--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0
146--13192-- object doesn't have a symbol table
147--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0
148--13192-- object doesn't have a symbol table
149--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0
150--13192-- object doesn't have a symbol table
151--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0
152--13192-- object doesn't have a symbol table
153--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0
154--13192-- object doesn't have a symbol table
155--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0
156--13192-- Considering /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0 ..
157--13192-- .. CRC mismatch (computed e9b9988d wanted 2077fd66)
158--13192-- object doesn't have a symbol table
159--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0
160--13192-- Considering /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 ..
161--13192-- .. CRC mismatch (computed 41b84947 wanted ceb4ca65)
162--13192-- object doesn't have a symbol table
163--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0
164--13192-- object doesn't have a symbol table
165--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0.0.0
166--13192-- object doesn't have a symbol table
167--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0
168--13192-- object doesn't have a symbol table
169--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0
170--13192-- object doesn't have a symbol table
171--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-8.0.so
172--13192-- object doesn't have a symbol table
173--13192-- Reading syms from /lib/x86_64-linux-gnu/libjson-c.so.2.0.0
174--13192-- object doesn't have a symbol table
175--13192-- Reading syms from /lib/x86_64-linux-gnu/libdbus-1.so.3.14.6
176--13192-- object doesn't have a symbol table
177--13192-- Reading syms from /lib/x86_64-linux-gnu/librt-2.23.so
178--13192-- Considering /lib/x86_64-linux-gnu/librt-2.23.so ..
179--13192-- .. CRC mismatch (computed 53afabad wanted 7e68d3a3)
180--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/librt-2.23.so ..
181--13192-- .. CRC is valid
182--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libogg.so.0.8.2
183--13192-- Considering /usr/lib/x86_64-linux-gnu/libogg.so.0.8.2 ..
184--13192-- .. CRC mismatch (computed 79e45162 wanted f32912dd)
185--13192-- object doesn't have a symbol table
186--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.8
187--13192-- object doesn't have a symbol table
188--13192-- Reading syms from /lib/x86_64-linux-gnu/libz.so.1.2.8
189--13192-- object doesn't have a symbol table
190--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
191--13192-- Considering /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 ..
192--13192-- .. CRC mismatch (computed 256f5df8 wanted 5d40ac88)
193--13192-- object doesn't have a symbol table
194--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
195--13192-- object doesn't have a symbol table
196--13192-- Reading syms from /lib/x86_64-linux-gnu/libsystemd.so.0.14.0
197--13192-- object doesn't have a symbol table
198--13192-- Reading syms from /lib/x86_64-linux-gnu/libwrap.so.0.7.6
199--13192-- Considering /lib/x86_64-linux-gnu/libwrap.so.0.7.6 ..
200--13192-- .. CRC mismatch (computed 34dcf8ad wanted 45219146)
201--13192-- object doesn't have a symbol table
202--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25
203--13192-- Considering /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25 ..
204--13192-- .. CRC mismatch (computed 52510984 wanted 7d6372da)
205--13192-- object doesn't have a symbol table
206--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libasyncns.so.0.3.1
207--13192-- object doesn't have a symbol table
208--13192-- Reading syms from /lib/x86_64-linux-gnu/libselinux.so.1
209--13192-- object doesn't have a symbol table
210--13192-- Reading syms from /lib/x86_64-linux-gnu/liblzma.so.5.0.0
211--13192-- object doesn't have a symbol table
212--13192-- Reading syms from /lib/x86_64-linux-gnu/libgcrypt.so.20.0.5
213--13192-- object doesn't have a symbol table
214--13192-- Reading syms from /lib/x86_64-linux-gnu/libnsl-2.23.so
215--13192-- Considering /lib/x86_64-linux-gnu/libnsl-2.23.so ..
216--13192-- .. CRC mismatch (computed 28e108aa wanted 52c48e62)
217--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libnsl-2.23.so ..
218--13192-- .. CRC is valid
219--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.11
220--13192-- object doesn't have a symbol table
221--13192-- Reading syms from /lib/x86_64-linux-gnu/libresolv-2.23.so
222--13192-- Considering /lib/x86_64-linux-gnu/libresolv-2.23.so ..
223--13192-- .. CRC mismatch (computed 84fe5664 wanted e6088da5)
224--13192-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libresolv-2.23.so ..
225--13192-- .. CRC is valid
226--13192-- Reading syms from /lib/x86_64-linux-gnu/libpcre.so.3.13.2
227--13192-- Considering /lib/x86_64-linux-gnu/libpcre.so.3.13.2 ..
228--13192-- .. CRC mismatch (computed 276b70fd wanted 22183252)
229--13192-- object doesn't have a symbol table
230--13192-- Reading syms from /lib/x86_64-linux-gnu/libgpg-error.so.0.17.0
231--13192-- object doesn't have a symbol table
232--13192-- REDIR: 0x66bda00 (libc.so.6:strcasecmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
233--13192-- REDIR: 0x66b9280 (libc.so.6:strcspn) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
234--13192-- REDIR: 0x66bfcf0 (libc.so.6:strncasecmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
235--13192-- REDIR: 0x66bb6f0 (libc.so.6:strpbrk) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
236--13192-- REDIR: 0x66bba80 (libc.so.6:strspn) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
237--13192-- REDIR: 0x66bd14b (libc.so.6:memcpy@GLIBC_2.2.5) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
238--13192-- REDIR: 0x66b9b20 (libc.so.6:strncmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
239--13192-- REDIR: 0x66b7a80 (libc.so.6:index) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
240--13192-- REDIR: 0x66bd1b0 (libc.so.6:memset) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
241--13192-- REDIR: 0x66bcbb0 (libc.so.6:bcmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
242--13192-- REDIR: 0x66b7cd0 (libc.so.6:strcmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
243--13192-- REDIR: 0x67441d0 (libc.so.6:__memcpy_chk) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
244--13192-- REDIR: 0x66c23f0 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
245--13192-- REDIR: 0x66bb3c0 (libc.so.6:strncpy) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
246--13192-- REDIR: 0x66bd850 (libc.so.6:stpcpy) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
247--13192-- REDIR: 0x66b9160 (libc.so.6:strcpy) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
248--13192-- REDIR: 0x66bd330 (libc.so.6:mempcpy) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
249--13192-- REDIR: 0x66bb400 (libc.so.6:rindex) redirected to 0x4c308a0 (rindex)
250--13192-- REDIR: 0x66b2d10 (libc.so.6:calloc) redirected to 0x4c2faa0 (calloc)
251--13192-- REDIR: 0x66b9720 (libc.so.6:strlen) redirected to 0x4c30f60 (strlen)
252--13192-- REDIR: 0x66b2130 (libc.so.6:malloc) redirected to 0x4c2db20 (malloc)
253--13192-- REDIR: 0x66c2470 (libc.so.6:__GI_memcpy) redirected to 0x4c32b00 (__GI_memcpy)
254--13192-- REDIR: 0x66b7d10 (libc.so.6:__GI_strcmp) redirected to 0x4c31fe0 (__GI_strcmp)
255--13192-- REDIR: 0x66bc060 (libc.so.6:__GI_strstr) redirected to 0x4c354d0 (__strstr_sse2)
256--13192-- REDIR: 0x66bc860 (libc.so.6:memchr) redirected to 0x4c32170 (memchr)
257--13192-- REDIR: 0x66bc630 (libc.so.6:strstr) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
258--13192-- REDIR: 0x66d8070 (libc.so.6:__strstr_sse2_unaligned) redirected to 0x4c35460 (strstr)
259--13192-- REDIR: 0x66b24f0 (libc.so.6:free) redirected to 0x4c2ed80 (free)
260--13192-- REDIR: 0x66cd820 (libc.so.6:__memcpy_sse2_unaligned) redirected to 0x4c324a0 (memcpy@@GLIBC_2.14)
261--13192-- REDIR: 0x5e1ae60 (libstdc++.so.6:operator new(unsigned long)) redirected to 0x4c2e080 (operator new(unsigned long))
262--13192-- REDIR: 0x66b9b70 (libc.so.6:__GI_strncmp) redirected to 0x4c31710 (__GI_strncmp)
263--13192-- REDIR: 0x678c420 (libc.so.6:__memmove_ssse3_back) redirected to 0x4c32230 (memcpy@GLIBC_2.2.5)
264--13192-- REDIR: 0x66b26c0 (libc.so.6:realloc) redirected to 0x4c2fce0 (realloc)
265--13192-- REDIR: 0x66c4760 (libc.so.6:strchrnul) redirected to 0x4c34da0 (strchrnul)
266--13192-- REDIR: 0x6744440 (libc.so.6:__strcpy_chk) redirected to 0x4c34e10 (__strcpy_chk)
267--13192-- REDIR: 0x66bd240 (libc.so.6:__GI_memset) redirected to 0x4c344c0 (memset)
268--13192-- REDIR: 0x679c3f0 (libc.so.6:__memcmp_sse4_1) redirected to 0x4c33cd0 (__memcmp_sse4_1)
269--13192-- REDIR: 0x6773a50 (libc.so.6:__strncmp_sse42) redirected to 0x4c317f0 (__strncmp_sse42)
270--13192-- REDIR: 0x66d4000 (libc.so.6:__strncpy_sse2_unaligned) redirected to 0x4c31570 (__strncpy_sse2_unaligned)
271--13192-- REDIR: 0x66d39d0 (libc.so.6:__strcpy_sse2_unaligned) redirected to 0x4c31040 (strcpy)
272--13192-- REDIR: 0x66b9ae0 (libc.so.6:strncat) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
273--13192-- REDIR: 0x66d70e0 (libc.so.6:__strncat_sse2_unaligned) redirected to 0x4c30dc0 (strncat)
274--13192-- REDIR: 0x66bcff0 (libc.so.6:__GI_memmove) redirected to 0x4c347e0 (__GI_memmove)
275--13192-- REDIR: 0x66bd3b0 (libc.so.6:__GI_mempcpy) redirected to 0x4c34fa0 (__GI_mempcpy)
276--13192-- REDIR: 0x66b98c0 (libc.so.6:strnlen) redirected to 0x4c30ee0 (strnlen)
277--13192-- REDIR: 0x66c4550 (libc.so.6:rawmemchr) redirected to 0x4c34dd0 (rawmemchr)
278--13192-- REDIR: 0x66b7ab0 (libc.so.6:__GI_strchr) redirected to 0x4c30a00 (__GI_strchr)
279--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
280--13192-- object doesn't have a symbol table
281--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libdrm_intel.so.1.0.0
282--13192-- object doesn't have a symbol table
283--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libdrm_nouveau.so.2.0.0
284--13192-- object doesn't have a symbol table
285--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libdrm_radeon.so.1.0.1
286--13192-- object doesn't have a symbol table
287--13192-- Reading syms from /usr/lib/x86_64-linux-gnu/libpciaccess.so.0.11.1
288--13192-- object doesn't have a symbol table
289--13192-- REDIR: 0x66b7880 (libc.so.6:strcat) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper)
290--13192-- REDIR: 0x66cd570 (libc.so.6:__strcmp_sse2_unaligned) redirected to 0x4c31f90 (strcmp)
291--13192-- REDIR: 0x6778820 (libc.so.6:__strspn_sse42) redirected to 0x4c35670 (strspn)
292==13192==
293==13192== Process terminating with default action of signal 2 (SIGINT)
294==13192== at 0xE853FD0: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
295==13192== by 0xEAA5AB4: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
296==13192== by 0xEAA627D: brw_fs_alloc_reg_sets (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
297==13192== by 0xEA4CF50: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
298==13192== by 0xE981FAE: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
299==13192== by 0xE91685F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
300==13192== by 0x77BDB72: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
301==13192== by 0x7795A53: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
302==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
303==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
304==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
305==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
306==13192== by 0x509A084: al_create_display (display.c:53)
307==13192==
308==13192== HEAP SUMMARY:
309==13192== in use at exit: 974,745 bytes in 2,523 blocks
310==13192== total heap usage: 2,837 allocs, 314 frees, 1,149,557 bytes allocated
311==13192==
312==13192== Searching for pointers to 2,523 not-freed blocks
313==13192== Checked 10,366,248 bytes
314==13192==
315==13192== 3 bytes in 1 blocks are still reachable in loss record 1 of 303
316==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
317==13192== by 0x66B9489: strdup (strdup.c:42)
318==13192== by 0x6C42371: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
319==13192== by 0x50E7F2F: xglx_initialize (xsystem.c:39)
320==13192== by 0x50A3F05: find_system (system.c:66)
321==13192== by 0x50A4451: al_install_system (system.c:246)
322==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
323==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
324==13192== by 0x40C1C2: main (main.cpp:773)
325==13192==
326==13192== 3 bytes in 1 blocks are still reachable in loss record 2 of 303
327==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
328==13192== by 0x66B9489: strdup (strdup.c:42)
329==13192== by 0x6C42371: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
330==13192== by 0x50E7F42: xglx_initialize (xsystem.c:42)
331==13192== by 0x50A3F05: find_system (system.c:66)
332==13192== by 0x50A4451: al_install_system (system.c:246)
333==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
334==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
335==13192== by 0x40C1C2: main (main.cpp:773)
336==13192==
337==13192== 4 bytes in 1 blocks are still reachable in loss record 3 of 303
338==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
339==13192== by 0x66B9489: strdup (strdup.c:42)
340==13192== by 0x6C3C529: XInitExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
341==13192== by 0x779584B: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
342==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
343==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
344==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
345==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
346==13192== by 0x509A084: al_create_display (display.c:53)
347==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
348==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
349==13192== by 0x40C1C2: main (main.cpp:773)
350==13192==
351==13192== 4 bytes in 1 blocks are still reachable in loss record 4 of 303
352==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
353==13192== by 0x7797D0E: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
354==13192== by 0x77959F7: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
355==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
356==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
357==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
358==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
359==13192== by 0x509A084: al_create_display (display.c:53)
360==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
361==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
362==13192== by 0x40C1C2: main (main.cpp:773)
363==13192==
364==13192== 5 bytes in 1 blocks are still reachable in loss record 5 of 303
365==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
366==13192== by 0x66B9489: strdup (strdup.c:42)
367==13192== by 0x6C3C529: XInitExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
368==13192== by 0x927DFDE: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
369==13192== by 0x77BBF70: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
370==13192== by 0x77BE7C5: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
371==13192== by 0x7795B30: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
372==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
373==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
374==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
375==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
376==13192== by 0x509A084: al_create_display (display.c:53)
377==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
378==13192==
379==13192== 5 bytes in 1 blocks are still reachable in loss record 6 of 303
380==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
381==13192== by 0x66B9489: strdup (strdup.c:42)
382==13192== by 0x77C28DD: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
383==13192== by 0x77BD8C3: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
384==13192== by 0x7795A53: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
385==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
386==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
387==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
388==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
389==13192== by 0x509A084: al_create_display (display.c:53)
390==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
391==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
392==13192== by 0x40C1C2: main (main.cpp:773)
393==13192==
394==13192== 8 bytes in 1 blocks are still reachable in loss record 7 of 303
395==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
396==13192== by 0x50DB2F2: _al_vector_alloc_back (vector.c:180)
397==13192== by 0x50DB56C: _al_register_system_interfaces (udrvlist.c:40)
398==13192== by 0x50A42FC: al_install_system (system.c:239)
399==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
400==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
401==13192== by 0x40C1C2: main (main.cpp:773)
402==13192==
403==13192== 8 bytes in 1 blocks are still reachable in loss record 8 of 303
404==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
405==13192== by 0x927DD3E: ??? (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
406==13192== by 0x927DDAA: ??? (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
407==13192== by 0x927E181: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
408==13192== by 0x77BBF70: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
409==13192== by 0x77BE7C5: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
410==13192== by 0x7795B30: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
411==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
412==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
413==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
414==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
415==13192== by 0x509A084: al_create_display (display.c:53)
416==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
417==13192==
418==13192== 8 bytes in 1 blocks are still reachable in loss record 9 of 303
419==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
420==13192== by 0x77959D8: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
421==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
422==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
423==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
424==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
425==13192== by 0x509A084: al_create_display (display.c:53)
426==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
427==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
428==13192== by 0x40C1C2: main (main.cpp:773)
429==13192==
430==13192== 10 bytes in 1 blocks are still reachable in loss record 10 of 303
431==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
432==13192== by 0x66B9489: strdup (strdup.c:42)
433==13192== by 0x6C3C529: XInitExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
434==13192== by 0x6CA7CEB: XkbUseExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
435==13192== by 0x6C42E0B: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
436==13192== by 0x50E7F2F: xglx_initialize (xsystem.c:39)
437==13192== by 0x50A3F05: find_system (system.c:66)
438==13192== by 0x50A4451: al_install_system (system.c:246)
439==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
440==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
441==13192== by 0x40C1C2: main (main.cpp:773)
442==13192==
443==13192== 10 bytes in 1 blocks are still reachable in loss record 11 of 303
444==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
445==13192== by 0x66B9489: strdup (strdup.c:42)
446==13192== by 0x6C3C529: XInitExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
447==13192== by 0x6CA7CEB: XkbUseExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
448==13192== by 0x6C42E0B: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
449==13192== by 0x50E7F42: xglx_initialize (xsystem.c:42)
450==13192== by 0x50A3F05: find_system (system.c:66)
451==13192== by 0x50A4451: al_install_system (system.c:246)
452==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
453==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
454==13192== by 0x40C1C2: main (main.cpp:773)
455==13192==
456==13192== 15 bytes in 1 blocks are still reachable in loss record 12 of 303
457==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
458==13192== by 0x77BC2D9: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
459==13192== by 0x77BD861: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
460==13192== by 0x7795A53: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
461==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
462==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
463==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
464==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
465==13192== by 0x509A084: al_create_display (display.c:53)
466==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
467==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
468==13192== by 0x40C1C2: main (main.cpp:773)
469==13192==
470==13192== 16 bytes in 1 blocks are still reachable in loss record 13 of 303
471==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
472==13192== by 0x8A47B5D: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
473==13192== by 0x8A463F3: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
474==13192== by 0x8A44978: xcb_connect_to_fd (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
475==13192== by 0x8A48610: xcb_connect_to_display_with_auth_info (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
476==13192== by 0x6C51809: _XConnectXCB (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
477==13192== by 0x6C42391: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
478==13192== by 0x50E7F2F: xglx_initialize (xsystem.c:39)
479==13192== by 0x50A3F05: find_system (system.c:66)
480==13192== by 0x50A4451: al_install_system (system.c:246)
481==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
482==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
483==13192==
484==13192== 16 bytes in 1 blocks are still reachable in loss record 14 of 303
485==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
486==13192== by 0x6C40056: ??? (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
487==13192== by 0x6C42635: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
488==13192== by 0x50E7F2F: xglx_initialize (xsystem.c:39)
489==13192== by 0x50A3F05: find_system (system.c:66)
490==13192== by 0x50A4451: al_install_system (system.c:246)
491==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
492==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
493==13192== by 0x40C1C2: main (main.cpp:773)
494==13192==
495==13192== 16 bytes in 1 blocks are still reachable in loss record 15 of 303
496==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
497==13192== by 0x8A47B5D: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
498==13192== by 0x8A463F3: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
499==13192== by 0x8A44978: xcb_connect_to_fd (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
500==13192== by 0x8A48610: xcb_connect_to_display_with_auth_info (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
501==13192== by 0x6C51809: _XConnectXCB (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
502==13192== by 0x6C42391: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
503==13192== by 0x50E7F42: xglx_initialize (xsystem.c:42)
504==13192== by 0x50A3F05: find_system (system.c:66)
505==13192== by 0x50A4451: al_install_system (system.c:246)
506==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
507==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
508==13192==
509==13192== 16 bytes in 1 blocks are still reachable in loss record 16 of 303
510==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
511==13192== by 0x6C40056: ??? (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
512==13192== by 0x6C42635: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
513==13192== by 0x50E7F42: xglx_initialize (xsystem.c:42)
514==13192== by 0x50A3F05: find_system (system.c:66)
515==13192== by 0x50A4451: al_install_system (system.c:246)
516==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
517==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
518==13192== by 0x40C1C2: main (main.cpp:773)
519==13192==
520==13192== 16 bytes in 1 blocks are still reachable in loss record 17 of 303
521==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
522[...]
523==13192== 32 bytes in 1 blocks are still reachable in loss record 39 of 303
524==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
525==13192== by 0x8A4714B: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
526==13192== by 0x8A44ED0: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
527==13192== by 0x8A46616: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
528==13192== by 0x8A46720: xcb_wait_for_reply (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
529==13192== by 0x8A478A2: xcb_get_extension_data (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
530==13192== by 0x8A45526: xcb_send_request64 (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
531==13192== by 0x8A45968: xcb_send_request (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
532==13192== by 0xA4FB971: xcb_glx_query_version (in /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0)
533==13192== by 0x779588A: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
534==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
535==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
536==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
537==13192==
538==13192== 32 bytes in 1 blocks are still reachable in loss record 40 of 303
539==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
540==13192== by 0x927DFBF: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
541==13192== by 0x77BBF70: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
542==13192== by 0x77BE7C5: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
543==13192== by 0x7795B30: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
544==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
545==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
546==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
547==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
548==13192== by 0x509A084: al_create_display (display.c:53)
549==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
550==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
551==13192== by 0x40C1C2: main (main.cpp:773)
552==13192==
553==13192== 32 bytes in 1 blocks are still reachable in loss record 41 of 303
554==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
555==13192== by 0x927DFBF: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
556==13192== by 0x927DA52: ??? (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
557==13192== by 0x927DD97: ??? (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
558==13192== by 0x927E181: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
559==13192== by 0x77BBF70: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
560==13192== by 0x77BE7C5: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
561==13192== by 0x7795B30: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
562==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
563==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
564==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
565==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
566==13192== by 0x509A084: al_create_display (display.c:53)
567==13192==
568==13192== 32 bytes in 1 blocks are still reachable in loss record 42 of 303
569==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
570==13192== by 0x927DFBF: XextAddDisplay (in /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0)
571==13192== by 0x77BFBF0: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
572==13192== by 0x77BFAD6: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
573==13192== by 0x7795B3C: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
574==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
575==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
576==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
577==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
578==13192== by 0x509A084: al_create_display (display.c:53)
579==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
580==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
581==13192== by 0x40C1C2: main (main.cpp:773)
582==13192==
583==13192== 32 bytes in 1 blocks are still reachable in loss record 43 of 303
584==13192== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
585==13192== by 0x8C5E626: _dlerror_run (dlerror.c:141)
586==13192== by 0x8C5DFA0: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
587==13192== by 0x77BA8D7: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
588==13192== by 0x77BD8E2: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
589==13192== by 0x7795A53: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
590==13192== by 0x7790F80: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
591==13192== by 0x50DF3F8: query_glx_version (xdisplay.c:91)
592==13192== by 0x50DF3F8: xdpy_create_display_locked (xdisplay.c:281)
593==13192== by 0x50E0292: xdpy_create_display (xdisplay.c:554)
594==13192== by 0x509A084: al_create_display (display.c:53)
595==13192== by 0x404C3F: Engine::configure() (engine.cpp:177)
596==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
597==13192==
598==13192== 32 bytes in 2 blocks are possibly lost in loss record 44 of 303
599==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
600==13192== by 0xE9178FD: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
601==13192== by 0x948B69F: ??? (in /lib/x86_64-linux-gnu/libexpat.so.1.6.0)
602==13192== by 0x948C3AB: ??? (in /lib/x86_64-linux-gnu/libexpat.so.1.6.0)
603==13192== by 0x948DCCD: ??? (in /lib/x86_64-linux-gnu/libexpat.so.1.6.0)
604==13192== by 0x948E424: ??? (in /lib/x86_64-linux-gnu/libexpat.so.1.6.0)
605==13192== by 0x949072A: XML_ParseBuffer (in /lib/x86_64-linux-gnu/libexpat.so.1.6.0)
606==13192== by 0xE918BFF: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
607==13192== by 0xE98185C: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
608==13192== by 0xE91685F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
609==13192== by 0x77BDB72: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
610==13192== by 0x7795A53: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
611==13192==
612==13192== 40 bytes in 1 blocks are still reachable in loss record 45 of 303
613==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
614==13192== by 0x6C405FB: XInitThreads (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
615==13192== by 0x50E7F28: xglx_initialize (xsystem.c:36)
616==13192== by 0x50A3F05: find_system (system.c:66)
617==13192== by 0x50A4451: al_install_system (system.c:246)
618==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
619==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
620==13192== by 0x40C1C2: main (main.cpp:773)
621==13192==
622==13192== 40 bytes in 1 blocks are still reachable in loss record 46 of 303
623==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
624==13192== by 0x6C40614: XInitThreads (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
625==13192== by 0x50E7F28: xglx_initialize (xsystem.c:36)
626==13192== by 0x50A3F05: find_system (system.c:66)
627==13192== by 0x50A4451: al_install_system (system.c:246)
628==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
629==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
630==13192== by 0x40C1C2: main (main.cpp:773)
631==13192==
632==13192== 40 bytes in 1 blocks are still reachable in loss record 47 of 303
633==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
634==13192== by 0x6C4009E: ??? (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
635==13192== by 0x6C42635: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
636==13192== by 0x50E7F2F: xglx_initialize (xsystem.c:39)
637==13192== by 0x50A3F05: find_system (system.c:66)
638==13192== by 0x50A4451: al_install_system (system.c:246)
639==13192== by 0x404C1F: Engine::configure() (engine.cpp:171)
640==13192== by 0x4056EB: Engine::Engine() (engine.cpp:362)
641==13192== by 0x40C1C2: main (main.cpp:773)
642==13192==
643==13192== 40 bytes in 1 blocks are still reachable in loss record 48 of 303
644==13192== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
645==13192== by 0x6C538CD: _XPollfdCacheInit (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
646==13192== by 0x6C42645: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
647[...]
[edit] WOAH. It ran FASTER when I was running in Valgrind, and slow as mud straight from Linux. Do me a favor and double/triple check your timing code in main.cpp at line ~839. It's possible you're losing precision from an integer, or, doing some math that doesn't take floating point variables failure mode into consideration like this line... maybe: double diff = double(endStamp - startStamp) * 0.001; // diff now contains frame time in ms
It's 5 AM so I can't really analyse this much further, my brain is a little mushy. :) -----sig: |
Kelly Corcoran
Member #16,776
December 2017
|
I don't have an FPS counter now, but I'll add one when I get home from work today. Probably useful to have. The Valgrind thing is interesting because I wasn't getting those errors when I tested. My last memcheck test only gave me a brief report of some uninitialized Engine* data that I wasn't able to track down. Are there some memory testing settings I need to turn on for the extra info? I will also have a look at the timing code, but what I've seen is if I call showDebug(timeDelta); in my main loop, I get a number averaging around 16.6 (ms between frames) on the computer. I haven't checked this number on the pi yet, but presumably it is much more as the time correction works perfectly e.g. the intro scene cues occur at the same time regardless of how choppy the system runs. Also for what it's worth, on the desktop it runs from an SSD, on the Pi it runs from a MicroSD card. Don't know if this makes a difference. [Edit] Otherwise, the systems do have one notable similarity - Pi is Raspbian, desktop is Ubuntu. But desktop runs it lightning fast. EDIT: I learned a few things today. 1. The timing code is fine; tested and got expected results. I added an FPS counter and learned that my estimate about the framerate was was giving it too much credit... 14.8FPS at the worst.
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
What I was getting at earlier with all the code chasing is that I think somewhere you're using a memory bitmap. Try adding in something like this after your loading / creation code : if (al_get_bitmap_flags(bitmap) & ALLEGRO_MEMORY_BITMAP) {error();} I don't have a PI, so I can't test this for you properly. It's like something isn't being accelerated properly, because it shouldn't be that slow. My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Chris Katko
Member #1,881
January 2002
|
I'll definitely load up my Pi this weekend (assuming my health holds, it's not a reliable thing right now) and try it. But it definitely raised a red flag to me when my Chromebook with a Celeron processor (~2 GHZ) ran it FASTER when Valgrind was running it and WAY slower without it. And by definition, Valgrind does at a minimum of a 6x-10x slowdown. Which is why I was thinking of the timing code / float errors (dividing by a difference is a big yellow flag in floating math because the error range explodes) as a gut instinct to check. (Again, 5 AM, my brain isn't smart enough to go line-by-line at the moment.) Because there's no way Valgrind should ever be faster than stock unless I made some huge/insane/never-seen-before mistake when I was testing. Otherwise, I'm gonna start playing Skyrim on my netbook with Valgrind as my CPU turbo'izer. -----sig: |
Kelly Corcoran
Member #16,776
December 2017
|
I gave it a shot (on the Pi) with a debug report to alert me if there were any memory bitmaps, and there were none. Good thing to check for though, thanks for that suggestion! Timing inaccuracies were certainly a good thought, but as it never attempts to sleep() and the unrelated FPS counter also reports the game running slower, it seems like that particular feature is working. If you do have a chance to load it up, that would be awesome. But yes, health is more important - care for yourself first! Edit: "CPU manufacturers hate him! Check out this one weird trick, discovered by a forum member, to speed up your computer! You won't believe what happens next!"
|
|