[Houdini] Minutes Sydney F2F 2016-01-30 Part I: Agenda and Goal Setting

=======================================================
  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.
=======================================================


Agenda and Goal Setting
-----------------------

  - Rossen opened the meeting with a conversation to re-dedicate the
      group to the ambitious goals that Houdini was started with by
      looking at how C++ handles extensibility and how CSS can move
      in that direction.
  - Box Tree API was brought up as potentially unnecessary, though
      others believed that it could be used as a umbrella spec used
      to describe the foundations that other specs will reference.
  - There were two approaches mentioned for handling early-stage
      specs: A spec with a lot of issues or a ReadMe without a spec.
      - Both approaches had proponents so the selection between the
          approaches will be in the spec author's hands.
  - RESOLVED: Change the name of 'CSS Async Style' to 'Composited
              Animation and Scrolling'
  - Several specs were mentioned as close to FPWD, specifically
      TypedOM, Worklets, Properties & Values, Paint and the group
      decided to work on getting those to FPWD during the F2F.

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

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

Present:
  Rossen Atanassov (Microsoft)
  L. David Baron (Mozilla)
  Bert Bos (W3C)
  Rick Byers (Google)
  Tantek Çelik (Mozilla)
  Emil Eklund (Google)
  Simon Fraser (Apple)
  Joone Hur (Intel)
  Koji Ishii (Google)
  Dean Jackson (Apple)
  Ian Kilpatrick (Google)
  Peter Linss (Hewlett-Packard)
  Cameron McCormack (Mozilla)
  Simon Pieters (Opera)
  Elliott Sprehn (Google)
  Shane Stephens (Google)
  Surma Surma (Google)
  Alan Stearns (Adobe)
  Xidorn Quan (Mozilla)
  Ojan Vafai (Google)
  Jet Villegas (Mozilla)
  Ian Vollick (Google)
  Philip Walton (Google)
  Levi Weintraub (Google)
  Greg Whitworth (Microsoft)
  Steve Zilles (Adobe)

Regrets:
  Tab Atkins (Google)
  Dael Jackson (Invited Expert)

Scribe: shane

