[00:01] Ha! [00:01] When introspecting the set of fds a process has open, be aware that you might actually open an extra fd in the process of introspection... :) [00:48] kdub: were you able to give it a try? [00:50] rsalveti, not yet, distracted by https://bugs.launchpad.net/mir/+bug/1272041 [00:50] Ubuntu bug 1272041 in Mir "mir nested server failure: what(): error binding buffer to texture" [Critical,Confirmed] [00:53] got it [00:53] interesting [00:56] never a dull day on the mir team === ^_\\\ is now known as LockeAnarchist [02:36] Hm. google mock can't handle returning move-only things. [02:37] It's so over-featured, I get it can... somehow [02:37] I *bet* [02:38] Not according to the google mock lists. [02:39] Then I blame C++ for giving us such things === duflu_ is now known as duflu [02:40] Stroustrup will be personally responsible for the downfall of humanity, I suspect [02:44] https://code.google.com/p/googletest/issues/detail?id=395 for those playing at home. [02:46] Also annoying: QtCreator is super-confused by >> in templates. [02:52] RAOF: That's a common problem with (older?) compilers too. If you have nested templates you need a space: "> >" [03:24] duflu: I >> in templates is a C++11 feature IIRC. [03:27] RAOF: Not sure what you mean. But do remember when I started learning and using the STL that ">>" was a syntax error/ambiguity. You have to put a space in the middle. [03:28] duflu: http://en.wikipedia.org/wiki/C%2B%2B11#Right_angle_bracket - >> as not-always-right-shift operator is a C++11 language feature. [03:29] That explains why it mysteriously started working when I joined Mir [03:29] So if you weren't building with --std=C++11... ;) [03:32] Still, for the cost of one character you can write backward-compatible code. Sounds like a good deal === chihchun_afk is now known as chihchun [05:05] Hm. Don't change things out from under cmake *too* much or it might fail to notice that you're changing some code, not compile it, and your tests will inexplicably fail, even though you've added code that should make them pass. [07:33] RAOF: if I am not mistaken the make generator of cmake does not notice if you change a self defined variable that changes add_definitions or changes CMAKE_CXX_FLAGS without also changing a different variable like CMAKE_BUILD_TYPE .. at least I had some bad experience that made me do all define like settings in header files created through configure_file [07:49] anpok_: I think he is past EOD/EOW [07:49] Till Tuesday :) [07:56] oh it is friday again === chihchun is now known as chihchun_afk === chihchun_afk is now known as chihchun === mpt_ is now known as mpt [09:46] duflu: anpok_: alan_g: Any preference for MirOutputCapture vs MirOutputRecording vs ... ? [09:47] alf_: Mir*Recording is my preference. Unsure about mentioning "Output" though [09:48] It sounds better. "Recording" is clearly an ongoing process whereas "Capture" sounds like an instantaneous screen grab or something [09:49] Woo, my Friday afternoon experiments have solved cloned output stutters [09:49] +1 [09:49] duflu: MirScreenRecording? We need to mention something at least since plain MirRecording is too vague (input? output? something else?) [09:49] And more generally boosted potential composting performance [09:49] duflu: \o/ sounds good :) [09:50] alf_: Yes I thought the same about MirRecording [09:50] maybe [09:50] Not sure [09:52] duflu: I like Output since the recording is targeting a specific MirDisplayOutput, so perhaps even MirDisplayOutputRecording if we don't mind being more verbose [09:52] duflu: but I think MirOutputRecording is clear enough [09:52] alf_: Is it per output or DisplayBuffer? If the latter that's not even a client-visible concept [09:52] ScreenCapture? [09:53] duflu: it is per output [09:53] as a non native speeker both capture and recording do indicate an ongoing process [09:53] but recording also indicates that each frame is stored [09:54] while capture sounds like .. you get the current frame everytime you look at it.. [09:54] *speaker.. [09:54] anpok_: which is actually what is going on... [09:54] Looking at the mir-devel list we've talked about "screenshotting" and "screencasting" [09:55] alf_: ScreenCast? [09:55] i like screen cast [09:55] Since there's no requirement for actual "recording" [09:56] Oh. It's one word... MirScreencast with lower c [09:56] Good enough [09:56] http://en.wikipedia.org/wiki/Screencast [09:57] It's on Wikipedia so it must be true [09:57] :) [09:57] A *screencast* is a digital recording of computer screen output, also known as a video *screen capture* [09:57] alf_: I have too many memories of bugs where we ask for a screen capture, meaning screenshot [09:58] So Capture is ambigous [09:59] alan_g: anpok_: duflu: it's Screencast 1... [09:59] 2... [09:59] 3... [09:59] Sold! [09:59] Yay for finding new nouns not yet used in the codebase [10:00] duflu: alan_g: anpok_: And guess what the relevant interface on the server side will be called ;) [10:00] Clarence? [10:01] MirDisplayScreenOutputClarence [10:01] ..ProviderManager [10:01] ...er [10:01] Hmm, do we really have the words "DisplayScreenOutput" side by side? [10:02] duflu: I hope not! :) [10:03] MirDOScreencaster [10:04] no dont take it serious [10:04] VideoDisplayScreenOutputViewportBufferImplementation [10:05] anpok_: as you can see we are way past seriousness at the moment :) [10:05] anpok_: we all know "Avoid class names that end in er" [10:05] I shouldn't joke. Compiz had function names twice as long [10:06] alan_g: hm like Verbalizer? [10:07] anpok_: http://www.benhallbenhall.com/2013/01/naming-objects-er-object-names/ [10:09] There was an image floating around that showed a room with "OO" names like "InternalToExternalAccessProvider" (door) - can't find it. [10:11] Heh. I'm sure I've been ranting about ER for years :) [10:11] "er" not "ER" [10:12] alan_g: anpok_: duflu: Of course, sometimes, especially for narrow interfaces, a name ending in -er is actually a good choice [10:12] * duflu -> dinner, long weekend [10:13] dinn-er another name we should avoid! :P === chihchun is now known as chihchun_afk [11:23] alf_: but thats to some degree because of c++ - those narrow interfaces are probably just a single function (op()) and in a different language would just be a function [11:23] there the verb does not have to become a noun [11:26] have you guys successfully used apitrace on a Nexus 10 (or any other device)? [11:28] not tried yet [11:30] any other trick for tracing gl calls? [11:32] it does not work? [11:33] anpok_, apitrace? no. [11:41] just tried with manual preloading [11:43] oh [11:45] it did create something reasonable, [11:45] but when replaying on the desktop it complains that we never call glViewport [11:46] maybe I should use a better exmaple than mir_demo_standalon_render_surfaces [11:47] hmm, when I tried with qmlscene it complaining about some missing API function [11:47] complained [11:47] * dandrader tries with some mir example [11:51] we could add that to apitrace then [11:52] i mean any other trick would involve doing the same, and making it work :) [11:52] yeah, works with mir_demo_client_triangle but with qmlscene it bails out with "error: unavailable function eglBindAPI" [11:55] strange egltrace.so has it [12:00] anpok_, exactly [12:00] anpok_, do you also get the same with qmlscene? [12:05] maybe it's because of the order or way that qmlscene loads its dependencies (through a qt platform plugin, etc) [12:12] qmlscene does not start [12:14] ah ok [12:15] now I get the same behaviour [12:30] i tried to find out when egl was added to apitrace [12:53] Debugging boost::asio is not fun... === dandrader is now known as dandrader|afk [13:06] kdub: ping / when back [13:06] guys one question [13:07] how do we do handover of a buffer from server to client over ipc [13:07] fd mappings of the server gralloc'd space? === alan_g is now known as alan_g|lunch === dandrader|afk is now known as dandrader === alan_g|lunch is now known as alan_g [14:32] dandrader: hm [14:32] dandrader: qmlscene only links libGLESv2.so and not libEGL.so [14:33] anpok, what about the QPA library that it eventually loads? [14:34] so whith LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/apitrace/wrappers/egltrace.so:/usr/lib/arm-linux-gnueabihf/libhybris-egl/libEGL.so.1.0.0 [14:34] it should work [14:34] then egltrace can use eglGetProcAddress to get the real functions [14:34] anpok, namely /usr/lib/arm-linux-gnueabihf/qt5/plugins/platforms/libqubuntumirclient.so [14:35] that one does link against libEGL [14:35] ok [14:35] i just tried qmlscene with an empty scene [14:36] and when libEGL is preloaded it did not aport on eglBindAPI [14:36] *abort [14:36] oh I have to go.. [14:36] bbl === ricmm_ is now known as ricmm [14:51] anpok, ok, thanks for the help! [15:09] anpok, damn, it doens't abort on start but the sole contents of the trace are "0 eglBindAPI(api = EGL_OPENGL_ES_API) // incomplete" :/ [15:24] I think I will have to inject the apitrace wrapper via LD_LIBRARY_PATH.... === alan_g is now known as alan_g|tea [15:37] anpok, ok, this seems to have done the trick: LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/apitrace/wrappers/egltrace.so:/usr/lib/arm-linux-gnueabihf/libhybris-egl/libEGL.so.1:/usr/lib/arm-linux-gnueabihf/libhybris-egl/libGLESv2.so.2 === dandrader is now known as dandrader|lunch [15:49] ah ok === alan_g|tea is now known as alan_g [16:33] ricmm, pong [16:33] kdub: ahoy [16:33] kdub: can you jump in a hangout? [16:33] sure [16:33] k [16:33] ill call you [16:33] canon acc [16:52] ricmm, https://android.googlesource.com/platform/system/core/+/master/include/cutils/native_handle.h [16:55] kdub: http://pastebin.ubuntu.com/6809300/ === dandrader|lunch is now known as dandrader [17:01] E/IMGSRV ( 5712): :0: gralloc_register_buffer: Cannot register a buffer twice (ID=36) [17:05] kdub: did you drop? [17:05] i'm still here, hangout stopped [17:07] kdub: http://pastebin.ubuntu.com/6809354/ [17:13] handle.version=12, handle->numFds=1, handle->numInts=13, handle->data[0]=29 [17:15] [17:29] kdub: http://pastebin.ubuntu.com/6809480/ [18:06] kdub: http://pastebin.ubuntu.com/6809656/ [18:07] http://pastebin.ubuntu.com/6809667/ [18:14] kdub: http://pastebin.ubuntu.com/6809689/ [18:52] Wow, Google is making really strange things http://goo.gl/YEkaMA [18:52] funny haha xD === dandrader is now known as dandrader|afk === dandrader|afk is now known as dandrader [20:06] kdub, ping [20:10] hello dandrader [20:10] kdub, hi! [20:10] kdub, is there any code at all in mir [20:10] that clears the contents of a client buffer? [20:11] via GL? [20:11] kdub, in any way [20:11] glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); [20:11] will clear to black [20:12] if you change the floats (r,g,b,a) itll change it to different colors [20:12] kdub, I mean if mir *does* do it [20:12] kdub, not how to do it [20:12] ah :) we do have a 'buffer initializer' class... let me ch eck if its used [20:13] kdub, 'cause I'm debugging the prototype qml mir compositor. and, for a qml client, every now and then one of this frames is shown completely white [20:14] so I'm wondering if this bogus white frame could possibly be caused by mir server [20:14] or if it must be the client messing things up [20:15] afaIct, in the client application there's no call that would clear the frame white (used apitrace to check) [20:16] it has something to do with the interactions between threads [20:16] GLRenderer does it in begin i think [20:16] if the scene graph rendering is done in qt's main (GUI) thread, the bogus white frames never show I [20:16] show up [20:16] but it uses the default setting [20:17] which hopefully is not changed? [20:17] but if I enable the scene graph rendering to be done on its own, separate, thread, then the bogus white frames pop up every now and then [20:18] dandrader, there isnt a 'quick way', but our 'examples/render_surfaces.cpp' programs a buffer color initializer [20:18] when the buffer is created [20:18] currently, the default server does not fill to a color on allocation [20:19] anpok, GLRenderer will clear the display composition, i think we're looking for a way to clear the client's buffer only [20:21] ok [20:22] if I understood things correctly, mir creates a ring buffer of buffers for a given client once, and after that the contents of those buffers are modified only by the client [20:24] dandrader, right [20:26] dandrader, the buffers can be destroyed and created again (like on resize), but we won't post a resized buffer until after its been filled by the client [20:26] kdub, ok. but in this case the size of the client doesn't change [20:27] well, will continue debugging it on Monday [20:28] have a nice weekend