Improving Performance on a Pi 3
Kelly Corcoran

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

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.

Kelly Corcoran

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):

#SelectExpand
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:

#SelectExpand
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:

#SelectExpand
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:

#SelectExpand
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

Okay, why don't you show where you create the display and load or create your resources.

Chris Katko

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.

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.

Kelly Corcoran

Here's the engine initialization code:

#SelectExpand
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.

#SelectExpand
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

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?

Kelly Corcoran

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.

#SelectExpand
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:

#SelectExpand
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

Okay, I don't see you call Engine::configure anywhere in main - do you do it in the constructor? Where is that called?

Kelly Corcoran

I'm almost wondering if I should just post a zip file of all my source code so I don't miss anything.

#SelectExpand
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

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.

Kelly Corcoran

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

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.

#SelectExpand
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. :)

Kelly Corcoran

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.
2. Commenting out the one line that draws the background (b->draw(); at line 139 of engine.cpp) doubles the frame rate to around 40. Background->draw() does a single quick floating point multiplication, then calls al_draw_tinted_scaled_background().
3. Commenting out the call to updateDevices() had no effect on the slow frame rate.
4. One of my controllers is misconfigured or has a bad cable! This is irrelevant to the problem at hand, but it was good to know.

Edgar Reynaldo

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.

Chris Katko

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. ;)

Kelly Corcoran

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!"

Thread #617159. Printed from Allegro.cc