Agenda and Goal Setting
=======================

  Rossen: Looking at the wiki, the agenda is light.
  Rossen: Yesterday, Shane & I were chatting about how to kick off
          meetings. I gave him a quick sketch that I've been using
          internally.
  [https://lists.w3.org/Archives/Public/www-archive/2016Feb/0002.html]
  Rossen: We're going to use that sketch now to give us some focus
          for what we're after and what we want to pursue.
          Afterwards we'll hopefully end up with an actionable
          agenda.

  Rossen: When we look at the web platform, we have a platform of
          network, parsing, DOM, CSS, layout, composition, render,
          input.
  Rossen: If we think about this at the level of extensibility, if
          you're a C++ dev then you can make changes to the entire
          platform.
  Rossen: If you look at this from a JS point of view, though - DOM
          has pretty much 100% ability to interact with the model,
  Rossen: With a well defined public object, Element, and a good API
          surface.
  Rossen: So extensibility in DOM is pretty well covered.
  Rossen: In CSS, you have CSSOM, you can access stylesheets and
          play with style sheets, however if you want to extend this
          you can't - you can't define your own properties or
          values, interact inside the cascade, etc. So CSS is
          *somewhat* available but there's a lot missing.
  Rossen: Layout you can do a bunch of read-only callbacks. These
          are on the element, you can't interact with layout object
          directly.
  Rossen: Composition and rendering you get basically no access,
  Rossen: although perhaps Canvas is in this level.
  Rossen: Input has some primitive events that you can use to try to
          participate in the pipeline, but it's not overall well
          defined.
  Rossen: So bottom line, if you want to extend the platform e.g. by
          adding a layout feature...
  Rossen: In JS, you are forced to loop through the whole pipeline
          so it's very inefficient. If you want to add the feature
          in C++, you just add it.

  Rossen: So what are some of the mechanisms that make things easy
          in C++? There are a couple of things working for us:
  Rossen: (1) strict rules, experts, code reviews
  Rossen: (2) well defined internal objects to hang extensions off
  Rossen: If we were to try and lift that extensibility to the JS
          level, our current efforts in Houdini have been focused on
          extending e.g. paint - participating in paint.
  Rossen: We've also talked about custom properties and values.
          There has been some interest (but no action yet) in terms
          of the parser.
  Rossen: There's been efforts and interest in the input pipeline,
  Rossen: and we've discussed layout and layout API.

  Rossen: So when I look at this picture, the one thing that is
          immediately obvious is that this well defined Element,
          although it corresponds to the DOM, it is not just DOM. It
          gives you a lot more - lifetime, etc. - and you can use it
          to impact the platform in various ways.
  Rossen: For the rest of the platform, we have some kind of object
          internally in all our implementations - for now I'm going
          to call it the 'view' object. They're similar to Elements (
          collections of properties and values) but distinct.
  Rossen: All of the CSS properties we have today are applicable to
          the Element object but not to the View. In CSS we have
          this problem where whenever we add a new property there's
          a giant matrix of interplay with other properties.
  Rossen: The view object, at least in our implementation, has
          really well defined properties, but they have nothing to
          do with the Element. Things like width, height, custom
          rendering methods, etc.
  Rossen: A lot of what we're doing internally is trying to figure
          out how to focus most of the intensive stuff (animation,
          etc.) from layout down. We do this by trying to only
          animate or change the view object properties.
  Rossen: Unfortunately this is not always possible.

  Scribe: leviw

  Rossen: Layout and paint APIs are applicable to the view API.
  Rossen: Given that there's not much of an agenda for the few days
          that we're here, lets go back to the procedural things for
          these meetings.
  Rossen: We can try to spend some time this morning discussing the
          big picture and what the things we're looking to achieve
          are. What the things we believe should be there.
  Rossen: ... things like the view object.
  Rossen: We did something like this in Paris where we sampled the
          developers and....

  Scribe: shane

  Rossen: If we're as ambitious as we were a year ago, we shouldn't
          be shying away from the really hard problems.
  Rossen: Layout, input - these are going to be hard problems.
  Rossen: We don't need to figure them out completely now, but
          shouldn't be putting them away completely either.

  rbyers: Even if not exposing view object, what can we say about it?
  Rossen: Actually there's a spec that we're going to work on -
          process model for Houdini - that will outline how all of
          these things fit together, explain the role of view
          object, etc.
  dbaron: How does what you're calling the view object differ from
          what we were talking about as the box tree?
  Rossen: It doesn't - I'm keeping it vague deliberately - not
          necessarily a single box per view object. Speaking for our
          implementation only, we have different objects based on
          element type and box. They might be present but aren't the
          box itself - e.g. parts of the box, things for composition
          or manipulation.
  Rossen: So I'm not imposing a name, but I'm trying to avoid
          calling it a Box for now.
  Rossen: But in terms of referential integrity, it's mostly the box
          which would be backing up the view object.

  heycam: Has it been discussed before how fine-grained the view
          objects are?
  Rossen: Yes, in the context of the box tree. e.g. what are all of
          the inline fragments that are not necessarily backed by
          HTML elements, but ranges of content instead? Definitely a
          type hierarchy of objects that can be exposed to implement
          everything.

  rbyers: One piece missing: compositing. We don't have anything to
          explain this, but can't explain e.g. scrolling without
          compositing. Need some kind of compositing API.
  Rossen: What sorts of stuff would go in here?
  rbyers: Our opinion is that there should be an API that lets you
          run script in a way that is typically synchronized with
          compositor.
  rbyers: It's known as async style, or as compositor worker. Async
          style is a weird name because it encompasses scrolling
          things too, which are not CSS related.
  SteveZ: I'm confused by "scrolling is not CSS" - most of this
          diagram is not CSS.
  shane: Is it just a naming thing?
  rbyers: You could ask same question about layout - is it really
          'css'-layout-api?
  rbyers: I'd like to believe that part of what we're doing is
          enabling CSS to be swapped out,
  rbyers: not that we necessarily should.

  Rossen: Let's go through the specs. Aim is to get something to
          look at today and tomorrow. One idea is to spend the time
          getting specs ready to ship as FPWD - seems quite
          actionable. Allows people to continue implementation
          experiments.
  Rossen: I'm looking to see how we can move from 'we can' to 'we
          are'.
  rbyers: One powerful idea - these are all complicated topics.
          Can't solve just with design and speccing. So for me, 'we
          are' is 'we are shipping features that are built
          internally on these primitives'.
  shane: Does it help improve confidence in the APIs if we are doing
         this with Chrome?
  smfr: It does to the extent that it shows the APIs are viable but
        also there's a risk of lock-in.
  rbyers: We need to be very humble about changing to keep up to
          date with evolving specifications.

  Scribe: iank

  shane: I'm just going to take us through the specifications that
         we have on drafts.css-houdini.org
  shane: I'm going to make some strong statements here:
  shane: Box Tree API, I get the impression that we don't need this
         spec anymore, we don't need this Box Tree API. There for
         two reasons, (1) as a measurement API (2) to help support
         some of the layout API to do fragmentation cases.
  shane: The first of the two use-cases is not very useful, as we
         need a frame of lag between the frame, (2) is better to
         roll directly into the layout API.
  shane: I don't think we should keep working on the API.
  rbyers: Should we still have some spec that talks about views?
  Rossen: I hope that this would be the "umbrella" spec, which talks
          about the main building blocks for the specs.
  Rossen: It's a framework, it makes it easier to talk/argue about
          things.
  Rossen: I'm impartial about the Box Tree API for that reason.

  shane: Should we resolve to drop the Box Tree API spec?
  plinss: I think that this is premature.
  plinss: I don't think we should resolve not to do this.
  shane: We want to drop the "API" part. The "umbrella" spec should
         define what the internal "view" object is and does, talk
         about its lifecycle, actions, etc. The ways of accessing
         that, in the future we may want to do that; however at the
         moment, we have better APIs like IntersectionObserver etc.
  shane: The fragmentation use-cases, building new boxes, etc, we
         should roll these into the Layout API.
  plinss: The other specs need to be able to reference these things,
          I don't care about the document that they go in.

  SteveZ: The API suggestions there didn't work, we should point to
          where these things will be defined in this document.
  shane: The "umbrella" spec should provide a really good model
         about these things.
  iank: I think the "umbrella" spec should cover most of these things.

  shane: CSS Async Style; is currently empty, people know this as
         Compositor Worker, a really solid explainer document would
         help a lot.
  shane: Same for the Layout API; create a Layout explainer.
  dbaron: It's also useful to have a history for things that we
          thought about.

  ojan: Can we just have an emeritus section?
  rbyers: Can just place these in the folders which have the spec?
  shane: Yup.
  shane: We will have a README.md for async style, and then
         eventually a spec.
  ojan: A good example of this is IntersectionObserver for this,
        nice easy explainer that is accessible for devs and spec
        authors, with the spec for spec authors.
  shane: We should leave it at the more understandable rather than
         completeness.
  shane: I think the CSS Paint API is pretty good at the moment.

  dino: Can we change Async Style to something that makes more sense?
  shane: Lets just call it Compositing for now.
  zcorpan: It was pointed out that there is already a compositing
           spec. (compositing and blending).
  esprehn: Composited Animation and Scrolling?

  RESOLVED: Change the name of 'CSS Async Style' to 'Composited
            Animation and Scrolling'

  Rossen: Concerned that we'll still have things on the list,
          because they're too hard, and pushing them off to later.
  shane: I don't think that is happening.
  esprehn: Instead of having an ED, we should just have an explainer.
  Rossen: I'm not pushing back on this, I just don't want to push
          things hard away.
  esprehn: I think that we want to think about this more.
  dbaron: I don't think that that has to be done in an explainer,
          you can do this in a spec, with a bunch of issues.
  esprehn: I find those hard to parse.
  SteveZ: I think that there are two issues (1) easy for new people
          to understand, (2) driving work forward; for (2) I don't
          think that the type of document will matter.
  dbaron: That there is a bunch of stuff that we agree on, that
          isn't written down anywhere.
  shane: We sort of have this issues in CSS.
  dbaron: Less as TabAtkins and fantasai write this all down.

  dino: Can we agree that putting them anywhere is better than
        putting them in the minutes?
  shane: They are just a place for people to talk about them
         informally.
  shane: Think about them however you want.

  shane: CSS Properties and Values API; first part of this is pretty
         solid, people can start implementing this, the one concern
         that we have if the apply hook is worth it? We should just
         drop apply hook for now; and see if we need it later.
  heycam: What things does the apply hook do?
  shane: Adjust style properties of an element based on another
         property.
  rbyers: Scroll API, I think that we want a spec here, I should
          write down an explainer here. On blink we call it scroll
          customization, or scrolling extensibility.
  rbyers: On the naming of these, they are all about extensibility,
          CSS Layout Extensibility API?
  shane: TypedOM. There's solid ideas here, by no means complete,
         very large surface area.
  shane: Font Metrics, very much like parser, lots of talk, but
         nothing written down.
  iank: Worklets, are pretty good, rebuilt on modules, would like to
        sit with other implementors and talk about anything that
        might be content.

  shane: Paint, Worklets, Typed, P&V all have drivers, should get to
         FPWD.
  shane: Make TabAtkins drive parser API more.
  Rossen: glazou is already driving it.
  shane: Sure lets leave it that way.
  shane: Async Style, vollick to create explainer.
  shane: Scroll API, rbyers create explainer.
  shane: Layout, iank & Rossen have been working ideas on this.

  jet: We have been getting requests for a css binary representation
       for pre-compute selectors and other things.
  shane: That could be another spec.
  rbyers: That could be a use-case for the parser API.
  Bert: Is the goal to make it faster or to make it smaller?
  jet: These are people that see CSS as the next target for
       something like WebASM.
  shane: We've had experiments in the past were if you simplify some
         rules, you get some things faster.
  ojan: We did some experiments with HTML parser were it got 20x
        faster. could do similar things for CSS.

  shane: Second question that I had is that do we want to go through
         each spec in one big group or split up into smaller group.
  astearns: I think smaller groups make sense for explainers / for
            things with FPWD makes sense for the whole group.
  ojan: Would like to get TypedOM, Worklets, Properties & Values,
        Paint to FPWD so that we can get implementations.
  shane: Do we make this our primary goal is to get paint to a
         primary goal?
  Rossen: get we get a show of hands?
  <everyone raises hands in the air>

Received on Sunday, 21 February 2016 19:46:30 UTC