[03:14] duflu_, heyo! [03:14] mterry! sup? === duflu_ is now known as duflu [03:15] duflu_, so maybe I don't understand C++ well enough, but the code in ./include/server/mir/compositor/scene.h doesn't seem to give access to CompositingCriteria... [03:16] mterry: It's a bit ugly, but all designed to work with a filter/applicator interface. I think all those are defined in scene.h? [03:16] * duflu checks [03:17] duflu, it looks like they *take* a criteria, not give one [03:18] mterry: All you need is a Scene object. Then... scene->for_each_if(filter, operator) to do your rendering. The instances will be provided by the underlying scene implementation in Mir [03:19] That's a bit of an ugly way to iterate though. I'd like to replace it with something else [03:19] You will need to create implementations of FilterForScene and OperatorForScene :P [03:19] duflu, oh I see. I write a filter, and the for_each_if will call operator() giving a criteria [03:20] mterry: Yep. The instances implementing those interfaces are hidden, but you will get called with them [03:20] duflu, then I also need to get a Rectangle for the surface to pass the criteria... [03:20] this is really roundabout [03:21] mterry: Your display_buffer->view_area() is good for that [03:21] ah ok [03:21] mterry: I know. I found it this way :) [03:21] "It was like that when I found it" [03:21] duflu, :) [03:22] mterry: So a minimal filter would call should_be_rendered_in [03:22] duflu, so my Filters get called... But how do I match a filter call to a given surface? [03:23] mterry: You can't right now. We all want that fixed up and I think kdub is most likely to do it soonest [03:23] * mterry is trying to imagine how I use these pieces together [03:25] mterry: Our immediate desire is to replace both the CompositingCriteria and BufferStream parameters with some *Surface interface which implements both. We just need to restructure the Surface class hierarchy [03:30] Whoops, disconnected. duflu, don't know where we stopped [03:30] duflu, yeah, so I can iterate and ask the criteria, but without being able to differentiate between what the various iterate calls *mean* (i.e. what surfaces they match), I don't know how that API is useful to a 3rd party [03:30] mterry: You missed nothing [03:30] hmm [03:31] maybe I'm missing a piece of the puzzle [03:31] I guess the Operator sees a BufferStream.. [03:31] But that's not super informative [03:31] duflu, cool [03:31] duflu, so kdub is working in this space? [03:31] mterry: Even the built-in renderer treats it as a TODO. I had to use "&criteria" as a dummy surface ID :( [03:32] mterry: Better check with kdub. He's always likely to get pulled into more pressing Android work [03:33] kdub, if I don't get to you first, poke me tomorrow! [03:33] duflu, thanks so much! [03:33] * mterry is very slowly grokking Mir [03:33] mterry: No problem. Sorry you're stuck on something that we already planned to redesign :/ [06:54] Ok. That should really, truly, absolutely be the last umockdev merge request in a while! === mpt_ is now known as mpt [09:45] RAOF: erm can you now at a mainloop api like in pulseaudio? :P [09:52] So many things I'd like to move around. But the weekend is in the way. [09:52] Till next time === lool- is now known as lool [12:20] alf_: were you looking at an intermittent failure in MesaDisplayTest recently? https://jenkins.qa.ubuntu.com/job/mir-clang-trusty-amd64-build/1007/console [12:27] alan_g: yes, but it was a clean failure, no exceptions, and fixed (by all appearances) by r1401 [12:28] alf_: thanks, will try to reproduce this one then [12:37] * alan_g reproduces intermittent failures in MesaDisplayTest.drm_device_change_event_triggers_handler [12:42] alan_g: exceptions, or other test failure? [12:42] Segmentation fault (core dumped) [12:43] I'll look deeper after lunch === alan_g is now known as alan_g|lunch === alan_g|lunch is now known as alan_g [13:51] alf_: still happy with the updates to https://code.launchpad.net/~alan-griffiths/mir/make-ConfigurationOptions-a-dependency-of-DefaultServerConfiguration/+merge/206996? [13:51] alan_g: looking === Trevinho_ is now known as Trevinho [15:11] rsalveti: Hi! I am trying to run the x86 emulator to get more information about https://bugs.launchpad.net/mir/+bug/1282248 , but all I am getting is a blank screen in the emulator [15:11] Launchpad bug 1282248 in Mir "Unity8 crashes when using latest mir/android backend with system-compositor" [High,In progress] [15:11] rsalveti: Any ideas? [15:15] alf_: hm, getting a black screen with my guide? [15:15] *blank [15:15] alf_: are you using it with a proprietary gl driver at your host? [15:21] rsalveti: yes, your guide, free drivers, radeon and intel (tried with both) [15:21] alf_: weird, trying it again locally [15:23] rsalveti: I do get related errors: http://paste.ubuntu.com/6971401/ [15:24] oh, alright [15:26] rsalveti: hmm, I think I need to install the i386 mesa drivers (running on amd64)? [15:26] alf_: yes [15:27] rsalveti: isn't there an amd64 version of this? [15:27] alf_: not yet [15:28] there will be sson [15:28] *soon [15:28] rsalveti: ok [15:34] rsalveti: works now great! [15:34] alf_: great! [15:35] rsalveti: does the image have persistent storage? [15:35] alf_: any idea of what might be wrong with that bug? [15:35] alf_: yes [15:36] rsalveti: I have found the exact commit that introduces it (on a real device at least), but the armhf backtraces I can get are less than helpful... [15:36] alf_: yeah =\ [15:37] rsalveti: the commit is the one that changes the client platform to be dynamically loaded instead of built-in, not sure why that would cause a failure, though. Running nested tests with mir_demo_* works... [15:38] rsalveti: anyway, hopefully the x86 backtraces will be more helpful [15:39] alf_: yeah, it's quite weird, at least the x86 image doesn't have any issue with android TLS === dandrader is now known as dandrader|afk [16:16] fginther: Thanks for preparing the jobs. I realized that this is something I could by myself in the future if I want to try something, if I branch the hooks, right? === dandrader|afk is now known as dandrader [16:17] alf_, yes, I did have to configure the job first to allow the hooks, but once they are there you can substitute in your own branch / hooks for testing [17:15] mterry, ping [17:15] kdub, hello! [17:16] kdub, I had some questions for you. Is that what this ping is? [17:16] yeah, saw some chatter about the surface stack iteration stuff [17:18] kdub, so my ultimate goal is to be able to tell when a session/surface actually has posted their first frame to render. This has been harder than I'd thought [17:18] kdub, recently I tried to go down the CompositingCriteria route [17:18] kdub, but it isn't exposed in a particularly meaningful way [17:18] kdub, but I was told you were working in that space? [17:19] well, I have to revise the surface stack to enable android bypass/overlays [17:19] the interfaces now have been out-grown by the way they are being used, and need some reassessment [17:20] kdub, well. I am highly interested in being able to tell when a (at least first) frame has been rendered [17:23] kdub, what is priority of your work? Like, how likely is it to happen soonish? [17:23] mterry, that's a bit different area than refactoring the surfacestack/compositingcriteria system [17:24] kdub, well, I can probably get what I need from actual access to CompositingCriterias and being able to match them to a surface [17:24] let me see if there's a way to do that in the public interfaces [17:24] or if there's a quick way to add a fn [17:24] kdub, because they have the should_be_rendered_in() call [17:24] kdub, and I can iterate over the CompositingCriterias via the Scene object and its for_each_if calls [17:25] kdub, but I can't actually tell which Surface they each match with [17:26] thats kinda a heavyweight solution though, as we lock the surfacestack during the iteration over the surfaces [17:28] kdub, well I'm all for better ways. It's literally the only way to get at Criterias right now though [17:28] kdub: also, that locking is something we plan to rip out - along with the associated code [17:30] alan_g, sure [17:30] mterry, what is the larger problem? (eg, trying to coordinate some animation or something) [17:31] I've still not understood why waiting for swap_buffers(Not(nullptr)) doesn't work [17:32] duflu found a Mesa bug while looking into this. But mterry is on the android drivers [17:32] alan_g, there are internally several buffers posted before the client gets to run [17:32] alan_g, so maybe that's just a bug. But it's not usable at the moment [17:33] alan_g, that's all in the bug [17:33] mterry: yeah, I don't understand why [17:33] alan_g, meaning that you think it's a bug that Mir is swapping buffers so early? [17:36] kdub, https://bugs.launchpad.net/ubuntu/+source/mir/+bug/1280842 explains my ultimate goal in all this [17:36] mterry: mir should only be getting a buffer once it has been drawn. I don't know exactly what your scenario is doing to send buffers from the client before they are ready. [17:36] Launchpad bug 1280842 in mir (Ubuntu) "[enhancement] Need a method of hiding surfaces until they are ready to draw themselves" [Medium,Opinion] [17:37] alan_g, it's not even *my* scenario. It's just a client calling mir::run_mir [17:37] alan_g, something about constructing/running a DisplayServer causes 4 buffers to be swapped [17:37] mterry: so this client is a nested server? [17:37] alan_g, yeah [17:38] alan_g, (this is all in the context of USC which just deals with nested servers) [17:39] mterry: I strongly suspect a bug in the nested code then [17:40] With a second possibility that the android client code is the cause [17:41] *internal* client [17:41] alan_g, would that be work-around-able? [17:43] alan_g: mterry: Hmm, when the compositor starts up it triggers itself, each trigger being 3 compositings. In a nested server, swapping the buffer when compositing means sending the buffer to usc. [17:46] And the 4th could be something like the Mesa "advance_buffer" bug? [17:47] alan_g: yeah [17:47] I do only get 3 if I hide() the surface first, FYI [17:47] mterry: that makes sense [17:48] iirc, android shouldnt do that 'advance_buffer' [17:49] rather, the same sort of bug as the Mesa "advance_buffer". it does request a buffer on eglCreateWindowSurface, but it should get the buffer associated with the surface creation [17:50] (nexus 10 does something different) [17:51] kdub: ok, but I'll buy alf_ explanation - we need to something different when compositing in nested mode. [17:52] If no-one else grabs it I can have a go on Monday [17:52] * mterry hugs alan_g [17:52] * alan_g blushes [17:53] alan_g, so the idea would be that USC could call hide(), watch for buffer swaps, and when it gets a non-null one, show() again? [17:53] or maybe it wouldn't need to call hide if it weren't getting buffer swaps in the first place [17:54] mterry: yes, nested clients ought to behave like regular ones [17:54] alan_g, sounds perfect [17:55] * alan_g decides to cut & paste the above discussion into the bug === alan_g is now known as alan_g|EOW [18:06] why are surfaces visible if client hasn't drawn to them yet? To me makes more sense for mir to tell a shell that a Surface was created, only when that surface was drawn to by the client [18:07] not when the surface buffer was allocated for that client [18:07] anyway, gotta run, good weekend all! === dandrader is now known as dandrader|lunch === dandrader|lunch is now known as dandrader === dandrader is now known as dandrader|afk === dandrader|afk is now known as dandrader