[Houdini] Minutes Sydney F2F 2016-01-31 Part IV: Scrolling Extensibility, Meeting Wrap-Up

=======================================================
  These are the official Houdini Task Force minutes.

         Unless you're correcting the minutes,
        please respond by starting a new thread
           with an appropriate subject line.
=======================================================


Scrolling Extensibility
-----------------------

  - rbyers presented a demo and the use cases that they're currently
      considering for scrolling extensibility.
      - Each of the use cases had follow-up questions, but no one
          objected to the direction the spec if going in.
  - RESOLVED: Flesh out the explainers for compositor worker.
              Experiment more and share data.

Meeting Wrap-Up
---------------

  - RESOLVED: Publish FPWD of Worklets Level 1
  - RESOLVED: Publish FPWD of CSS Paint API Level 1
  - The May meeting was discussed and most people wanted to meet
      adjacent to the CSS meeting again.
  - There's hopes that properties and values will receive FPWD
      during the CSS meeting over the next few days.

===== FULL MINUTES BELOW ======

Agenda: https://github.com/w3c/css-houdini-drafts/wiki/Sydney-F2F-January-2016

Scribe: vollick

Scrolling Extensibility
-----------------------

  rbyers: So I thought what would be useful was to talk about some
          richer scroll customization use cases.
  rbyers: I've written up an explainer that goes over the basics and
          has some code.
  rbyers: Finally, I've got at demo that I can show.
  rbyers: We talked about scrollers with cw, but the key difference
          with hidey bars is that you have to know about scroll state.
  rbyers: There's a bunch of extra complexity with this, but I would
          like to be able to be able to implement our "top controls"
          this way, but it's currently really hard.
  rbyers: Rubber banding is another interesting case. We're actually
          changing how the scroll input effects the output (to
          introduce drag).
  rossen: How's rubber banding different than pull to refresh?
  ojan: Is it a strict subset?
  rbyers: Yeah, there's some fancier stuff you can do with p2r, but
          we usually start with rubber banding as it's simpler.
  rbyers: We tried to build a p2r component for the web that was as
          good as twitter's native and could only get to 90% and
          that informed our approach.
  rbyers: For example, when you start showing the p2r affordance,
          the metaphor is that you're pulling a spring.
  rbyers: If you change direction and the thing that happens isn't
          that the spring contracts, it seems unnaturally.
  rbyers: So you want to have control over who the scroll gets
          shunted to.
  rbyers: We also want to be able to implement scrolling by
          adjusting something other than scroll top.
  rbyers: We want it like regular scrolling in how it composes,
          flings, accessibility, but we want to drive a rotation.
  rbyers: ..for example.
  rossen: I can you show that demo.
  rbyers: <shows the demo>

  rbyers: Currently when people want to implement this themselves,
          they have to re-implement the world in JS and is a part of
          the reason we only get to 90%.
  rbyers: There are other cases where we don't want to change how
          scroll is applied, we want to redirect the scroll to the
          right scroller.
  rbyers: One case we hit was where we hit the bottom of a scroller
          in a fixed:pos element and we don't want the bubbling to
          start scrolling the document..
  rbyers: We want to implement Microsoft's scroll chaining with
          scroll customization primitives.
  rbyers: Facebook says that they use wheel listeners _only_ for
          this purpose (to prevent scrolling the wrong thing).
  heycam: This could also prevent you from zooming in on your map.

  rbyers: <presents a demo showing the android "tongue" that appears
          when you overflow and shows how it needs to know where
          your finger is to glow in the right spot>
  rbyers: err, overscroll.
  rbyers: This is the end of the use cases. There are also some
          links to some other effects at the bottom of the doc (
          added by Florian)
  rbyers: Are we missing any cases? Are there cases we don't care
          about?
  <rbyers> Use cases:
