[00:15] <RAOF> vibhav: What's your intended target for python-mir? Just binding the functions in the mirclient API would work, but depending on your target you might want to do something extra.
[01:24] <smspillaz> RAOF: heh, I'm just thinking about how well the multithreaded callbacks would interact with the GIL
[01:25] <RAOF> Easily! You marshal everything into a single thread!
[01:25] <smspillaz> RAOF: of course. But ideally you'd probably want to do that in a separate library and then bind to that
[01:26] <smspillaz> since otherwise you'd have crazy locking overhead
[01:26] <smspillaz> (*based on a vast oversimplication of the GIL)
[01:27] <smspillaz> RAOF: I remember it was quite surreal when racarr was explaining that to me while we managed to get lost on the bart
[01:27] <RAOF> Heh
[01:29] <smspillaz> RAOF: I actually kinda like the multithreaded callbacks approach, partially because it means Death to the Main Loop [tm]. The only downside is that integrating it with a main loop is a little awkward
[01:31] <duflu> RAOF: Hmm, there's no /Mir/ in any live images yet, right?
[01:32] <duflu> smspillaz: Also, if you're receiving non-input surface events, that's a different thread again :)
[01:33] <duflu> I mean :S
[01:33] <smspillaz> duflu: yeah, iirc it was one thread for surface events and one thread for input events
[01:33] <duflu> smspillaz: https://bugs.launchpad.net/mir/+bug/1194384
[01:34] <smspillaz> duflu: I don't think the threading is a problem, rather - the whole MirEvent is just awkward
[01:34] <smspillaz> *MirEvent thing
[01:34] <smspillaz> I much prefer the wayland approach -> every unique event happens in its own callback
[01:35] <duflu> smspillaz: Can you elaborate?
[01:35] <duflu> Because technically all events have their own callbacks
[01:35] <duflu> Or you mean callback type?
[01:36] <smspillaz> that being said - wayland screws up in one area: keyboard and mouse events are reported to you in surface relative co-ordinates but you can only have one handler per mouse or keyboard
[01:36] <smspillaz> (afaict)
[01:36] <smspillaz> duflu: callback type
[01:36] <duflu> I see
[01:36] <smspillaz> duflu: unions are a kinda sucky way of representing data like this
[01:36] <smspillaz> see XEvent
[01:36] <duflu> It is nice to be able to take shortcuts and sometimes handle different even types in a single callback
[01:37] <duflu> Not to mention, nice to avoid the user learning many callback prototypes
[01:37] <smspillaz> and then you end up with a thousand-line long "Event" callback
[01:37] <smspillaz> which is made worse by the fact that it may be called in multiple threads simultaneously
[01:38] <smspillaz> and the only real way to fix that would be to dispatch the potentially giant switch statement into separate functions
[01:38] <smspillaz> ... which might as well be done at the client library level
[01:39] <smspillaz> see for instance: https://github.com/smspillaz/xbmc/commit/ddab367b4928bc50f168d157b6b4939f3062402a#L2R78
[01:40] <smspillaz> (ah, my bad, wayland does actually give you the surface the event happened on)
[01:41] <duflu> smspillaz: Fair point. I would then say... use a single callback prototype demultiplexed at registration:    set_event_handler(filter, callback)
[01:41] <smspillaz> duflu: eg - wl_pointer_add_listener :)
[01:43] <smspillaz> (I would show you an example, but I can't because I have to dlopen libwayland-client.so and then use the protocol directly because things like wl_pointer_add_listener are all static inline functions ....)
[01:44] <smspillaz> but eg: https://github.com/smspillaz/xbmc/commit/ddab367b4928bc50f168d157b6b4939f3062402a#L2R36
[01:49] <duflu> smspillaz: BTW pointer events are meant to be surface-relative in Mir too. It's just not implemented yet
[01:50] <duflu> -pointer +motion
[02:24] <duflu> That's odd. My Mir performance dropped about 5% over the weekend (after updates)
[02:26] <duflu> But it's only compositing performance that dropped. Bypass results are unchanged
[02:33] <TheDrums> duflu: There are no *official* cdimages.ubuntu.com images, but the Xubuntu team did create one using the latest from the system-compositor-testing PPA for ease of testing.
[02:33] <duflu> TheDrums: Ah thanks. That explains the new bug reports from Xubuntu users against Mir
[02:34] <TheDrums> Yes, seems while several of the Mir devs were sent the message, you were not one of them.
[02:36] <skellat> Marking the one report about complete screen corruption as incomplete was not a good thing as the only information that was recoverable was provided.  The logs are inaccessible.
[02:36] <skellat> Unless we were running exterior serial consoles, we wouldn't have had a way to recover such.
[02:38] <TheDrums> duflu: http://www.mail-archive.com/xubuntu-devel@lists.ubuntu.com/msg08905.html is the message.
[02:41] <duflu> skellat, I know that now. About to fix it
[03:22] <RAOF> ♪ And on that farm he had a laptop ♫
[03:30] <duflu> RAOF: Awesome! (?)
[03:31] <RAOF> Yes.
[03:32] <duflu> RAOF: Quad core IPS SSD goodness?
[03:32] <RAOF> Correct
[03:33]  * duflu gives all builds to RAOF
[03:44] <duflu> RAOF: What's the key "depth" like?
[03:45] <RAOF> It's pretty shallow, but typable.
[03:47] <RAOF> Luncheon.
[05:16] <tvoss_> good morning :)
[05:17] <tvoss_> RAOF, ping
[05:17] <tvoss_> duflu, ping
[05:18] <RAOF> tvoss_: Pong
[05:20] <tvoss_> duflu, ping
[05:43] <duflu> tvoss_: pong
[06:00] <tvoss_> alf__, duflu could you guys please sync up on the multi-monitor and switch-branch integration? A summary by mail would be great!
[06:01] <alf__> tvoss_: duflu: sure
[06:03] <duflu> alf__: I will try to do the timing workaround to solve non-cloned multi-output. Then "more robust solutions" are not on the critical path and blocking...
[06:06] <alf__> duflu: The BackBufferStrategy mechanism was introduced as a way to inject policy for such situations (MultiAcquisition being one such policy). I think it is the right layer to put the policy into, vs the Compositor, which should not have to care about this at all.
[06:07] <duflu> alf__: I think the strategy layer is a bit hackish. It exists to match the exact semantics in which buffers will be called/used. That would be better enforced where they are called and used (hence "more robust")
[06:08] <duflu> -called +acquired
[06:11] <duflu> alf__: I mean, a nicer solution would be to keep that multi-monitor logic closer to the multi-monitor compositing.
[06:11] <duflu> I was only suggesting the timing workaround as a quick solution which requires no effort on your part
[06:12] <duflu> Unless there are other "simple" ways to semi-synchronize the compositing threads without actually synchronizing them
[06:13] <duflu> And without breaking bypass requirements
[06:13] <tvoss_> duflu, are you loosing the z character?
[06:14] <duflu> tvoss_ ?
[06:14] <tvoss_> duflu, my xchat eats away certain characters :)
[06:14] <duflu> tvoss_: No, it's just you... ?
[06:14] <tvoss_> duflu, damn :)
[06:14] <alf__> duflu: how would that work in the (DisplayBuffer)Compositor?
[06:15] <duflu> alf__: You mean timing workaround?
[06:15] <alf__> duflu: yes
[06:15] <duflu> alf__: Actual comsumed compositor buffers get a timestamp. And new ones are not allowed to be consumed (hence get reused) for the next 10ms
[06:16] <duflu> So multiple monitors with roughly the same refresh rates share the same compositor buffer. Or at least don't steal each other's or wake the client up any faster than one monitor would
[06:17] <duflu> It actually feels close to the "right solution", just maybe in the wrong place
[06:18] <duflu> And bonus: That won't break bypass.
[06:20] <alf__> duflu: How does MultiAcquisition break bypass (I don't mind dropping it, I am just trying to undestand). In any case the ultimate benchmark for this is how much each policy affects visual fluidity. BTW, you can run mir_demo_server_shell --display-config=sidebyside (with two screens) and move clients between the outputs to test.
[06:21] <alf__> (from lp:mir)
[06:21] <duflu> alf__: Cool thanks
[06:22] <duflu> alf__: The issue with multiacquisition, which had be stuck for weeks, was its assumptions about the exact ordering of compositor acquire/release calls. Bypass has two acquired simultaneously most of the time, but also requires that they're always different buffers (when available)
[06:22] <duflu> -be +me
[06:23] <duflu> alf__: Also, no one has pinpointed the first primary cause of the lag bug. Other than it was in the buffering code I replaced, _somewhere_ :/
[06:23] <alf__> duflu: isn't this fixed by https://code.launchpad.net/~vanvugt/mir/fix-1199450/+merge/178236 ?
[06:24] <duflu> alf__: The first cause is fixed by switch (prerequisite). But switch introduces triple buffering which would cause the same problem. So the fix- branch solves that too
[06:26] <alf__> duflu: do we always use triple buffering or only for framedropping and bypass?
[06:27] <duflu> alf__: It's always triple now, logically. But I defer allocating the third buffer until the client behaves in a way that uses 3 simultaneously
[06:28] <duflu> The lazy allocation is generalized... it keeps the number of real buffers low until more are required
[06:29] <alf__> duflu: sounds good
[06:30]  * duflu shuffles monitors
[06:33] <alf__> duflu: hmm, how do you stop a client that is (or rather wants to be) double-buffered from acquiring the third buffer?
[06:37] <duflu> alf__: I just realized the primary thing keeping it at double was removed when I fixed those issues on Friday. Now it's only timing keeping it at double. If a client tries to render without using a timer (limited only by swapping) then it will expend to triple very quickly now :/
[06:37] <duflu> -expend +expand
[06:37] <duflu> That might need revisiting. I can add dynamic resizing without much fuss
[06:50] <duflu> alf__: Multi-monitor just works, nice. If only I had a GUI to set the layout :)
[06:51] <duflu> Or a language... like "DVI1 leftof VGA1"
[07:22] <RAOF> didrocks: Have we won a Mir promotion to Main?
[07:23] <didrocks> RAOF: it was too late on Friday and risky, so we pinned to proposed. The promotion/publication is now in progress
[07:23] <RAOF> didrocks: Cool. Sorry about that delay.
[07:24] <didrocks> RAOF: no worry ;)
[07:32] <dholbach> good morning
[07:43] <RAOF> Hm. Zoë bath time!
[08:17] <duflu> alf__: Just a minor speedhump: https://bugs.launchpad.net/mir/+bug/1208354
[08:18] <alf__> duflu: ahh, yes this is fixed by lp:~afrantzis/mir/multimonitor-misc-fixes ⇒ lp:mir (will hopefully land soon)
[08:18] <duflu> alf__: Very nice, thanks
[08:32] <didrocks> RAOF: still around?
[08:39] <RAOF> didrocks: Yeah.
[08:40] <didrocks> RAOF: see #ubuntu-devel please :)
[08:40] <RAOF> didrocks: Ah, I see #ubuntu-devel.
[08:40] <didrocks> heh ;)
[08:40] <seb128> can we just drop ppc? :p
[08:41] <didrocks> +1000 :p
[09:51] <duflu> alf__: I will have most of your requests resolved tonight but not all... At least multi-monitor is fixed, without breaking bypass \o/
[09:52] <alf__> duflu: great!
[09:58] <tvoss_> duflu, \o/
[10:24] <doko> Saviq, ping
[10:26] <Saviq> doko, pong
[11:05] <alan_g> hikiko: how's it going?
[11:18] <hikiko> alan_g, I started from create display
[11:18] <hikiko> and now I am writing a NestedDisplay class
[11:19] <hikiko> do you think I should do something else first
[11:19] <hikiko> ?
[11:20] <alan_g> hikiko: that sounds a sensible approach
[14:15] <racarr> Morning
[14:29] <greyback> racarr: morning!
[14:29] <alan_g> Afternoon
[14:30] <racarr> greyback: Morning! welcome back
[14:30] <greyback> racarr: thanks :)
[14:32] <racarr> greyback: I'm sure you are still catching up but maybe we should do a catch up soon?
[14:32] <racarr> I was kind of doing other stuff last weekly so expect for some stuff for OSK mostly not on unity
[14:32] <greyback> racarr: certainly. Whenever you're ready
[14:32] <racarr> so kind of lost track of exact status
[14:32] <greyback> Yep I'd like to know where the OSK work is at
[14:32] <racarr> greyback: Ok after the 8:00 mir stand up maybe?
[14:32] <greyback> Daniel is away, so I need to at least know what it's status is
[14:32] <greyback> racarr: perfect
[14:46] <kgunn> greyback: racarr can i lurk on your sync?
[14:46] <greyback> kgunn: sure
[14:50] <racarr> kgunn: Eh...
[14:50] <racarr> it's kind of "cool crowd only"...so I dunno
[14:50] <racarr> :p
[14:51] <racarr> I am just teasing. Have a good time in IoM?
[14:52] <kgunn> racarr: consider we were the only people at that hotel under 60.... :-/
[14:54] <kgunn> racarr: we did gointo town one night...me ancell, didier & michal... food was sooo good & company was good :)
[14:59] <racarr> kgunn: Aha. that must have been a little strange (hotel situation)
[14:59] <kgunn> didrocks: just checking in...did RAOF overcome the alioth issue
[14:59] <didrocks> hey!
[14:59] <kgunn> racarr: it was bizzare
[14:59] <didrocks> kgunn: he did, and so we have everything uploaded
[14:59] <didrocks> promoted some components to Main
[14:59] <didrocks> howerver, multiples upload from him and I to ignore properly powerpc
[15:00] <didrocks> however, on two components
[15:00] <didrocks> we still try to build with mir for the -ati and -nouveau driver
[15:00] <didrocks> so this one should be fixed, RAOF assume this wasn't needed (but it wasn't built) when I asked him
[15:01] <didrocks> we can:
[15:01] <didrocks> - either do a bad/ugly #ifdef
[15:01] <didrocks> - let RAOF fix it more properly (I would be more in favor of that)
[15:01] <didrocks> the second point is that unity-system-compositor don't enable accceleration anymore on the intel or ati machine
[15:01] <didrocks> so even unity doesn't start
[15:02] <kgunn> didrocks: good ol' powerpc :)....ok, that stinks  about new prob
[15:02] <kgunn> didrocks: did you really mean intel ? or nvidia rather
[15:03] <didrocks> nvidia, sorry :)
[15:03] <didrocks> I can't even use jetlag as an excuse
[15:03] <didrocks> kgunn: for powerpc, I'll be in favor of guns if this continues that road ;)
[15:04] <kgunn> :))
[15:04] <didrocks> I'll send an email with you/RAOF/robert
[15:25] <racarr> greyback: Sync up?
[15:25] <racarr> kgunn: ^
[15:25] <greyback> racarr: ok
[15:26] <kgunn> racarr: gotta link ?
[15:27] <racarr> making one
[15:27] <racarr> https://plus.google.com/hangouts/_/a38f0a95d50f766f61f95dd52ef79056c74c360c?authuser=1&hl=en
[15:27] <racarr> kgunn: greyback: ^
[15:28] <kgunn> ricmm: ^
[15:56] <kgunn> racarr: were you going to refactor down to singled method interface first ? or try chasing some approval on the current mp ?
[15:56] <kgunn> regarding...https://code.launchpad.net/~robertcarr/mir/surface-configuration-interface--for-shell/+merge/177055
[16:05] <racarr> kgunn: i am not sure
[16:06] <racarr> I am not throwing up my hands (actively thinking about it) but am kind of at a loss on both branches as it stands
[16:08] <racarr> The single method variant is awkward, because like in the comment I just left
[16:08] <racarr> you end up applying the surface state changes, etc, before you actually update the member variable tracking the state
[16:10] <racarr> and there are all sorts of ways around that (i.e. the function returns the new state, and an std::function to apply it which the surface then calls after updating the member variable. Or the configuration interface gets some object/function passed in that it uses to update the surface state in between the selection and application step
[16:11] <racarr> but both of these just mean, instead of an interface with two roles it's now a method with two roles.
[16:12] <racarr> so I am not sure this makes sense.
[16:13] <racarr> I also can't make an argument that it makes sense to split each method in to a seperate interface, i.e. AttributeDecider and AttributeApplier because
[16:13] <racarr> they will always be passed around in a pair in the server
[16:14] <racarr> so pattern is to pass them as a composite type i.e. some AttributeStuff, which has ethods like decider() and applier()
[16:14] <racarr> but then it's not clear why that method doesn't just have decide, and apply, like the configurator does now in the MP
[16:17] <racarr> I think it's probably somewhat more of an indication tht the way we are handling state of msh::Surface is bad
[16:18] <racarr> so I guess I am seeing if there is something I can do about that for the attribute stuff without taking more than a few days
[16:24] <racarr> alan_g: A completely different proposal for surace-configuration-interface
[16:24] <racarr> alan_g: msh::Surface loses the state, type, etc member variables
[16:24] <alan_g> racarr: sorry, my head is full of ~vanvugt/mir/switch/+merge/178527
[16:24] <racarr> that's ok :)
[16:25] <alan_g> But that sounds interesting
[16:26] <racarr> alan_g: Basically the thought is if mir is only passing these values through the shell and frontend perhaps it should be a shell component that stores them and mir just passes interfaces to this component for getting back out to frontend
[16:26] <racarr> but it's not too much hassle so maybe I will just try and implement it and you can check it out later :)
[16:26] <racarr> switch branch scares me ;)
[16:29] <racarr> alan_g: btw if you are ever bored remind me to tell you about the craziest (most interesting ;) idea I have ever heard for handling mutable state in highly threaded C++ programs XD
[16:29] <alan_g> racarr: The problem of where to store these values (and how to synchronize access to them) dates from the decision to hold them in the shell, and not in the model.
[16:29] <racarr> it needs GC though so it's not for us. it's just really interesting
[16:29] <alan_g> racarr: I'll take a raincheck
[16:30] <racarr> XD
[16:30] <racarr> yeah, I understand that bit sort of
[16:31] <kgunn> racarr: maybe kdub can take a peek this afternoon
[16:32] <racarr> Yeah. I'll harass him ;)
[16:33] <racarr> alan_g: This might be a step in that direction, i.e. rather than the surface holding this state directly it gets it through some get_attribute and set_attribute interface to this SurfaceConfiguration from the shell
[16:34] <racarr> which could also be implemented by
[16:34] <racarr> super scene graph model 2.0 :p
[16:34] <alan_g> racarr: I know I need to get back on that hobbyhorse
[16:34] <alan_g> And actually propose something concrete.
[16:35] <racarr> alan_g: Ok. That would be good
[16:35] <alan_g> If only folks would stop with the big complicated MPs
[16:35] <racarr> I haven't been able to get to anything concrete on that
[16:35] <alan_g> ... ;)
[16:35] <racarr> and I am worried that we are
[16:35] <racarr> approaching feature freeze
[16:37] <racarr> alan_g: I.e. feature freeze is august 29th
[16:37] <kdub> racarr, peek at notify focus? or switch
[16:38] <racarr> kdub: Err, the surface-configuration-interface
[16:38] <racarr> it doesn't exactly need review, just ideas I guess
[16:38] <kdub> racarr, i'll refill my coffee and take a look now
[16:39] <racarr> kdub: Ah. excellent. Thanks :)
[16:42] <kgunn> bschaefer: are you free-ish today ?
[16:42] <bschaefer> kgunn, a bit more ibus stuff to do, but after that I should be
[16:42] <bschaefer> kgunn, still trying to get my desktop back up and working :(
[16:43] <kgunn> bschaefer: oh crap
[16:43] <kgunn> bschaefer: but ok...i'll loop you in
[16:43] <bschaefer> yeah, my HD decided to die and can no longer read/write to it...soo its toast :(, but i've to reinstall some new things to a new HD!
[16:43] <bschaefer> kgunn, sounds good!
[16:46] <kgunn> kdub: racarr ...yeah, hate to be the management ogre....but we really need to target gettting unity/mir onto touch trunk (w/ osk consideration) 10 days from now
[16:47]  * racarr takes one of the little pills labelled "Up"
[16:47] <racarr> :p
[16:53] <racarr> Another option for client-focus-notifications
[16:54] <racarr> surface loses surface_state_focused/unfocused. introduce an interface msh::Focus with one method Focus::give(std::shared_ptr<msh::Surface>)
[16:55] <racarr> this obect tracks the current focus, so it can do unfocused notifications
[16:55] <racarr> it also needs to know to give the focus to the next surface if
[16:55] <racarr> the focused surface is destroyed, so I think msh::Surface also gains a method like
[16:55] <kdub> racarr, the cloggable event sink
[16:56] <kdub> i still feel like i'm missing the big picture on the 'why'
[16:56] <racarr> msh::Surface::take_focus(std::unique_ptr<FocusToken>)
[16:56] <racarr> with a d'tor that knows what to do
[16:56] <racarr> kdub: Basically the idea is inbetween the call to create_surface
[16:56] <racarr> and sending a response to the client
[16:57] <racarr> we may generate surface configuration events
[16:57] <racarr> i.e. surface id 7 took focus
[16:57] <racarr> but if we send this to the client before it's been told what surface id 7 is
[16:57] <racarr> it can't interpret it
[16:58] <kdub> ah, gotcha
[16:58] <racarr> so we have to ensure the wire events are sent after the create_surface response
[16:58] <racarr> kdub: it's a little sketchy actually because it relies
[16:58] <racarr> on the fact that invoking the Done callback from create_surface
[16:58] <racarr> synchronously writes the message.
[17:00] <kdub> seems like the object with the best information to control that timing is the msh::Surface
[17:00] <kdub> perhaps the SessionManager as well
[17:00] <racarr> hmm, not as it stands now, because even after SessionManager::create_surface_for
[17:00] <racarr> returns
[17:00] <racarr> the SessionManager can't know if things have been sent over the wire yet
[17:01] <kdub> right, so it seems the shell has a false idea about when a surface is up and running
[17:02] <kdub> maybe msh::Surface should have the same lifetime as the client surface on the other side of the ipc barrier?
[17:03] <kdub> that way a focus event could block there until we know the client is ready
[17:03] <racarr> maybe
[17:04] <kdub> alternatively, we could just have more complex logic client side
[17:04] <racarr> I think you can always end up with
[17:04] <racarr> situations where the client can't decide? Maybe not.
[17:05] <racarr> well
[17:05] <racarr> if the client buffers the events and waits until the surface appears
[17:05] <racarr> then it can't really detect events which are actually malformed/in error
[17:06] <racarr> kdub: The lifetime idea is kind of nice but I'm not sure how it would be implemented
[17:06] <kdub> i guess we have two responses now to that rpc call
[17:07] <kdub> 'you are focused' or 'you are not focused'
[17:07] <kdub> that would take care of it too :)
[17:07] <racarr> i.e.  you construct all of the surface dependencies, allocate the id, make sure everything works, send the response and then allocate the msh::Surface
[17:07] <racarr> kdub: Not quite because a surface may open and not necessarily receive focus
[17:07] <racarr> or maybe it opens and the shell restores it's state to maximized
[17:08] <racarr> because that's how it was last run
[17:08] <racarr> so there could be many responses I think
[17:08] <kdub> right, the surface opens and is not focused
[17:08] <kdub> at the time the surface is created, we should be able to know the state of the surface
[17:08] <kdub> seems that should be sent as the initial state in the return of the rpc message
[17:09] <racarr> hmm
[17:09] <racarr> ok, so the current model is kind of like, the initial state is defaulted
[17:09] <racarr> i.e. your state is restored, your surface type is normal, you do not have focus
[17:09] <kdub> right
[17:09] <racarr> and you will be notified of anything else
[17:10] <racarr> so we could extend create surface to return like
[17:10] <racarr> surface_id, state, type, focus
[17:10] <racarr> but then wont e still need a proxy event sink?
[17:10] <racarr> Because we have to ensure that later when these change
[17:10] <kdub> that seems like a separate issue
[17:10] <racarr> we still send notification
[17:11] <kdub> the event sink still has to be accessible to the shell surface, yes
[17:11] <racarr> but that we don't send notification on this first call
[17:11] <racarr> but I mean, the surface will still be created in the default state
[17:12] <racarr> so what makes the first change to 'focused' occur as part of the create_surface reply
[17:12] <racarr> and not as an event over the wire
[17:12] <kdub> the shell decides the initial state when the surface is created
[17:12] <kdub> or :) it should be
[17:13] <kdub> that gets sent in the reply, and afterwards, any updates to the state are sent via the event sink
[17:14] <racarr> kdub: I think it's hairy for the shell to decide that way
[17:14] <racarr> because now essentially any interface like
[17:15] <racarr> kdub: Ok, I was thinking
[17:15] <kdub> as opposed to deciding state after creation, and imposing synchronization across/near the ipc boundary so the client can figure out what state its in? :)
[17:15] <racarr> it had to happen before surface construction, but actually it could happen
[17:16] <racarr> kdub: Well my concern s that doing it before surface construction was difficult because then the shell will have methods like
[17:16] <racarr> decide_state_for_surface_creation_params and decide_state_for_surface
[17:16] <kdub> right, not before
[17:17] <racarr> kdub: But actually, the surface could use the SurfaceConfigurator from the other branch (XD)
[17:17] <racarr> er welll I still cant quite figure it out but will go on
[17:17] <racarr> then in it's constructor it calls like
[17:17] <kdub> ipc request comes in, we ask the shell to create a surface, we read the created surface, and then we run done
[17:17] <racarr> state = select_attribute_value(surface_state)
[17:17] <racarr> type = select_attribute_value(type) focus = select_attribute_value(focused)
[17:18] <racarr> and it doesn't go over the event sink because there was no call through to msh::Surface::configure
[17:19] <kdub> sounds better
[17:20] <racarr> kdub: Ok so.I think this makes sense, but now I am having a little difficulty figuring out how the mechanism happens
[17:21] <racarr> kdub: i.e. the surface is being constructed
[17:21] <kdub> i think we need some extra fields in protobuf's Surface
[17:21] <racarr> so the shell gets select_focused(msh::Surface &)
[17:21] <racarr> and says, hey this is a new surface, so it says yes, focused
[17:21] <racarr> but now what actually sets
[17:21] <racarr> the input focus to
[17:21] <racarr> that surface
[17:21] <racarr> I'm not sure if it makes sense for
[17:22] <racarr> it to be select_focused because
[17:22] <racarr> the surface isn't even initialized at that point.
[17:23] <kdub> we need to ban the use of the word 'surface' :)
[17:24] <kdub> it isn't initialized where?
[17:24] <kdub> client side?
[17:24] <racarr> no, I meant, on the server, if we use some interface like
[17:24] <racarr> select_attribute_value(focused) that is called during the constructor
[17:24] <racarr> and no one is notified of this
[17:24] <racarr> then what actually sets the input focus
[17:27] <kdub> from the frontend, i see this
[17:27] <kdub> http://pastebin.com/vD7UCRUs
[17:29] <racarr> kdub: Ok.
[17:29] <racarr> kdub: trying to reword the last concern.
[17:29] <racarr> the thing is, right now the FocusMechanism, sets the focused attribute on the surface
[17:29] <kdub> okay, yeah. i sorta detected we were talking about two different parts of code
[17:30] <racarr> after, applying the mechanism of the focus of the surface. i.e. making sure it's on top and giving it key focus
[17:30] <racarr> so, if the surface instead takes the focused attribute itself during creation
[17:31] <racarr> then what actually
[17:31] <racarr> does this giving key focus, etc step.
[17:34] <kdub> racarr, don't know where that question ended :)
[17:34] <racarr> err, sorry
[17:34] <racarr> I mean which component, or hwere in this flow
[17:34] <racarr> do we actually set the key focus
[17:35] <racarr> because there is no
[17:35] <kdub> been reading through a bit of the code more
[17:35] <racarr> msh::FocusSetter::set_focus_to(msh::Surface) now
[17:35] <racarr> as the only entry point for focus changing
[17:35] <racarr> (when I say now, I mean, in this select_attribute_value model)
[17:35] <kdub> and really, i think in msh::SessionManager::create_surface_for, it calling set_focus_to is probably in the wrong place
[17:36] <kdub> my head's currently exploding with 'hey, a std::future seems perfect for this sort of thing' :)
[17:36] <kdub> but
[17:37] <racarr> mm
[17:37] <racarr> the call to set_focus_to is wrong I agree
[17:37] <racarr> that should be entirely shell policy it's just there so we could have focus before we had a shell or example servers
[17:37] <kdub> a notification after SessionMediator::create_surface's done->Run() to the focus setter seems appropriate sorta
[17:38] <racarr> I was thinking about that, or even right before i.e. say
[17:38] <kdub> with the idea, 'hey Focus stuff, time to reconsider who has focus'
[17:38] <racarr> SessionManager::create_surface_for(...
[17:38] <racarr> surface = create_surface()
[17:38] <racarr> and then like
[17:38] <racarr> apply_surface_attributes(surface)
[17:39] <racarr> then it returns to the SessionMediator (not sure it needs to happen after done->Run())
[17:39] <racarr> but, what does this function apply_surface_attributes look like? I mean it's not an interface because it's just...do_stuff(surface)
[17:39] <kdub> might not be, just musing a bit
[17:39] <racarr> and is it supposed to be written like
[17:40] <racarr> switch (surface_state): case maximized: unity_maximize_surface(), .... swtich(surface_focused): case focused...
[17:40] <racarr> etc...
[17:44] <racarr> kdub: Yes. thanks for the musings :) this is helpful
[17:47] <kdub> racarr, no problem :)
[17:48] <racarr> kdub: The CloggableEventSink solves another problem too
[17:49] <racarr> which is, say we have sorted out this focus stuff by setting it as part of construction, or even without client-focus-notifications
[17:49] <racarr> So, the SessionMediator invokes create_surface, then before calling done->Run()
[17:49] <racarr> the thread yields
[17:50] <kdub> right, and then the shell changes focus
[17:50] <kdub> in the time period, or something
[17:50] <racarr> yeah or maximizes the surface or whatever
[17:50] <kdub> EventSink, primarily, is not an interface which has any synchronization guarantees, its purpose is to send messages
[17:51] <kdub> i think a richer synchronization
[17:51] <kdub> even 'client ready for events' on msh::Surface, that is invoked after done->Run makes a bit more sense
[17:51] <racarr> I think the CloggableEventSink keeps it that way though, it's still not providing any synchronization guarantees to the msh::Surface, it's just sending messages
[17:52] <racarr> it's only the SessionMediator that knows about the synchronization
[17:52] <racarr> but hmm, yeah
[17:52] <kdub> right, so why not synchronize between SessionMediator and SessionManager then
[17:52] <kdub> instead of synchronizing between SessionMediator and EventSink, so that SessionManager can sync with Event sink too later :)
[17:53] <racarr> hmm, how
[17:54] <racarr> I guess I see two ideas, one could be maybe msh::Surface contains some attribute
[17:54] <racarr> client_ready_for_events
[17:55] <racarr> and it buffers the configuration events itself (i.e. like the cloggable event sink does now)
[17:55] <racarr> this was my original idea actually, but I was worried that this
[17:56] <racarr> distributes frontend state in to shell, i.e. msh::Surface doesn't really care what state the socket is in
[17:56] <racarr> so I thought maybe the SessionMediator should be responsible for
[17:56] <kdub> well, msh::Surface cares that a surface has been created
[17:56] <racarr> mediating the IPC synchronization requirements, with the msh::Surface interface. if that makes any sense.
[17:56] <racarr> Mm
[17:56] <racarr> I like the idea of
[17:57] <racarr> not creating the msh::Surface
[17:57] <racarr> until we have sent the response, i.e. like
[17:57] <racarr> SessionMediator::create_surface(params)
[17:57] <racarr> auto params_attributes_and_id = SessionManager::create_surface_for(session, params)
[17:57] <racarr> pack_response(); done->Run()
[17:58] <kdub> right, i just considered the id as part of the parameters above :)
[17:58] <racarr> SessionManager::...actualize_surface(id)
[17:58] <racarr> or something?
[17:58] <racarr> which creates the actual msh::Surface
[17:58] <kdub> haha, self_actualize(), reduce_karma(), balance_chi()
[17:58] <kdub> alan would love those names ;)
[17:58] <racarr> haha.
[17:59] <racarr> mir::shell::SurfaceEnlightener ;)
[17:59] <racarr> hmm ok. So I actually like this a fair amount my main concern is like
[17:59] <racarr> when are the other resources initialized, and such i.e.
[17:59] <racarr> in particular in error cases
[18:00] <racarr> i.e. what if we fail to allocate the buffers
[18:00] <racarr> it seems strange that we have already told the client they have received a surface
[18:02] <racarr> and im not entirely sure how we report the error
[18:02] <racarr> but that's probably sortable
[18:05] <racarr> I still don't know how to make the focus mechanism work in this model though...
[18:05] <racarr> also there is daniel's need fixing on not using attributes at all for focus :p
[18:05] <racarr> but even if that becomes something entirely seperate from EventSink
[18:05] <racarr> whatever this thing is will still need synchronization
[18:18] <kdub> racarr, if you take a look at the way i'm sending display info
[18:18] <kdub> (my MP up for review)
[18:18] <kdub> we can send things via protobuf a bit easier
[18:22] <racarr> kdub: ok ill check it out after lunch
[18:22] <racarr> lunch nowww
[19:10] <racarr> back
[19:13] <bschaefer> kgunn, hey, soo I saw that email, so ati, and nvidia are having problems starting up
[19:13] <kgunn> yes...so it seems
[19:13] <bschaefer> robotfuel, are there any machines that I would be able to ssh into?
[19:14] <bschaefer> strange indeed...and it looks like compiz is hanging on loading opengl...
[19:17] <robotfuel> bschaefer: it looks like ps-radeon-hd6870-he is open
[19:17] <bschaefer> robotfuel, awesome, thanks!
[19:18] <robotfuel> bschaefer: ps-nvidia-gs8400-le is also open with xmir on it
[19:18] <bschaefer> perfect, now hopefully I can figure something out :)
[19:21] <robotfuel> bschaefer: that one seem to work with xmir, the nvidia-gt640  had a black screen last week, today it's been doing a utah death test.
[19:21] <bschaefer> robotfuel, its fine to install u-s-c on the radeon one right?
[19:21]  * bschaefer checks if its running or not
[19:22] <bschaefer> robotfuel, hmm the radeon machine appears to be working
[19:22]  * bschaefer reboots just to check
[19:22] <robotfuel> bschaefer: I don't think the radeon machine has xmir on it, but it passed some phoronix tests this morning
[19:22] <bschaefer> robotfuel, whats the utah death test do?
[19:23] <bschaefer> robotfuel, well it had the mir serve rrunning in the background...
[19:23] <robotfuel> bschaefer: it tries to kill utah
[19:24] <bschaefer> hmm yeah:  /usr/sbin/unity-system-compositor --enable-input=false --from-dm-fd 9 --to-dm-fd 13 --vt 7
[19:24]  * bschaefer double checks the x log
[19:25] <bschaefer> yup so, the redeon machine appears to be working
[19:25] <bschaefer> and its using the u-s-c testing ppa
[19:25] <bschaefer> kgunn, ^
[19:26]  * bschaefer looks at nvidia
[19:28] <robotfuel> bschaefer: ok, I wasn't sure because of the last test run on that radeon machine, the non-xmir job ran after it and must have failed to provision the machine. but it's on an old jenkins server with known cobbler issues. The new jenkins machine has it's own cobbler server. :)
[19:29] <bschaefer> robotfuel, cool :), well im also going to go and make sure things are updated as well
[19:33] <kgunn> bschaefer: ? now i wonder what didrocks might have seen....whether or not it was on these machines....or some others
[19:33] <bschaefer> kgunn, well it seems like there are some updates...
[19:34] <kgunn> bschaefer: so it healed itself ?
[19:34] <bschaefer> kgunn, well im not sure, these updates could throw it all off :)
[19:35] <bschaefer> it would be strange if it did though
[19:37] <bschaefer> kgunn, hmm well the nvidia gs8400 seems to be fine, now to go update the radeon one...
[19:37] <bschaefer> I hope they don't just heal them selfs though...as when things do that they usually break again
[19:38] <olli__> hiho
[19:38] <olli__> in which BP is the bypass work captured?
[19:38] <olli> kgunn, kdub ^
[19:39]  * kgunn digging
[19:39] <kdub> https://code.launchpad.net/~vanvugt/mir/switch/+merge/178527
[19:39] <kgunn> https://blueprints.launchpad.net/ubuntu/+spec/client-1310-mir-xmir
[19:39] <olli> https://blueprints.launchpad.net/ubuntu/+spec/client-1310-mir-xmir
[19:39] <olli> heh
[19:39] <kdub> oh, blueprint, not mp :)
[19:39] <olli> thx guys
[19:45] <bschaefer> kgunn, robotfuel and updated radeon is working as well...
[19:45] <bschaefer> hmm possibly didrocks was running into something that was fixed already?
[19:46] <kgunn> weird
[19:47] <bschaefer> yes indeed...
[19:49] <kgunn> robotfuel: so you got the standalone X runs of phoronix across all the new platforms ?
[19:50] <kgunn> brb guys...
[19:51] <robotfuel> kgunn: we are testing utah first to make sure it's stable. I setup all the machines on friday to do a death test on the utah and found we needed more loop devices on the new server, I want to get 100 test runs with the new server config before we move to start testing X.
[19:51] <tvoss> ffs
[20:33] <kgunn> robotfuel: do you mean 100 utah death test runs
[20:35] <robotfuel> kgunn: yes, we are at 28 of 100 now. so we can start the X testing tomorrow if we have utah stable.
[20:46] <olli> kgunn, robert_ancell, RAOF, what's the status of upstream acceptance? I see activity on all but nouveau and mesa, how far/close are we?
[20:46] <olli> and I admittedly only looked into the July archives ;)
[20:46] <robert_ancell> olli, otp, be back in 5
[20:47] <olli> robert_ancell, ack
[20:56] <kdub> yay, found a spare monitor in the garage
[21:04] <robert_ancell> olli, RAOF is not online yet, but I think he said good progress on the X patches. I don't think any high level "would we accept this" has been done yet, more "does this work correctly"
[21:05] <robert_ancell> olli, at least some of the patches are not complete enough for upstream to consider landing them, I think mesa was in that case
[21:05] <olli> robert_ancell, mind following up when he is on and then either update me via mail or directly in a slide that I will ping you
[21:06] <robert_ancell> olli, yep, will ask him when he comes online
[21:07] <olli> robert_ancell, you should have received a ggdoc mail with the doc
[21:07] <robert_ancell> olli, looking..
[21:08] <olli> robert_ancell, thx
[21:50] <kdub> whoohoo, display resize requests are working reasonably well... few dings to hammer out
[21:50] <kgunn> kdub: that's great....feeling better about multimon by the moment
[23:21] <RAOF> olli: Nouveau will be easy, once the Xserver patches land; we only need to satisfy mlankhorst there ☺
[23:22] <RAOF> olli: I need to give mesa a prod, but I'll do that once I can include radeon support in there - the dma-buf patch to make that work is now on the lists (*all* the lists!).
[23:30] <robert_ancell> RAOF, hey, does XMir need any updating to work with the display configuration changes in mir r925?
[23:31] <RAOF> robert_ancell: Shouldn't, but we should now be able to actually do RANDR.
[23:32] <kdub> no, not yet :)
[23:32] <robert_ancell> RAOF, I just tried the latest mir+u-s-c combination for the system-compositor-testing PPA, but X doesn't seem to complete starting up
[23:32] <robert_ancell> i.e. black screen
[23:32] <RAOF> kdub: I think there's enough there to do the read-only bit of RANDR, at least.
[23:32] <kdub> that just gets across the ipc barrier, still working on the server-side display configuration (focus based)
[23:33] <kdub> not all the bits are hooked up serverside, should be soon though
[23:34] <RAOF> robert_ancell: I'll have a look.
[23:34] <robert_ancell> I'm just recompiling X here just to double check
[23:35] <RAOF> I did fix a problem where libmirclient would segv, but you're obviously not seeing that.
[23:36] <robert_ancell> no
[23:40] <bschaefer> robert_ancell, what card are you on? As I tested out ati/nvidia today and both were working
[23:40] <bschaefer> though there were some reports of black screening from didrocks...
[23:40] <robert_ancell> bschaefer, intel
[23:40] <bschaefer> hmm well hopefully rebuilding X fixes that :)
[23:41]  * kdub tried intel today, at least the basic mir test programs seemed ok