{"id":1221,"date":"2016-10-09T15:59:19","date_gmt":"2016-10-09T13:59:19","guid":{"rendered":"http:\/\/blogs.igalia.com\/jfernandez\/?p=1221"},"modified":"2016-10-18T13:13:16","modified_gmt":"2016-10-18T11:13:16","slug":"web-engines-hackfest-2016","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/jfernandez\/2016\/10\/09\/web-engines-hackfest-2016\/","title":{"rendered":"Web Engines Hackfest 2016"},"content":{"rendered":"<p>Last week I attended the Web Engines Hackfest 2016, hosted by <a href=\"http:\/\/www.igalia.com\">Igalia<\/a> at the HQ premises in A Coru\u00f1a. For those still unaware, it&#8217;s a unconference like event focused on pure hacking and technical discussions about the main Web Engines supporting the Web Platform.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1274\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o.jpg\" alt=\"30147116385_9e2737ef4d_o\" width=\"589\" height=\"332\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147116385_9e2737ef4d_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 589px) 100vw, 589px\" \/><\/p>\n<p>This year there were a very interesting group of hackers, representing most of the main web engines, like Mozilla&#8217;s Gecko and Servo, Google&#8217;s Blink, Apple&#8217;s WebKit and Igalia&#8217;s WebKitGTK+.<\/p>\n<h2>Hacking log<\/h2>\n<p>This year I was totally focused on hacking Blink web engine to solve some of the most complex issues of the CSS Grid Layout feature. I&#8217;d like to start giving thanks to Google to join the hackfest sending Christian Biesinger, specially thanks to him because of the long flight to attend. It was a pleasure to work work with him on-site and have the opportunity to discuss these complex issues face to face.<\/p>\n<h3>Day 1<\/h3>\n<p>During the weeks previous to the hackfest I&#8217;ve been working on fixing the <a href=\"https:\/\/\/crbug.com\/628565\" target=\"_blank\">bug 628565<\/a>, reported several months ago but hitting me quite much recently. It&#8217;s a very ugly issue, since it shows an unpredictable behavior of Grid layout logic, so I decided that I might fix it once for all. I managed to provide 2 different approaches, which can be analyzed in the following code review issues: <a href=\"https:\/\/\/crrev.com\/2361373002\/\" target=\"_blank\">Issue 2361373002<\/a> and <a href=\"https:\/\/\/crrev.com\/2333583002\" target=\"_blank\">Issue 2333583002<\/a>. Basically, the root cause of both issues is the same; grid&#8217;s container <strong>intrinsic size<\/strong> is not computed correctly when there are grid items with <strong>orthogonal flows<\/strong>.<\/p>\n<p>There are 2 fundamental concepts that are key for understanding this problem:<\/p>\n<ul>\n<li>Intrinsic size computation must be done before layout.<\/li>\n<li>Orthogonal flow boxes need to be laid out in order to compute min-content contribution to their container&#8217;s intrinsic width.<\/li>\n<\/ul>\n<p>So, we had as single bug to fix for solving two different problems: unpredictable grid layout logic and incorrect grid&#8217;s intrinsic size computation. The first problem is the one reported in <a href=\"https:\/\/\/crbug.com\/628565\" target=\"_blank\">bug 628565<\/a>. I&#8217;ll try to describe it here briefly, but further details can be obtained from the bug report. Let&#8217;s consider the following code:<\/p>\n<pre lang=\"HTML5\">\r\n<style>\r\n   body { overflow: hidden; }\r\n<\/style>\r\n<div style=\"width: fit-content; display: grid; grid-template-rows: 50px; border: 5px solid; font: 25px\/1 Ahem;\">\r\n   <div style=\"writing-mode: vertical-lr; color: magenta; background: cyan;\">XX X<\/div>\r\n<\/div>\r\n<\/pre>\n<p>The following pictures illustrate the issue when loading the code above with Google Chrome 55.0.2859.0 (Official Build) dev (64-bit) Revision 3f63c614e8c4501b1bfa3f608e32a9d12618b0a0-refs\/heads\/master@{#418117} under Linux operating system:<\/p>\n<p><strong>Chrome BEFORE resizing<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1237\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-before-resizing.png\" alt=\"chrome-before-resizing\" width=\"561\" height=\"231\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-before-resizing.png 561w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-before-resizing-300x124.png 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/p>\n<p><strong>Chrome AFTER resizing<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1236\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-after-resizing.png\" alt=\"chrome-after-resizing\" width=\"615\" height=\"227\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-after-resizing.png 615w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/chrome-after-resizing-300x111.png 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/p>\n<p>Christian and I analyzed carefully Blink&#8217;s layout code and how it deals with orthogonal boxes. It&#8217;s worth mentioning that there are important issues with orthogonal flows in almost every web engine, but Blink has made lately some improvements on this regard. See how a very basic example works in Blink, Gecko and WebKit engines:<\/p>\n<pre lang=\"HTML5\">\r\n<div style=\"float: left; border: 5px solid; font: font: 25px\/1 Ahem;\"><\/div>\r\n  <div style=\"writing-mode: vertical-lr; color: magenta; background: cyan;\">XX X<\/div>\r\n<\/div>\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1244 size-large\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1-1024x241.png\" alt=\"orthogonal-flow-different-engines\" width=\"840\" height=\"198\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1-1024x241.png 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1-300x70.png 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1-768x180.png 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1-1200x282.png 1200w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/orthogonal-flow-different-engines-1.png 1213w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<p>Blink has implemented a kind of <strong>pre-layout<\/strong> logic which is executed for any orthogonal flow box even before doing the actual layout, when box&#8217;s intrinsic size computation takes place. This solution allows using a more precise info about an orthogonal box&#8217;s height when computing its container&#8217;s intrinsic width; otherwise zero width would be assumed, as it&#8217;s the case of WebKit and Gecko engines. However, this approach leads to an incorrect behavior when using Grid Layout as I&#8217;ll explain later.<\/p>\n<p>My first approach to solve these two issues was to update grid container&#8217;s intrinsic size after its orthogonal children were laid out. Hence, we could use the actual size of the children to compute their container&#8217;s intrinsic size. However, this violates the first rule of the two assertions defined before: no layout should be done for intrinsic size computation.<\/p>\n<h4>Layout Breakout Session<\/h4>\n<p>During the evening we held the Layout Breakout Session, where we had a nice discussion about the future of Layout in the different web engines. Christian Biesinger, one of the members of the Google&#8217;s Blink Layout team, talked about the new <strong>LayoutNG<\/strong> project; an experiment to implement a new Layout from scratch, cleaning up quite old code paths and solving some problems that were not possible to address with the current legacy code. This new LayoutNG idea is related to the new<strong> Layout API<\/strong> and the <strong>Houdini<\/strong> project, a new mechanism for defining new layout models without the requirement of a native support inside the browser. We had also some discussions about the current state of the Flexible Box specification in Blink and how WebKit&#8217;s implementation is quite abandoned and unmaintained nowadays.<\/p>\n<p>In addition, we discussed about the current state of CSS Grid Layout implementation in the different engines. The implementation is almost complete in most of the main engines. Thanks to the collaboration between Igalia and Bloomberg we can confirm that WebKit and Blink&#8217;s implementations are almost completed. We have been evaluating Mozilla&#8217;s Gecko implementation of Grid and we verified it&#8217;s in a similar status. We talked about the recent news from TPAC, which Manuel Rego attended, about the CSS Grid Layout specification becoming <strong>Candidate Recommendation<\/strong>. Because of all these reasons, we have agreed with Christian that it&#8217;d be good to send the Blink <strong>intent-to-ship<\/strong> request as soon as possible; in case it&#8217;s accepted, it could be enabled by default in the next Chrome release.<\/p>\n<h3>Day 2<\/h3>\n<p>The day started with a meeting with Christian for evaluating the different approaches we implemented so far. We have discarded the ones requiring updating intrinsic size. We also decided to avoid solving the issue during the pre-layout of orthogonal items. This approach would have been the one with less impact on performance for grid layout and it would also solve the incorrect intrinsic size issue, however it would add penalties for cases not using grid at all.<\/p>\n<p>Finally, Christian and I agreed on solving first the unpredictable behavior of grid layout logic. We would skip the issue of incorrect intrinsic size, overall because we think the Grid Layout specification is contradictory on this regard. For what is worth, I&#8217;ve created a <a href=\"https:\/\/github.com\/w3c\/csswg-drafts\/issues\/537\" target=\"_blank\">new issue<\/a> for the CSSWG in the W3C&#8217;s github. Even though we should wait for the issue to get clarified, we have already some possible approaches for getting what seems a more natural result for grid&#8217;s intrinsic size. The following example could help to understand the problem:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1250\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/intrinsic-sizes-with-orthogonal.png\" alt=\"intrinsic-sizes-with-orthogonal\" width=\"720\" height=\"788\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/intrinsic-sizes-with-orthogonal.png 720w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/intrinsic-sizes-with-orthogonal-274x300.png 274w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/p>\n<p>Both test cases were loaded using the same Chrome version commented before. They clearly show that neither <strong>min-content<\/strong> or <strong>max-content<\/strong> sizes are applied correctly to the grid container. The reason of this weird behavior is how <strong>content-sized tracks<\/strong> are handled by the Grid Tracks sizing algorithm in case of rendering grid items with orthogonal flow. From the last draft specification:<\/p>\n<blockquote><p>Then, if the min-content contribution of any grid items have changed based on the row sizes calculated in step 2, steps 1 and 2 are repeated with the new min-content contribution and max-content contribution (once only).<\/p><\/blockquote>\n<p>This, with the fact that orthogonal boxes pre-layout is performed before the tracks have been defined, causes that grid&#8217;s container intrinsic size is computed incorrectly. This problem is explained in detail in the W3C&#8217;s github issue mentioned before. So if anybody is interested on additional details or, even better, willing to participate in the ongoing discussion, just follow the link above.<\/p>\n<h3>Day 3<\/h3>\n<p>In addition to the orthogonal flow issues, <strong>Baseline Alignment<\/strong> was the other hot topic of my work during the hackfest. Baseline Alignment is the only feature still missing to complete the implementation of the CSS Box Alignment specification for Grid Layout. There is a preliminary approach in this <a href=\"https:\/\/crrev.com\/1407633003\/\">code review issue<\/a>, but it&#8217;s still not complete. The problem is that as it&#8217;s stated in the Alignment spec, Baseline Alignment may affect grid&#8217;s container intrinsic size:<\/p>\n<blockquote><p>When specified for align-self\/justify-self, these values trigger baseline self-alignment, shifting the entire box within its container, which may affect the sizing of its container.<\/p><\/blockquote>\n<p>This fact implies that I should integrate Baseline offset computation inside the Grid Tracks sizing algorithm. Christian and I have been analyzing the sizing algorithm and we designed a possible approach, quite similar to what Flexbox implements in its layout logic.<\/p>\n<p>Finally, we met again with Christian to discuss about the Minimum Implied size for Grid issues. Manuel had the chance to discuss it with the Grid spec editors at TPAC, but it seems there are still unresolved issues. There are an ongoing discussion at W3C&#8217;s github about this problem, you can get the details in issues <a href=\"https:\/\/github.com\/w3c\/csswg-drafts\/issues\/283\">283<\/a> and <a href=\"https:\/\/github.com\/w3c\/csswg-drafts\/issues\/523\">523<\/a>. Christian suggested that he could add some feedback to the discussion, so we can clarify it as soon as possible. This is an important issue that may affect browser interoperability.<\/p>\n<h2>The hackfest<\/h2>\n<p>The Web Engines Hackfest is an event to share experiences between hackers of different web engines and brainstorming about the future of the Web Platform. This year there were hackers representing most of the main web engines, including Google&#8217;s Blink, Mozilla&#8217;s Gecko and Servo, Apple&#8217;s WebKit and Igalia&#8217;s WebKitGTK+.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1293\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/webEngines-1.png\" alt=\"webengines-1\" width=\"429\" height=\"93\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/webEngines-1.png 429w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/webEngines-1-300x65.png 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/p>\n<p>There were scheduled talks from hackers of each engine so everybody could get an idea of their current state and future plans. In addition, some breakout sessions were scheduled during the kick-off session driven by my colleague Martin Robinson. We embraced everybody to propose new breakout sessions on the fly, every time an ongoing discussion needed a deeper debate or analysis.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1277\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/CtRBqf6WcAAtSVK.jpglarge.jpeg\" alt=\"ctrbqf6wcaatsvk-jpglarge\" width=\"554\" height=\"415\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/CtRBqf6WcAAtSVK.jpglarge.jpeg 960w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/CtRBqf6WcAAtSVK.jpglarge-300x225.jpeg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/CtRBqf6WcAAtSVK.jpglarge-768x576.jpeg 768w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/p>\n<p>I could attend most of the talks and breakout sessions, so I&#8217;ll give now my impressions about them. All the talks were recorded (will be available soon) and slides are available in the <a href=\"https:\/\/github.com\/Igalia\/webengineshackfest\/wiki\">wiki<\/a>, so I recommend to watch them if you haven&#8217;t already.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1275\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o.jpg\" alt=\"30112189436_db06b8fd4b_o\" width=\"588\" height=\"331\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112189436_db06b8fd4b_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/p>\n<p>The first speaker in the schedule was Jack Moffitt (Mozilla) &#8220;Servo: Today &amp; Tomorrow&#8221;. He gave a great overview of the progress they made on the new Servo rendering engine, emphasizing the <strong>multi-thread<\/strong> support and showing some performance metrics for different engine&#8217;s components, CSS parsing, scripting, layout, &#8230; He remarked the technical advantages of using <strong>Rust<\/strong> on the development of this new engine.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1278\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o.jpg\" alt=\"30032830492_aa442a25b0_o\" width=\"575\" height=\"324\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30032830492_aa442a25b0_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/p>\n<p>During <strong>Day 1<\/strong> I attended two breakout sessions. The first one about the WebKitGTK+ engine was mainly focused on the recently published <a href=\"https:\/\/trac.webkit.org\/wiki\/WebKitGTK\/Roadmap\">roadmap<\/a> and specially about the new <strong>Threaded Compositor<\/strong> enabled by default. There was an interesting discussion about graphics support in WebKitGTK+ between the Collabora developers and Andrey Fedorov (Huawei).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1279\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o.jpg\" alt=\"29851562800_e6b17e78bd_o\" width=\"584\" height=\"329\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/29851562800_e6b17e78bd_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/p>\n<p>The other breakout session I could attend during <em>Day 1<\/em> was the one about the Servo engine. There was a nice discussion between Mozilla developers and Christian Biesinger about how both engines handle rendering in a different way. Servo hackers explained with more detail Servos&#8217;s threading model and its implication for layout.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1288\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o.jpg\" alt=\"30112183886_b4d3836246_o\" width=\"596\" height=\"336\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112183886_b4d3836246_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/p>\n<p><strong>Day 2<\/strong> started with the awesome talk by Behdad Esfahbod (Google) &#8220;HarfBuzz, the First Ten Years&#8221;. He gave an overview of the evolution of the HarfBuff library along the last years, including the past experiences in the Web Engines Hackfest and former events under previous name WebKitGTK+ Hackfest. Clearly, rendering fonts is a huge technical challenge. It was also awesome to have Behdad here to work closely with my colleague Fred Wang on the fonts support for MathML.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1281\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o.jpg\" alt=\"30112185606_76ecfb49fe_o\" width=\"596\" height=\"336\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30112185606_76ecfb49fe_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/p>\n<p>I attended the <strong>MathML<\/strong> breakout session, where the hot topic was Fred&#8217;s prototype implemented for the Blink engine. The result of this experiment was really promising, so we started to discuss its chances of getting back in Chrome, even behind an experimental flag. Both Christian and Behdad expressed doubts about that being possible nowadays. They suggested that it may be feasible to implement it through Houdini and the new Blink&#8217;s Layout API. We have confirmed that the refactoring we have done for WebKit applies perfectly in Blink, since both share a substantial portion of the layout codebase. In addition, after our work for removing the Flexbox dependency and further code clean up, we can be confident on the MathML independence in the layout logic. After some discussion, we have agreed on continue our experiments in Blink, independently of its chances to be integrated in Blink in the future, since I don&#8217;t think the Houdini approach makes sense for MathML, at least now.<\/p>\n<p>Later on Youenn Fabler (Apple) gave a talk about the <strong>Fetch API<\/strong>, &#8220;Fetching Bytes and Words on the Web&#8221;. He described the implementation of this specification in WebKit and its relation with the <strong>Streams API<\/strong>. The development is still ongoing and there are still quite much work to do.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1282\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o.jpg\" alt=\"30147118585_6d5aa818fb_o\" width=\"596\" height=\"336\" srcset=\"https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o.jpg 3264w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o-300x169.jpg 300w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o-768x432.jpg 768w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o-1024x576.jpg 1024w, https:\/\/blogs.igalia.com\/jfernandez\/files\/2016\/10\/30147118585_6d5aa818fb_o-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/p>\n<p>I missed the talks of <strong>D<\/strong><strong>ay 3<\/strong>, so hopefully I&#8217;ll watch them as soon as the videos are available. It&#8217;s specially interesting the talk about <strong>WPE<\/strong> (aka WebKit For Wayland) , by my colleague \u017dan Dober\u0161ek. I&#8217;ve spent the day trying to get the most of having Christian Biesinger at our premises. As I commented before, we discussed about the Grid Layout&#8217;s Implied Minimum Size issue, one of the most complex problems we&#8217;ll have to solve in the short term.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last week I attended the Web Engines Hackfest 2016, hosted by Igalia at the HQ premises in A Coru\u00f1a. For those still unaware, it&#8217;s a unconference like event focused on pure hacking and technical discussions about the main Web Engines supporting the Web Platform. This year there were a very interesting group of hackers, representing &hellip; <a href=\"https:\/\/blogs.igalia.com\/jfernandez\/2016\/10\/09\/web-engines-hackfest-2016\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Web Engines Hackfest 2016<\/span><\/a><\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,20,12,21],"tags":[],"class_list":["post-1221","post","type-post","status-publish","format-standard","hentry","category-blink","category-css-grid-layout","category-webkit","category-webkit-igalia"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/1221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/comments?post=1221"}],"version-history":[{"count":69,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/1221\/revisions"}],"predecessor-version":[{"id":1307,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/1221\/revisions\/1307"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/media?parent=1221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/categories?post=1221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/tags?post=1221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}