wiki:Simons5YearPlanRetrospective

Version 1 (modified by Jon Davis, 2 weeks ago) (diff)

--

5-Year Plan: A Retrospective

by Simon Fraser

5 years ago, in a meeting room not so far away…

  • DOM Event Loop
    • Started working on it.
    • Now called the Event Loop
    • Benefits and problems are still accurate
  • Render Tree Refcounting
    • Not done this
    • Haven’t found a real need to do this yet
  • Painting: Display Lists
    • Have done experiments
    • Testing with MotionMark is a performance regression
    • Lost parallelism
    • Didn’t turn it on, may come back and revisit it
  • Image Decoding
    • Knew we had problems with this on main thread
    • Decoding sync on main thread
    • Can’t do it by default because of flashy painting
    • Added decoding=async on img element to turn it on
    • Or call API to ask for decoding on image and get a Promise
    • Async decoding on first load
    • This is done and we’re pretty happy with it
  • Layout State Machine
    • Making it harder to make mistakes interacting with RenderTree
    • Be on a call stack iterating on layer list for hit testing
    • Detect when mistakes happen and trigger assertions
    • Fixed a bunch of issues of mutating trees in the middle of…
    • Big benefit of event loop is: move all code that fires events to updateRendering steps and other well defined places
    • Made good progress
  • Compositing
    • Downstream was making compositing decisions by looking at whole list of drawing commands
      • Haven’t done it
      • Earlier this year I did compositing updates are incremental with dirty bits
  • Hackability
    • RenderRegions were removed which was good
    • Working on inline layout
      • Goals to simplify inline layout code
    • ScrollableArea and FrameVIew
      • Nothing really changed
      • State of FrameLoader et. al… still not great
    • Relationships between Document Frame, Dom Window and page are still pretty confusing
    • Selection still has specialized versions
  • Threading
    • Can we do more in threads?

4 years ago, in the same meeting room not so far away…

  • Optimizing layout
  • IndexedDB optimizations
  • Cleaning up loading code
  • Page cache clean up
    • We’re doing it!
  • CSS properties status JSON and on webkit.org
  • Event Loop
    • Same stuff, making progress
  • Fetch API
    • Done
  • Service Worker
    • Done
  • Intersection Observer
    • Done
  • Scroll-linked Effects
    • Some work, but no really progress
  • Houdini proposal
    • Prototype of custom paint, but no where accessible
  • Page & Friends
    • Too many scrolling architectures
    • iOS WK1 is different, iOS WK2 uses UI side compositing
  • Code Organization
    • PAL library
      • Some of its there
  • Layout & Rendering
    • Fundamentally hasn’t changed
    • LFC work is still underway, beyond experimental
      • Rewrite of the layout code
      • Making good progress
      • Block layout 80-90% done
      • Now doing table layout
    • Inine layout work too
  • Remove widgets
    • Still have them
    • Need to get rid of it
  • Continuations
    • Nothing happened
  • Compositing
    • Still do compositing updates on every forced layout
    • Ideally only once every rendering step
      • Hoping to do it this year
  • Debuggability
    • Log Channels: new log channels
    • Use TextStream to make things log-able
    • I want to log a RenderStyle and only the properties different from the default
      • And show diff
    • Still have progress to be made
  • Next Year
    • Figure out where logging goes