[00:31] when is that GCC bug going to be fixed? Driving me insane... [00:49] kdub if I set that destructor to default I get "/home/bob/bzr/mir-session-container1/tests/unit-tests/shell/test_session_manager.cpp:51:8: error: looser throw specifier for ‘virtual {anonymous}::MockSessionContainer::~MockSessionContainer()’ [00:49] In file included from /home/bob/bzr/mir-session-container1/tests/unit-tests/shell/test_session_manager.cpp:22:0: [00:49] /home/bob/bzr/mir-session-container1/include/server/mir/shell/default_session_container.h:38:7: error: overriding ‘virtual mir::shell::DefaultSessionContainer::~DefaultSessionContainer() noexcept (true)’" [00:49] do you know what that means? [01:16] robert_ancell: You need to mark your destructor as noexcept [01:18] Which most destructors should be, because throwing from destructors is entering a world of std::terminate [01:30] That should probably be a style-guide entry, really; there are optimisations available to the compiler if it knows something can't generate an exception. === duflu_ is now known as duflu [01:53] RAOF, so kdub suggested that this change should make them so (https://code.launchpad.net/~robert-ancell/mir/abstract-session-container/+merge/159523) [01:55] robert_ancell: But your derived one isn't marked as noexcept, right? [01:55] RAOF, the derived class doesn't have one, does it need an explicit one? [01:55] Yes [01:56] RAOF, and can I just do "= default" for the derived class too? [01:56] If you've got a trivial destructor, sure. [01:56] so in short every class that extends another needs an explicit destructor [02:03] Grrr [02:52] robert_ancell: I suspect you have to do ~MockSessionContainer () noexcept = default; [02:52] oh. oops, didn't see the rest of the scrollback [02:53] in any case, I've had some trouble with default destructors on google mocks - you need to have an explcit or compiler generated destructor for some reason, dunno why [02:54] smspillaz, thanks [02:58] robert_ancell: generally speaking it goes [virtuality] returntype function_name () [const-specifier] [exception-specifier] [body | =] [04:49] Hmm, trying to assign a value with a shared pointer not working - any ideas? http://paste.ubuntu.com/5717823/ [05:10] robert_ancell: Seems auto might be doing something you don't want. Make sure the RHS is a non-const shared_ptr of compatible type [05:48] robert_ancell: Did catching session by reference rather than value in the lambda expression fix it? [08:07] robert_ancell: morning! [08:14] alan_g, hello! [08:20] robert_ancell: "When I originally had the default destructor it stops the mock SessionContainer classes from working" - you mean compiling? [08:21] That's because mocks have members with non-noexcept destructors, so you need to explicitly mark the destructor noexcept. (Which is valid when using google-test.) [08:25] alan_g, right - I couldn't work out the correct syntax to mark them [08:26] robert_ancell: ~MockWhatever() noexcept {} [08:27] alan_g, just checking that.. [08:29] alan_g, I was just trying that - it only works once https://code.launchpad.net/~kdub/mir/nicemock-improvements/+merge/159465 lands [08:32] robert_ancell: I see. (Or avoiding NiceMock ;) [08:36] alan_g, so, should ServerConfiguration also use the same style destructor? [08:38] robert_ancell: some of us have started updating stuff as we touch it - but it can get a bit "viral", so it isn't required. New stuff we do "right". === alan_g is now known as alan_g|tea === alan_g|tea is now known as alan_g === alan_g is now known as alan_g|lunch === olli__ is now known as olli === alan_g|lunch is now known as alan_g [13:58] alan_g: @disallow-vt-switching-when-pause-fails, so the idea is to handle any exceptions (and report the relevant errors) internally e.g. in display->pause(), and have the high level functions just return bool? What if handle the exceptions (and reports) at the mid level and rethrow? [14:01] alf_: It all depends if display->pause() failing is an exception or just a result. Looking at the code in DisplayServer::Private::pause() it seems easier for it to be a result. [14:04] alan_g: it's an exception which we can gracefully handle, failure is not really an expected result, but I guess the line is somewhat blurry in this case [14:05] alf_: which code is simpler? [14:13] alan_g: the high-level pause() snippet is simpler now, but I am not sure if it will continue to be simpler when we add other components to the mix (e.g. pause the communicator, which will come soon. That's the reason I added ScopedAction, since the recovery was going to get unwieldy). [14:14] alan_g: internally there is no really difference in code complexity [14:17] alf_: OK. In that case, can we define an exception type that carries the reporting context up to the top level and have a single exception handler doing the reporting? [14:23] alan_g: Hmm, not really, because we need to cross out of platform specific boundaries with a platform specific issue/context (DRM failure). The highest level at which we know what is going on is inside display->pause() (hence my suggestion to catch, report and rethrow). [14:24] alf_: what I don't like about that is the eventual catch and ignore [14:25] alf_: that's why I thought of catch, report and return an error. ;) [14:28] alan_g: at the DS level we could report a general pause() failure [14:29] alan_g: plus we are not really ignoring, we are return false from the handler :) [14:30] alf_: ok [14:32] alan_g: I'll iterate and we can see how it looks === alan_g is now known as alan_g|tea [15:10] morning! === alan_g|tea is now known as alan_g [15:25] status, working towards removing 3rd_party/fbtype, then hopefully some hwc1.0 work [15:32] status: working on handling pause/resume failures (i.e. vt switching) more gracefully, working on pausing communicator [15:37] status: documenting and cleaning up configuration related classes [16:13] morning [16:13] Afternoon [17:00] spinning in circles on the circular dependency === alan_g is now known as alan_g|life [17:37] bryce, ping [17:37] taking a stab at software cursor in a demoI wonder if [17:38] the right approach is to subclass the compositing strategy [17:38] or to subclass Renderables (to emit a cursor renderable after the surfaces) [17:48] tvoss, yep? [17:53] neither one really works well in trunk now.if you subclass the compositing strategy you have to reimplement the whole thing rather than just chain up and overlay (because of the location of display::post_update) [17:54] which is all you want to do... [17:54] the renderable interface isn't set up for anything beside surfaces though, inparticular, void bind_to_texture() [17:54] is alittle inflexible === mmrazik is now known as mmrazik|afk [18:41] * kdub falls for the trap of confusing quantal/raring arm toolchains [19:28] lunch [19:28] software cursor demo is maybe half done [21:04] just flicked a cursor allover the screen [21:04] it felt good [21:31] hmm [21:31] all works except the software cursor itself cant trigger the compositor [21:31] so you need a client rendering at 60fps for the cursor to work ;) [21:43] racarr, excellent :) [21:44] kdub: Any idea for what sort of interface [21:45] to allow triggering the compositor? [21:45] it seems like exposing compositor.schedule_compositing or whatever [21:45] defeats the purpose of the whole change callback mechanism in place now [21:45] which I dont entirely understand [21:45] racarr, yes, let me check... [21:45] buts its clear its needed eventually, not every redraw will correspond to a change of a renderable (i.e. due to animations or some such) [21:53] racarr, ping [21:57] tvoss: pong [22:48] ok just updated my qtubuntu to trunk to test [22:48] pointer input, and key input is broken! [22:48] might be related to the vt changes? or something...or might be a mistake in my qtubuntu :) [23:19] it seems impossible to gdb mir since the vt changes