= 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