https://github.com/w3c/css-houdini-drafts/blob/master/scroll-customization-api/UseCases.md

  ojan: As I'm skimming through the use cases. p2r in particular;
        I'm not seeing mention of the effect that appears as you
        show the p2r affordance. Is that mentioned?
  rbyers: No, it was missed. There's often a little twister or
          something...
  rbyers: <adds prose to the use case live>
  ojan: There's a huge variety of things people do here, which is
        why I bring it up. Maybe they shouldn't, but..
  <rbyers> Explainer:
https://github.com/w3c/css-houdini-drafts/blob/master/scroll-customization-api/explainer.md
  rbyers: So here's the start of the explainer.
  rbyers: I'm linking to one popular library, iscroll, that
          reimplements the world.
  rbyers: This has these downsides. 1) no threaded scrolling. 2) not
          hooked into assistive technologies. 3) it's possible to
          get stuck in them (they don't compose).
  rbyers: 4) doesn't feel native; doesn't match platform physics.
  rbyers: For now, we're trying to build on compositor worker. We
          think that this an orthogonal concept and that we should
          be able to disable threaded scrolling.
  rbyers: This is controversial and is currently out of scope...

  ojan: Can I add something most UAs have both a main and scroll
        thread so it has to work in both?
  rbyers: The edge only has one path, right, but can be joined with
          the main thread?
  rbyers: It describes scroll intent, the thing that appears
          directly out of wheel touch keyboard or scrollbar dragging.
  rbyers: The intent has stuff like delta velocity phase etc,
  florian: Does this include things that the user didn't do?
           Programmatically scrolling something, for example?
  rbyers: No. Initially we included things like scroll into view,
          but it didn't help with the use cases.
  rbyers: home/end are kind of special and we don't consider them a
          scroll intent because they're absolute.
  tantek: Arrows can be ambiguous, either scroll or something else.
  <tantek> or directional navigation
  <tantek> per CSS3-UI
  rbyers: Don't worry too much about the details, but we want to
          hook some custom logic that translates the scroll intent
          into scroll application.

  rbyers: Here's an example using the CompositorWorker placeholder
          syntax.
  rbyers: It describes a carousel example that takes the scroll
          delta and applies it to the x rotation.
  rbyers: We have an API that lets you report what amount of scroll
          intent you've consumed.
  rbyers: For example, we may want to shunt horizontal scroll to one
          elem, but vertical scroll to another.
  rbyers: Anyone have a question on the big picture, pulling out the
          intent to scroll.
  smfr: It seems weird that you manipulate the scroll intent. Why
        not return the delta?
  rbyers: Part of the reason is historical to support bubbling. but
          if we start scroll latching, this may not be necessary.
  rbyers: If we really do want to affect many scrollers,
          conceptually, we want to imagine the scroll intent flowing
          through the scrollers.
  smfr: I think you could do something functionally the same by
        returning the used delta.

  ojan: Do you support changing velocity?
  rbyers: We only support changing the delta currently.
  rbyers: If we scroll by one pixel, do we really want to let you
          scroll 100 and potentially show the top controls.
  rbyers: So we've restricted it to be consuming an amount from the
          given delta.

  esprehn: Can you explain how p2r works in this model?
  rbyers: There's a bunch of models, but in our primary demo, once
          you get to the point that you show the affordance, we
          transform the whole scrollable area..
  esprehn: That will shift the scrollbar.
  rbyers: Maybe that's not the right way to do it. Let's talk off
          line.
  esprehn: You want to show padding..
  rbyers: We could imagine scrolling at 100 and then scrolling to
          the top adds friction.
  rbyers: Maybe the right place to start is rubber banding because
          it's simpler.
  florian: There's an interesting round display use case. The top is
           narrow so you want to squish content at the top of the
           display as it scrolls by.

  ojan: That whole discussion made me wonder if we should just allow
        negative values.
  smfr: We report them but it sometimes causes problems because the
        code doesn't expect it.
  rbyers: If you opted in, might be ok.
  ojan: In addition to that we could let it accept negative values
        if you set it.
  ojan: Don't see why not unless it's an egregious compat problem.
  esprehn: Is there any standardization behind the Microsoft
           properties?
  esprehn: In particular the chaining one.
  rbyers: We wanted to build it on the primitives, but if it was
          urgent, we could implement it.
  esprehn: Something as obvious as turning off chaining would be
           useful, in addition to scroll customization.

  rbyers: <prepares to show demo>
  rbyers: <demo is of a cylindrical scroller that turns in response
          to scroll>
  rbyers: Notice that if you scroll in the y-direction, it scrolls
          naturally using platform scroll logic + fling.
  rbyers: Scrolling in x rotates the carousel.
  rbyers: <steps through the code>
  surma: By eating scroll x means you'll never "get to the end"
  rbyers: Yeah, because we've reimplemented scrolling, we can scroll
          forever in that direction.
  rossen: And if you want to allow chaining...
  rossen: For example if after 180 degrees you want to bubble.
  rbyers: Yeah, you add a conditional to stop consuming deltas after
          180 degrees and it will propagate.
  smfr: Naturally you would want this to come to rest on a cat in
        the carousel.
  rbyers: Yeah, we haven't hooked snap points into this.
  rbyers: We may be missing primitives about exposing platform
          curves, but currently we just take over fling when it
          starts.
  smfr: But if you're combining this and scroll snap, which comes
        first?
  rbyers: There's interesting API decisions. We may have multiple
          scroll modifiers. You may want the consumer to compose both.
  rbyers: We have this problem with other Houdini APIs because we
          don't have CSS compositor.

  rbyers: That's about all I've got. Our implementation does have
          some more complexity. "distribute scroll", for example,
          which is related to scroll bubbling.
  rbyers: The document passes the scroll delta to each scroller in
          the chain so that they have an opportunity to act.
  rossen: What happens if you call scroll to?
  rbyers: It's not an overflow scroller, so as far as CSS is
          concerned, it's not scrolling.
  esprehn: If it's not scrollable how did it get scroll intents.
  rbyers: By registering an apply scroll hook.
  smfr: It's like a wheel event handler.
  rbyers: It's similar but at a lower level.
  rbyers: Our next steps for scroll customization and compositor
          worker is to finish implementing scroll snap and position
          sticky.
  rbyers: We know there will be some overhead by using JS, but we
          should be able to compare with native implementation to
          gather any other numbers?
  rbyers: Anything else you would like to hear?

  esprehn: I'm interested in hearing your opinion smfr. You scroll
           in the ui process, right?
  smfr: Yes, this would involve going back to the renderer. It's no
        different that compositor worker. I'm not overjoyed about it.
  rbyers: Does it really have to be in the same process? It just has
          to be typically in sync.
  rbyers: You, e.g., control input on the ui thread.
  ojan: < shared a potential bubbling eg >
  rbyers: Since we have scroll latching on iOS, then we're only
          going to be scrolling a native or a custom scroller.
  ojan: Where do we chain today in chrome?
  ojan: If we don't bubble, why consume at all?
  rbyers: Some composition cases. eg, hidey bars. one impulse may
          scroll a bit and the leftover may need to be sent to the
          native scroller.

  esprehn: My question is that it feels like we need implementation
           experience. Our architecture is more amenable to this,
           but could we in 6 months, say, could he do an
           investigation?
  smfr: It's more than an afternoon and couldn't commit in 6 months.
  esprehn: The primary risk of this API that's ahead of its time
           that may be unimplementable in another UA.
  smfr: If we had to choose between this and compositor worker, we'd
        probably choose compositor worker.
  ojan: To judge the feasibility of our stuff, seeing CW would be
        very informative.
  rbyers: I guess we should just be explicit about a design that
          could work in all the engines. And we would definitely
          block based on your feedback if we needed changes to make
          it more implementable in your engine.
  rbyers: But generally our approach with this stuff is not to block
          progress on the absence of feedback.
  esprehn: AI: finish explainer to the point to where someone can
           implement it.
  rbyers: That's a spec?
  esprehn: No, just something less handwavy than what you've got.
  ojan: For interop, yeah, we need a spec. But for "could we ship
        something vaguely like this" we need rough feasibility only.
  esprehn: We need something where we can start to experiment. And
           the feedback we're getting is that compositor worker is
           the place to start.
  smfr: We're much more likely to implement the small declarative
        features that will fix existing content.

  RESOLVED: Flesh out the explainers for compositor worker.
            Experiment more and share data.

  rbyers: Separately. scroll chaining might be something we just do.
  rbyers: Let's bring it to csswg.
  esprehn Do you know what it is?
  smfr: Nope.
  rbyers: <shows the -ms-scroll-chaining property>
  ojan: <described how chrome latches on mobile since recently and
        how chrome plans to move desktop to latching>
  esphren: If everyone always implemented -ms-scroll-chain:none
           always, we wouldn't need the property.
  rbyers: Well, might be nice to have the ability to bubble if you
          wanted, but we removed it and no one complained.
  rbyers: The potential follow-up is that since this is potentially
          crazy for safari, if you can think of other ideas for
          stuff like rubber banding in a declarative way? A scroll
          delta transformation function, maybe?
  rbyers: This is a case that I'm less convinced that we need the
          power of script.
  rbyers: Maybe a couple of declarative properties and latching is
          enough...
  ojan: I guess we're mostly done talking about scrolling.

  ojan: We may have beaten the topic to death, but I'd like to
        understand the performance concerns with running script
        async?
  rossen: We're always worried about folks writing slow code. This
          will always happen.
  rossen: But, assuming a middle ground where things are written
          "ok", the generic case.
  rossen: Yeah, I don't think I can bring anything new that I
          haven't said before.
  smfr: I'm more worried about the setup and teardown of global
        scopes than just the raw performance.
  smfr: And the security concerns.
  smfr: It couldn't fit in the UI process, so it couldn't be as fast.
  smfr: You can't have executable pages there.

  Scribe: rbyers

  vollick: But if it was async, you could post to another process
           right?
  smfr: But doesn't CW require it to be synchronous with scrolling?
  vollick: No, just best effort.
  ojan: I wonder if we could consider having more limited global
        scopes - could they be theoretically more efficient?
  vollick: Hopefully worklets wouldn't be coming and going very
           frequently.
  rossen: OK, we're done then.
  <gregwhitworth> https://github.com/w3c/css-houdini-drafts/issues/116
  <iank> https://drafts.css-houdini.org/worklets/.
  <zcorpan> iank: just filed
https://github.com/w3c/css-houdini-drafts/issues/120
  <zcorpan> iank: i guess interface Worklet shouldn't have that,
            though

Meeting Wrap-Up
---------------

  <Rossen> RESOLVED: Publish FPWD of Worklets Level 1
  <Rossen> RESOLVED: Publish FPWD of CSS Paint API Level 1

  <dbaron> We discussed next meeting, seemed to want to meet in May
           adjacent to CSS, and people seemed happy with May 12-13
           adjacent to CSS being May 9-11. And Google was going to
           look into Bay Area hosting

  Scribe: dbaron

  shane: On properties and values: dbaron convinced me about the
         special animation step not being needed. I had thought we'd
         need to alter the set of steps to run for resolving style
         would need to be altered, but one of those 2 things happens
         when triggering animation, not calculating current value,
         so there's no inconsistency.
  shane: The other thing is that animations and transitions already
         state that custom properties with a type should be
         animatable.
  shane: The only requirement is that the properties are of one of
         the animation types.
  dbaron: I think they should explicitly state that they have the
          animation type.
  shane: I hope for FPWD candidate by end of CSSWG meeting.

  <tantek> Thanks to Google for hosting!

Received on Sunday, 21 February 2016 20:06:46 UTC