- From: Justin Uberti <juberti@google.com>
- Date: Thu, 5 Feb 2015 15:43:26 -0800
- To: Adam Bergkvist <adam.bergkvist@ericsson.com>
- Cc: Martin Thomson <martin.thomson@gmail.com>, public-webrtc <public-webrtc@w3.org>
- Message-ID: <CAOJ7v-1Uc0=k3j391_JYNSR1j4Yr3V+mMR3JfrixXEh-h2605A@mail.gmail.com>
On Thu, Feb 5, 2015 at 2:21 AM, Adam Bergkvist <adam.bergkvist@ericsson.com> wrote: > On 05/02/15 00:08, Martin Thomson wrote: > > I think that's almost right. > > Great. Let's figure out what we need and make a patch. > > > My initial thought was to formulate it as: when any operation > > completes and the state is "stable", then consider the conditions for > > firing the event. I.e., have any changes to the session been > > requested that aren't reflected in the current session state. I think > > that you also need to consider updateIce in addition to > > addStream/createDataChannel > > Yes. updateIce() might also be a trigger. > FWIW, soon to be renamed setConfiguration(). Note that addIceCandidate is not a trigger, despite changing 'state', although not .signalingState. Also; should .onNN fire for an initial addTrack, before any setLD/setRD? I forget what our thinking has been on this. > > > I don't know that the queue being empty is a necessary condition. I > > think that it is probably OK to fire the event even though there is > > something enqueued that might cause a transition out of the "stable" > > state. > > The intention with waiting for the queue to drain is that there might be > operations queued that, when completed, makes negotiation unnecessary. > For example, a setLocalDescription that updated the localDescirption to > match the added tracks. > This seems like it might be difficult to implement. > /Adam > > > > > On 5 February 2015 at 00:59, Adam Bergkvist <adam.bergkvist@ericsson.com> > wrote: > >> Hi > >> > >> The negotiationneeded event is pretty underspecified at the moment. This > >> is an attempt to fix that. > >> > >> It's actually easier to reason around this in the terms of when the > >> event should *not* fire, even though you did something that eventually > >> needs negotiation. > >> > >> The following is a list of triggers that *may* result in queuing of a > >> task to fire negotiationneeded (but it may be prevented by conditions in > >> the next section). This list will be extended as new functionality is > added: > >> > >> * The operations queue[1] becomes empty and it did have state changing > >> operations (e.g. setLocal/RemoteDescription) queued since the last time > >> the queue was empty. > >> * A new track is added or removed > >> * The first DataChannel is created > >> > >> The following situations *prevents* a task to fire a negotiationneeded > >> event to be scheduled: > >> > >> * There's already a task scheduled to fire the negotiationneeded event. > >> * The operations queue is not empty > >> * The signaling state is not "stable" > >> * Both the following statements are true: > >> - DataChannels have been created, but the association is present > >> pc.localDescription > >> - All added tracks are represented in pc.localDescription > >> > >> If none of the bullets above prevents the event to fire, a task must be > >> scheduled to do the event firing. When that task is picked up, it needs > >> to check that the signaling state is "stable" before firing. > >> > >> /Adam > >> > >> [1] The operations queue is the functionality that ensures that certain > >> operations (e.g. createOffer and setLocalDescription) are only executed > >> one at a time. > >> > > > > >
Received on Thursday, 5 February 2015 23:44:14 UTC