| {"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearch/1.1/","xmlns$batch":"http://schemas.google.com/gdata/batch","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$gs":"http://schemas.google.com/spreadsheets/2006","xmlns$thr":"http://purl.org/syndication/thread/1.0","xmlns$sites":"http://schemas.google.com/sites/2008","xmlns$dc":"http://purl.org/dc/terms","xmlns$gAcl":"http://schemas.google.com/acl/2007","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev"},"updated":{"$t":"2021-09-16T14:49:53.328Z"},"title":{"$t":"Content"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"next","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d1501\u0026max-results\u003d500"},{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"http://schemas.google.com/g/2005#post","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"http://schemas.google.com/g/2005#batch","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/batch"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d1001\u0026max-results\u003d500"},{"rel":"previous","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d500\u0026max-results\u003d501"}],"generator":{"version":"1","uri":"https://sites.google.com","$t":"Google Sites"},"openSearch$startIndex":{"$t":"1001"},"openSearch$itemsPerPage":{"$t":"500"},"entry":[{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4695717346105193074"},"published":{"$t":"2017-08-31T21:22:39.377Z"},"updated":{"$t":"2017-08-31T21:22:39.418Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-31T21:22:39.377Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"blog image 2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4695717346105193074"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6066730361560854403"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/marking-http-as-non-secure/blog%20image%202.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4695717346105193074"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4695717346105193074"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4695717346105193074"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4695717346105193074"}],"author":[{"name":{"$t":"Lucas Garron"},"email":{"$t":"lgarron@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3597990116257900240"},"published":{"$t":"2017-08-31T21:22:00.180Z"},"updated":{"$t":"2017-08-31T21:22:00.221Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-31T21:22:00.180Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"form-and-incognito-http-bad-verbose.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3597990116257900240"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6066730361560854403"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3597990116257900240"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3597990116257900240"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3597990116257900240"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3597990116257900240"}],"author":[{"name":{"$t":"Lucas Garron"},"email":{"$t":"lgarron@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5917110272685909220"},"published":{"$t":"2017-08-31T21:19:13.361Z"},"updated":{"$t":"2017-08-31T21:19:13.390Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-31T21:19:13.361Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"blog image 1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5917110272685909220"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6066730361560854403"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/marking-http-as-non-secure/blog%20image%201.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5917110272685909220"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5917110272685909220"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5917110272685909220"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5917110272685909220"}],"author":[{"name":{"$t":"Lucas Garron"},"email":{"$t":"lgarron@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9154746484741970977"},"published":{"$t":"2013-02-11T06:33:50.830Z"},"updated":{"$t":"2017-08-31T10:23:56.984Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-31T10:23:54.701Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Instant Support"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"5\"\u003e\u003cb\u003eALL CONTENT BELOW IS OUTDATED, INSTANT IS UNLAUNCHED\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis document assumes some familiarity with the Chrome Instant feature, including the capabilities in Instant Extended. It's written primarily for developers working on the feature.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Instant-URL\" /\u003e\r\nInstant URL\u003c/h2\u003e\r\nAn \u003ci\u003eInstant URL\u003c/i\u003e is a URL that matches the instant_url template of the default search engine. So, given the default Chrome installation, \"http://www.google.com/webhp\" and \"http://www.google.com/webhp?foo\u003dbar#q\u003dquux\" are considered Instant URLs, whereas \"http://www.google.com/accounts\" is not.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nInstant Extended allows Instant URLs to match more template fields of the default search engine, with restrictions. So, in the extended mode, \"https://www.google.com/?espv\u003d1\" and \"https://www.google.com/search?espv\u003d1\u0026amp;q\u003dfoo\" are also Instant URLs, whereas the corresponding URLs without the \"espv\u003d1\" parameter are not.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhy does this matter?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nThe Chrome Instant functionality only works with Instant URLs. So, in extended mode, we extract query terms from a URL into the omnibox only if the URL is an Instant URL. Similarly, we create an InstantTab (described below) only if the URL is an Instant URL.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIn addition, we try to bucket all Instant URLs (and only Instant URLs) into a dedicated renderer process (the \u003ci\u003eInstant renderer\u003c/i\u003e). I say \u003ci\u003etry to\u003c/i\u003e because we won't always succeed, as you'll see below. We also install the SearchBox extension only in the Instant renderer (and not other renderers). The SearchBox extension is responsible for implementing Chrome's side of the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/searchbox\"\u003eSearchBox API\u003c/a\u003e, so this means that only webpages loaded in the Instant renderer can access the API.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eTerminology note:\u003c/b\u003e URLs can be classified into Instant URLs or non-Instant URLs. Webpages support Instant or they don't. In other words, to talk about Instant support, you need an actual page (WebContents). Throughout this document, we use the terms URL and page consistently in this manner. Of course pages have URLs, so we also say that \"a page has an Instant URL\" or \"a non-Instant URL page\".\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Determining-Instant-Support\" /\u003e\r\nDetermining Instant Support\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eWhat is Instant support?\u003cbr /\u003e\u003c/b\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe want to know whether the page that we've loaded in the hidden Instant overlay actually supports Instant, i.e., the SearchBox API. We start by loading the default search engine's Instant URL into the overlay, but after it goes through redirects, it may end up in a page that may or may not support Instant.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhy do we want to determine Instant support?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nSay the page isn't known to support Instant yet. When the user types in the omnibox, we should immediately fallback to the local omnibox popup. Doing otherwise is bad. If the user types, and we send \u003ccode\u003eonchange()\u003c/code\u003e to the page, hoping that it will eventually respond, we would be making the user wait. Conversely, if we know that the page supports Instant, we can and should send onchange() to it, instead of falling back to the local omnibox popup, since the local popup is an inferior experience.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nHow do we determine Instant support?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nWe start by assuming the page doesn't support Instant. At some point, the browser sends an IPC to the renderer. The SearchBox receives it, checks if \u003ccode\u003ewindow.chrome.searchBox.onsubmit()\u003c/code\u003e is a JS function defined in the page, and responds. When the response IPC is received by the browser, it thus determines Instant support.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nAlso, if the browser receives an IPC at any point that's part of the SearchBox API (such as \u003ci\u003eSetSuggestions\u003c/i\u003e or \u003ci\u003eShowInstantPreview\u003c/i\u003e), it considers the page to support Instant.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nOnly pages that are Instant URLs can support Instant. A random non-Instant URL webpage can define the onsubmit() method, but there'll be no SearchBox extension available to receive or send the appropriate IPCs. In other words, a random webpage can't fool the browser into thinking it supports Instant (however, see the caveat in footnote [1]).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhen do we determine Instant support?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nThe browser waits for the page to fully load and then sends the IPC mentioned above. This happens in the Instant implementation of \u003ccode\u003eWebContentsObserver::DidFinishLoad()\u003c/code\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhy don't we just check to see if the final page loaded in the Instant renderer?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nFirst, even if the page is an Instant URL, it might not actually support Instant. For example, \"http://www.google.com/webhp\" might be a recognized Instant URL (so it gets assigned to the Instant renderer), but when it loads, the page may disable Instant due to server side experiments or other failures.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nSecond, the page may go through one or more redirects that cause a \u003ci\u003ecross-process navigation\u003c/i\u003e (see the OpenURLFromTab section below). If one of these redirects is renderer-initiated (e.g.: using \u003ccode\u003elocation.href \u003d \"...\"\u003c/code\u003e or a \u003ccode\u003e\u0026lt;meta http-equiv\u003drefresh\u0026gt;\u003c/code\u003e tag), we'll still get a DidFinishLoad(). Say \"http://www.google.com/webhp\" (the Instant URL we initially load) uses a JS redirect to \"http://www.google.com/accounts\" (a non-Instant URL), which, after verifying your login cookies, redirects you back to the \"/webhp\" URL, again through a JS redirect. At some point, we'll get a DidFinishLoad() for the \"/accounts\" URL. If we check the renderer at that time, we will wrongly conclude that the page doesn't support Instant.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIn fact, we do actually send the request IPC after \"/accounts\" loads (because of DidFinishLoad(), as mentioned above). But by the time the response IPC comes back, the browser already knows about the JS redirect and is in the midst of handling it, so it knows that the response is for an older page, and ignores it. This is achieved by checking \u003ccode\u003eWebContents::IsActiveEntry()\u003c/code\u003e using the page_id contained in the response IPC.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nOf course, it's possible for the JS redirect to happen much later through a delayed timer, in which case, the \"/accounts\" URL is still the active entry when the browser receives the response IPC. In this case, we'll conclude that the page doesn't support Instant. This is okay since we can't possibly handle arbitrarily delayed redirects. Our method works for the common case of an immediate JS redirect.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhat happens if the final page isn't an Instant URL? We will never get a response IPC, right?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nTrue, since there's no SearchBox extension in that page's renderer. However, in the absence of a response IPC, the browser will continue to treat the page as not supporting Instant, so it all works out.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-OpenURLFromTab\" /\u003e\r\nOpenURLFromTab\u003c/h2\u003e\r\n\u003ccode\u003eWebContentsDelegate::OpenURLFromTab()\u003c/code\u003e is called whenever there's a cross-process navigation. This can happen in a few different ways:\u003cbr /\u003e\r\n\u003cbr /\u003e\u003cb\u003e\r\nCase 1:\u003c/b\u003e The initial page load of the Instant URL in the hidden overlay may go through a series of HTTP redirects, any of which may trip the cross-process bit. Say we start by loading URL A. It redirects to URL B, which is \"claimed\" by an installed app (i.e., the app has listed B in its list of URL patterns in its manifest.json). Apps are loaded in separate renderer processes, so the redirect from A to B causes a cross-process navigation. HTTP redirects that are not claimed by any app do \u003cb\u003enot\u003c/b\u003e trip the cross-process bit, even if they are not Instant URLs. I.e., if URL A is an Instant URL, but URL B is not, B will still be loaded in the same Instant renderer process that we started out with. [1]\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nAlternatively, we'll hit the cross-process case if any of the redirects are renderer-initiated (as mentioned in the previous section, using location.href or a \u0026lt;meta\u0026gt; tag). Normally, renderer-initiated navigations (including redirects) are considered cross-process only if they actually cross an app or extension boundary (see \u003ccode\u003eRenderViewImpl::decidePolicyForNavigation()\u003c/code\u003e). For Instant however, we have added some code that makes \u003cb\u003eall\u003c/b\u003e renderer-initiated navigations be initially treated as cross-process (see \u003ccode\u003eChromeContentRendererClient::ShouldFork()\u003c/code\u003e).\u003cbr /\u003e\r\n\u003cbr /\u003e\u003cb\u003e\r\nCase 2:\u003c/b\u003e Say we are showing the Instant overlay (URL A), and the user does something (such as click on a link) that causes the page to navigate to URL B, tripping a renderer-initiated cross-process navigation (as explained above). Assume that the click by itself doesn't cause the overlay to be committed (because the overlay is showing at less than full height).\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nLet's look at what happens if B is not considered to be an Instant URL (in both cases above). In Case 2, we want to commit the overlay if possible, since it would be a mistake to try to continue using the overlay (B cannot support the Instant API, so the overlay would just stop working). However, in Case 1, we don't want to commit or discard the overlay just yet, since it's part of the initial series of redirects, and the final Instant page hasn't even been loaded yet.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe way we distinguish these cases is by looking at whether the overlay is already known to support Instant. In Case 1, the Instant support determination hasn't yet been performed. In Case 2, it has, since we can't possibly be showing the overlay if it didn't support Instant. So, our algorithm for OpenURLFromTab() is this:\u003cbr /\u003e\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eOpenURLFromTab(url) {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e if (!supports_instant_) {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e // Case 1: Allow (perform) the navigation.\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e contents_-\u0026gt;GetController().LoadURL(url);\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e // Case 2: Commit the overlay if possible. Allow or deny the navigation based on whether the commit succeeds or fails.\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e if (CommitIfPossible(...)) {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e // The Browser is now the WebContentsDelegate, not us.\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e contents_-\u0026gt;GetDelegate()-\u0026gt;OpenURLFromTab(url);\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e // Deny (don't perform) the navigation.\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e }\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e }\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e\r\n}\u003c/code\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\nNote that when we get an OpenURLFromTab() call, it's incumbent upon us to actually perform the navigation. If we don't do anything, the navigation (or redirect) won't happen.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWait, the above algorithm doesn't check whether \u003ccode\u003eurl\u003c/code\u003e is a non-Instant URL, which is the reasoning given for distinguishing Case 2 above. Why not?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nActually, we want to commit the overlay on any user action, even if the navigation is to an Instant URL. This is because the user could've clicked on a link to say \"http://www.google.com/webhp\". The user expects the click to result in a committed tab, with the full webpage in it. It would be weird if it was still an overlay. The overlay isn't expected to randomly navigate on its own, so we'll assume that any call to OpenURLFromTab() is due to a user action (thus, committing the overlay is an appropriate action for us to take).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhat happens if the overlay tries to update its hash state, i.e., the \"#q\u003d...\" fragment of its URL, to keep state (i.e., without any user action)?\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\r\n\u003cbr /\u003e\r\nThankfully, updating the fragment does not result in a call to OpenURLFromTab(), and thus we don't attempt to erroneously commit the overlay. \u003cfont color\u003d\"#b45f06\"\u003eTODO(sreeram): How about pushState?\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nIf we can't commit, why do we not allow the navigation?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nIn the \u003ccode\u003eelse { // Deny }\u003c/code\u003e part above, we could've chosen to still perform the navigation, and then do a new round of Instant support determination. Then, if the page ends up supporting Instant, we could keep using it as the overlay. Otherwise, we could discard it. This is needlessly complex and probably would introduce subtle bugs due to the second round of Instant support determination. Practically, this should never be needed. We \u003ci\u003eought\u003c/i\u003e to be able to commit all the time.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe only time we wouldn't be able to commit the overlay is if the current omnibox text is a URL (and not a search). But in that case, the overlay shouldn't be showing any links other than suggestions (in particular, there should be no search results, search tools, Google+ widgets or such). If the user clicks on a suggestion, the page will request for it through the SearchBox API (\u003ci\u003enavigateContentWindow\u003c/i\u003e for URLs and \u003ci\u003eshow(reason\u003dquery)\u003c/i\u003e for queries), so the page shouldn't cause an OpenURLFromTab() call. If something slips through the cracks (say because the overlay showed a \"Learn more\" link that the user clicked), we'll just disallow the navigation, which means the overlay remains showing the Instant page, and continues to work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-InstantTab\" /\u003e\r\nInstantTab\u003c/h2\u003e\r\nIn Instant Extended mode, an \u003ci\u003eInstantTab\u003c/i\u003e represents a committed page (i.e., an actual tab on the tabstrip, and not an overlay) that's an Instant URL. Typically, this is either the server-provided NTP (New Tab Page) or a search results page. Such a page can also be used to show Instant suggestions and results, so it's appropriate to ask whether an InstantTab supports the Instant API.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nAn InstantTab is a lightweight wrapper that's deleted and recreated as the user switches tabs (i.e., Instant only has a single InstantTab object, not one per tab). When the user switches to a tab with an Instant URL, we create an InstantTab wrapper around it, starting as usual by assuming that it doesn't support Instant. We then immediately send the request IPC. The rest of the Instant support determination works similar to the overlay. Since we (Instant) are not the WebContentsDelegate for a committed tab, none of the OpenURLFromTab() issues arise here. Note that we reset the InstantTab when the user switches tabs. We don't store the result of the Instant support determination anywhere permanently in the tab's WebContents.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThis generally works well, except for the following case: If the tab is a server-provided NTP (\"http://www.google.com/webhp\"), it's possible that we just created the WebContents and had to immediately commit it, so the page hasn't fully loaded yet. Since the common case is to open a browser with the NTP, we don't want to fall back to the local NTP just because we haven't finished loading the server-provided NTP. But, if the user starts typing into the omnibox before the NTP finishes loading, we don't want to wait for the server page (since that could take an arbitrary amount of time). In such a case (user typing before the NTP finishes loading), we'll fallback to the overlay (local omnibox popup).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nDoes that mean that we fallback to the overlay whenever the user types, but we haven't yet determined Instant support for an InstantTab?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nNo, that would mean practically every time the user switches to a tab and immediately starts typing, we'll end up with the overlay. This is obviously bad (because the user is bounced out of whatever search modes/tools they had in the tab).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nPerhaps the solution is to store the Instant support bit with the WebContents? So that, when we switch to a tab, we won't have to perform the determination all over again?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nThis might help somewhat, but it doesn't solve all problems. For example, an Instant URL tab might have been created without Instant (i.e., through a link click or a bookmark navigation). When the user switches to it the first time, we still have to perform Instant support determination. Also, storing this bit with the WebContents means storing it somewhere within the SearchTabHelper, and this introduces unnecessary complexity (what should happen to that bit if the tab navigates in the background?) and leaks Instant concepts to an unrelated part of the codebase.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhat's the solution then?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003eIf we are on an InstantTab, and we haven't yet determined its Instant support, switch to the overlay only if the page hasn't finished loading. The reason this works is that, if the page has finished loading , we can go ahead and blindly send the onchange() to it as the user types. Note that we are not waiting for the page to load to determine Instant support. We send the IPC as soon as the user switches to the tab. Waiting for a page to load is the long pole that takes an indeterminate amount of time. Waiting for an IPC is a much smaller, mostly determinate amount of time (a few milliseconds, usually). So, if it turns out that the page doesn't support Instant, we'll quickly discover that and fallback to the overlay anyway.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eWhat happens if the tab is a \"sad tab\", i.e., the page has crashed?\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRight. We need to not wait for Instant support in that case.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cb\u003e\r\nWhat happens if the page isn't an Instant URL? Won't we end up waiting indefinitely for a response IPC that never arrives? So, won't we send onchange() into the void?\u003cbr /\u003e\u003c/b\u003e\r\n\u003cbr /\u003e\r\nNo. An InstantTab is only created for pages that are Instant URLs, so they should all have been bucketed into the Instant renderer process, and thus should have the SearchBox extension. So, a response IPC is guaranteed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWell, not really. Recall that a renderer-initiated navigation normally isn't cross-process unless it crosses an app boundary. So, it's possible that a tab started out with a non-Instant URL (thus, it was \u003cb\u003enot\u003c/b\u003e assigned to the Instant renderer), then the user clicked on a link to an Instant URL. Now, this tab is eligible to be treated as an InstantTab. But the page is still in the non-Instant renderer, so we'll never get the response IPC back. This can only happen with InstantTab and not with the overlay, because the overlay always starts out with an Instant URL, and thus always starts out in the Instant renderer.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSo, putting all this together, here's our algorithm regarding InstantTab:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003eResetInstantTab() {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e WebContents* contents \u003d GetActiveWebContents();\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e if (contents-\u0026gt;GetURL() is an Instant URL\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e AND contents hasn't crashed\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e AND contents-\u0026gt;GetRenderViewHost()-\u0026gt;GetProcess()-\u0026gt;GetID() is an Instant renderer) {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e overlay_.reset(); // Discard the overlay, if any.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e instant_tab_.reset(contents);\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e\u003ccode\u003e instant_tab_-\u0026gt;DetermineInstantSupport(); // Send the request IPC.\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e instant_tab_.reset(); // Don't use InstantTab.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003eUpdate() {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e if (instant_tab_) {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e if (overlay_) {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e\u003ccode\u003e // We previously switched to the overlay because the InstantTab wasn't done loading.\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e // It probably has finished loading by now, but no matter. We'll continue using the overlay\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e // until it's discarded, to avoid a jarring switch as the user types.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e overlay_-\u0026gt;Update(...);\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e if (instant_tab_-\u0026gt;contents()-\u0026gt;IsLoading()) {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e // The InstantTab hasn't finished loading. Use the overlay instead.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e overlay_.reset(new InstantOverlay(...));\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e overlay_-\u0026gt;Update(...);\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e // Use the InstantTab.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e instant_tab_-\u0026gt;Update(...);\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e } else {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e // Use the overlay_, creating one if necessary.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003eActiveTabChanged() {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e overlay_.reset(); // Discard the overlay.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e ResetInstantTab();\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003eQuestions? Comments? Send them to sreeram@chromium.org.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003chr /\u003e\u003c/div\u003e\u003cdiv\u003e\r\n[1] The astute reader would have observed that thus, it's technically possible for us to end up with a non-Instant URL page in the Instant renderer process, one which may even define the onsubmit() method and thus pass the Instant support determination test. This is fine. It can only happen if the Instant URL that we start with willfully redirects (using HTTP redirects) to such a non-Instant URL.\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4252691647615192658"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/instant/instant-support"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9154746484741970977"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9154746484741970977"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9154746484741970977"}],"author":[{}],"sites$pageName":{"$t":"instant-support"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2309311395017260469"},"published":{"$t":"2017-08-21T17:58:40.668Z"},"updated":{"$t":"2017-08-21T17:58:40.705Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-21T17:58:40.668Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"arcp"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2309311395017260469"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5072186806584032361"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/arcplusplus-testing/arcp"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2309311395017260469"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2309311395017260469"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2309311395017260469"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2309311395017260469"}],"author":[{"name":{"$t":"Yury Khmel"},"email":{"$t":"khmel@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6239047848706062933"},"published":{"$t":"2009-11-19T17:03:25.775Z"},"updated":{"$t":"2017-08-15T21:53:55.957Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-15T21:53:54.225Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Security Overview"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\r\n\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-2\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Abstract\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAbstract\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Guiding-principles\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eGuiding principles\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#The_Chrome_OS_Threat_Model_828_8822517982428096\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eUse cases and requirements\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Our-threat-model\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eOur threat model\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Mitigating_System_Compromise_4\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eMitigating remote system compromise\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#OS_Hardening_9194542095065117__9067499944607271\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eOS hardening\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Making-the-browser-more-modular\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eMaking the browser more modular\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#_Web_App_Security_252856004306_6904816538615359\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eWeb app security\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phishing-XSS-and-other-web-vulnerab\"\u003e\u003cstrong\u003e3.4 \u003c/strong\u003ePhishing, XSS, and other web vulnerabilities\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Secure_Autoupdate_514579947008_3042258492955804\"\u003e\u003cstrong\u003e3.5 \u003c/strong\u003eSecure autoupdate\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Verified-boot\"\u003e\u003cstrong\u003e3.6 \u003c/strong\u003eVerified boot\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Rendering-pwned-devices-useless\"\u003e\u003cstrong\u003e3.7 \u003c/strong\u003eRendering pwned devices useless\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Mitigating-device-theft\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eMitigating device theft\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Data-protection\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eData protection\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Account-management\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eAccount management\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Login_06044909358024597_298465_5687262681137824\"\u003e\u003cstrong\u003e4.3 \u003c/strong\u003eLogin\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Future-work\"\u003e\u003cstrong\u003e4.4 \u003c/strong\u003eFuture work\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Wrapup\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eWrapup\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h2\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eChromium OS has been designed from the ground up with security in mind.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eSecurity is not a one-time effort, but rather an iterative process that must be focused on for the life of the operating system.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe goal is that, should either the operating system or the user detect that the system has been compromised, an update can be initiated, and—after a reboot—the system will have been returned to a known good state.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eChromium OS security strives to protect against an opportunistic adversary through a combination of system hardening, process isolation, continued web security improvements in Chromium, secure autoupdate, verified boot, encryption, and intuitive account management.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\nWe have made a concerted effort to provide\r\nusers of Chromium OS-based devices with a system that is both practically secure and easy to use. To do so, we've followed a set of four guiding principles:\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eThe perfect is the enemy of the good.\u003c/li\u003e\r\n\u003cli\u003eDeploy defenses in depth.\u003c/li\u003e\r\n\u003cli\u003eMake devices secure by default.\u003c/li\u003e\r\n\u003cli\u003eDon't scapegoat our users.\u003c/li\u003e\u003c/ul\u003e\r\nIn\r\nthe rest of this document, we first explain these principles and\r\ndiscuss some expected use cases for Chromium OS devices. We then give a high-level\r\noverview of the threat model against which we will endeavor to protect\r\nour users, while still enabling them to make full use of their cloud\r\ndevice.\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Guiding-principles\" /\u003eGuiding principles\u003c/h2\u003e\r\n\u003cb\u003eThe perfect is the enemy of the good.\u003c/b\u003e \r\nNo security solution is ever perfect. Mistakes will be made, there\r\nwill be unforeseen interactions between multiple complex systems that\r\ncreate security holes, and there will be vulnerabilities that aren't caught by pre-release testing. Thus, we must not allow our search for some mythical perfect\r\nsystem to stop us from shipping something that is still very good.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eDeploy defenses in depth.\u003c/b\u003e In light of our first principle, we will deploy a variety of defenses to act as a series of\r\nstumbling blocks for the attacker. We will make it hard to get into the\r\nsystem, but assume that the attacker will. We'll put another layer of defenses in place to make it difficult to turn a user account compromise into root or a\r\nkernel exploit. Then, we'll also make it difficult for an attacker to persist their presence on the system by preventing them from adding an account,\r\ninstalling services, or re-compromising the system after reboot.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eMake it secure by default.\u003c/b\u003e \r\nBeing safe is not an advanced or optional feature. Until now, the security community has had to deploy solutions that cope with arbitrary software running on users' machines; as a result, these solutions have often cost the user in terms of system performance or ease-of-use. Since we have the advantage of knowing which software should be running on the device at all times, we should be better able to deploy solutions that leave the user's machine humming along\r\nnicely.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eDon't scapegoat our users.\u003c/b\u003e \r\nIn real life, people assess their risk all the time. The Web is\r\nreally a huge set of intertwined, semi-compatible implementations of overlapping standards. Unsurprisingly, it is difficult\r\nto make accurate judgments about one's level of risk in the face of\r\nsuch complexity, and that is \u003ci\u003enot\u003c/i\u003e our users' fault. We're working to\r\nfigure out the right signals to send our users, so that we can keep\r\nthem informed, ask fewer questions, require them to make\r\ndecisions only about things they comprehend, and be sure that we fail-safe if they don't understand a choice and just want to click and make\r\nit go away.\u003cbr /\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"The_Chrome_OS_Threat_Model_828_8822517982428096\" /\u003e Use cases and requirements\r\n \u003c/h3\u003e\r\n We are initially targeting the following use cases with Chromium OS devices:\u003cbr /\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eComputing on the couch\u003c/li\u003e\r\n\u003cli\u003eUse as a lightweight, secondary work computer\u003c/li\u003e\r\n\u003cli\u003eBorrowing a device for use in coffee shops and libraries\u003c/li\u003e\r\n\u003cli\u003eSharing a second computer among family members\u003c/li\u003e\u003c/ul\u003e\r\n Targeting these goals dictates several security-facing requirements:\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eThe owner should be able to delegate login rights to users of their choice.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eThe user can manage their risk with respect to data loss, even in the face of device loss or theft.\u003c/li\u003e\r\n\u003cli\u003eA user's data can't be exposed due to the mistakes of other users on the system.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eThe system provides a multi-tiered defense against malicious websites and other network-based attackers.\u003c/li\u003e\r\n\u003cli\u003eRecovering from an attack that replaces or modifies system binaries should be as simple as rebooting.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eIn the event of a security bug, once an update is pushed, the user can reboot and be safe.\u003c/li\u003e\u003c/ul\u003e\r\n \r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Our-threat-model\" /\u003eOur threat model\r\n \u003c/h3\u003e\r\n When designing security technology for Chromium OS systems, we consider two different kinds of adversaries:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eAn \u003cb\u003eopportunistic adversary\u003c/b\u003e\u003c/li\u003e\r\n\u003cli\u003eA \u003cb\u003ededicated adversary\u003c/b\u003e\u003c/li\u003e\u003c/ul\u003e\r\n \r\n The \u003cb\u003eopportunistic adversary\u003c/b\u003e is just trying to compromise an individual\r\nuser's machine and/or data. They are not targeting a specific user or enterprise, and they are not going to steal the user's machine to obtain the user's data. \r\nThe opportunistic adversary will, however, deploy attacks designed to lure users on the web to\r\nsites that will compromise their machines or to web apps that will try\r\nto gain unwarranted privileges (webcam access, mic access, etc). If the opportunistic adversary \u003ci\u003edoes \u003c/i\u003esteal a device and the user's data is in the clear, the opportunistic adversary may take it.\u003c/div\u003e\r\n\u003cdiv\u003e\r\n \u003cbr /\u003e\r\n The \u003cb\u003ededicated adversary\u003c/b\u003e \u003ci\u003emay\u003c/i\u003e\r\ntarget a user or an enterprise specifically for attack. They are willing\r\nto steal devices to recover data or account credentials (not just to\r\nre-sell the device to make money). They are willing to deploy DNS or\r\nother network-level attacks to attempt to subvert the Chromium OS device login\r\nor update processes. They may also do anything that the opportunistic\r\nadversary can do.\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n \u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e For version 1.0, we are focusing on dangers posed by\r\nopportunistic adversaries. We further subdivide the possible threats\r\ninto two different classes of attacks: \u003cb\u003eremote system compromise\u003c/b\u003e and\u003cb\u003e device theft.\u003c/b\u003e\u003cbr /\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"Mitigating_System_Compromise_4\" /\u003e\r\n Mitigating remote system compromise\r\n \u003c/h2\u003e\r\n \r\n\u003cp\u003e\r\nThere are several vectors through which an adversary might try to\r\ncompromise a Chromium OS device remotely: an exploit that\r\ngives them control of one of the Chromium-based browser processes, an exploit in a plugin,\r\ntricking the user into giving a malicious web app unwarranted access to\r\nHTML5/Extension APIs, or trying to subvert our autoupdate process in\r\norder to get some malicious code onto the device. \u003c/p\u003e\r\n \r\n\u003cp\u003eAs in any good security\r\nstrategy, we wish to provide defense in depth: mechanisms that try to\r\nprevent these attacks and then several more layers of protection that try\r\nto limit how much damage the adversary can do provided that he's\r\nmanaged to execute one of these attacks. The architecture of Chromium browsers provides us with some very nice process isolation already, but\r\nthere is likely more that we can do.\u003c/p\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"OS_Hardening_9194542095065117__9067499944607271\" /\u003e\r\n OS hardening\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e The lowest level of our security strategy involves a combination\r\nof OS-level protection mechanisms and exploit mitigation\r\ntechniques. This combination limits our attack surface, reduces the\r\nthe likelihood of successful attack, and reduces the usefulness of\r\nsuccessful user-level exploits. These protections aid in defending\r\nagainst both opportunistic and dedicated adversaries. The approach\r\ndesigned relies on a number of independent techniques:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eProcess sandboxing\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eMandatory access control implementation that limits resource, process, and kernel interactions\u003c/li\u003e\r\n\u003cli\u003eControl group device filtering and resource abuse constraint\u003c/li\u003e\r\n\u003cli\u003eChrooting and process namespacing for reducing resource and cross-process attack surfaces\u003c/li\u003e\r\n\u003cli\u003eMedia device interposition to reduce direct kernel interface access from Chromium browser and plugin processes\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eToolchain hardening to limit exploit reliability and success\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eNX, ASLR, stack cookies, etc\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eKernel hardening and configuration paring\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eAdditional file system restrictions\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eRead-only root partition\u003c/li\u003e\r\n\u003cli\u003etmpfs-based /tmp\u003c/li\u003e\r\n\u003cli\u003eUser home directories that can't have executables, privileged executables, or device nodes\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eLonger term, additional system enhancements will be pursued, like driver sandboxing\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\nDetailed discussion can be found in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/system-hardening\"\u003eSystem Hardening\u003c/a\u003e design document.\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Making-the-browser-more-modular\" /\u003eMaking the browser more modular\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe more modular the\r\nbrowser is, the easier it is for the Chromium OS to separate\r\nfunctionality and to sandbox different processes. Such increased modularity would also drive more efficient IPC within Chromium. We welcome input from the community here, both in terms of ideas and in code. Potential areas for future work include:\r\n\u003cul\u003e\u003cli\u003ePlugins\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eAll plugins should run as independent processes. We can then apply OS-level sandboxing techniques to limit their abilities. Approved plugins\r\ncould even have Mandatory Access Control (MAC) policies generated and ready for use.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eStandalone\r\nnetwork stack\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eChromium browsers already sandbox media and HTML parsers. \u003c/li\u003e\r\n\u003cli\u003eIf the HTTP and SSL stacks were isolated in\r\nindependent processes, robustness issues with HTTP parsing or other\r\nbehavior could be isolated. In particular, if all SSL traffic used one\r\nprocess while all plaintext traffic used another, we would have some\r\nprotection from unauthenticated attacks leading to full information\r\ncompromise. This can even be beneficial for cookie isolation, as the\r\nHTTP-only stack should never get access to cookies marked \"secure.\" It\r\nwould even be possible to run two SSL/HTTP network stacks—one for\r\nknown domains based on a large whitelist and one for unknown domains. \r\nAlternately, it could be separated based on whether a certificate\r\nexception is required to finalize the connection. \u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003ePer-domain\r\nlocal storage \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eIf it were possible to isolate renderer access\r\nper domain, then access to local storage services could similarly by\r\nisolated—at a process level. This would mean that a compromise of a\r\nrenderer that escapes the sandbox would still not be guaranteed access\r\nto the other stored data unless the escape vector were a kernel-level\r\nexploit.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"_Web_App_Security_252856004306_6904816538615359\" /\u003eWeb app security\u003c/h3\u003e\r\n \r\n \r\n \r\n\u003cdiv\u003e\r\nAs we enable web applications to provide richer functionality for users, we are\r\nincreasing the value of web-based exploits, whether the attacker tricks\r\nthe browser into giving up extra access or the user into giving up\r\nextra access. We are working on multiple fronts to design a system\r\nthat allows Chromium OS devices to manage access to new APIs in a unified manner,\r\nproviding the user visibility into the behavior of web applications where\r\nappropriate and an intuitive way to manage permissions granted to\r\ndifferent applications where necessary.\u003cbr /\u003e\r\n \r\n\u003cul\u003e\u003cli\u003e\r\n User experience\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\r\nThe user experience should be orthogonal to the policy enforcement mechanism inside the Chromium browser and, ideally, work the same for HTML5 APIs and Google Chrome Extensions. \u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\r\n HTML5/Open Web Platform APIs and Google Chrome Extensions\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n We're hopeful that we can unify the policy enforcement mechanisms/user preference storage mechanisms across all of the above.\u003cbr /\u003e\r\n\r\n \u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\r\n Plugins\u003cbr /\u003e\r\n\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eWe are\r\ndeveloping a multi-tiered sandboxing strategy, leveraging existing Chromium browser sandboxing technology and some of the\r\nwork we discuss in our \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/system-hardening\"\u003eSystem Hardening\u003c/a\u003e design document.\u003c/li\u003e\r\n\u003cli\u003eLong term, we will work with other browser vendors to make plugins more easily sandboxed.\u003c/li\u003e\r\n\r\n\u003cli\u003eFull-screen\r\nmode in some plugins could allow an attacker to mock out the entire user experience of a Chromium OS device. \r\nWe are investigating a variety of mitigation strategies in this space.\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\nAs\r\nHTML5 features like persistent workers move through the standards\r\nprocess, we must ensure that we watch for functionality creeping in\r\nthat can poke holes in our security model and take care to handle it appropriately.\u003cbr /\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Phishing-XSS-and-other-web-vulnerab\" /\u003ePhishing, XSS, and other web vulnerabilities\u003c/h3\u003e\r\nPhishing, XSS, and other web-based exploits are no more of an issue for\r\nChromium OS systems than they are for Chromium browsers on other platforms. The only\r\nJavaScript APIs used in web applications on Chromium OS devices will be the same HTML5\r\nand Open Web Platform APIs that are being deployed in Chromium browsers\r\neverywhere. As the browser goes, so will we.\u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"Secure_Autoupdate_514579947008_3042258492955804\" /\u003e\r\n Secure autoupdate\r\n \u003c/h3\u003e\r\nAttacks against the autoupdate process are likely to be executed by a\r\ndedicated adversary who would subvert networking infrastructure to\r\ninject a fake autoupdate with malicious code inside it. That said, a\r\nwell supported opportunistic adversary could attempt to subvert the\r\nupdate process for many users simultaneously, so we should address this possibility here. (For more on this subject, also see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate\"\u003eFile System/Autoupdate\u003c/a\u003e design document.)\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eSigned updates are downloaded over SSL.\u003c/li\u003e\r\n\u003cli\u003eVersion numbers of updates can't go backwards.\u003c/li\u003e\r\n\u003cli\u003eThe integrity of each update is verified on subsequent boot, using our Verified Boot process, described below.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Verified-boot\" /\u003eVerified boot\u003cbr /\u003e\r\n\u003c/h3\u003e\r\nVerified boot provides a means of getting\r\ncryptographic assurances that the Linux kernel, non-volatile system memory, and the partition table are untampered with when the system starts up. This approach\r\nis not \"trusted boot\" as it does not depend on a TPM device or other\r\nspecialized processor features. Instead, a chain of trust is created\r\nusing custom read-only firmware that performs integrity checking on\r\na writable firmware. The verified code in the writable firmware then verifies the next component in the boot\r\npath, and so on. This approach allows for more flexibility than traditional trusted boot systems and avoids taking ownership away from the user. The design is broken down into two stages:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eFirmware-based verification \u003cbr /\u003e\r\n(for details, see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery\"\u003eFirmware Boot and Recovery\u003c/a\u003e design document)\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eRead-only firmware checks writable firmware with a permanently stored key.\u003c/li\u003e\r\n\u003cli\u003eWritable firmware then checks any other non-volatile memory as well as the bootloader and kernel.\u003c/li\u003e\r\n\u003cli\u003eIf verification fails, the user can either bypass checking or boot to a safe recovery mode.\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eKernel-based verification \u003cbr /\u003e\r\n(for details, see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot\"\u003eVerified Boot\u003c/a\u003e design document) \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eThis approach extends authenticity and integrity guarantees to files and metadata on the root file system.\u003c/li\u003e\r\n\u003cli\u003eAll access to the root file system device traverses a transparent layer which ensure data block integrity.\u003c/li\u003e\r\n\u003cli\u003eBlock integrity is determined using cryptographic hashes stored after the root file system on the system partition.\u003c/li\u003e\r\n\u003cli\u003eAll verification is done on-the-fly to avoid delaying system startup.\u003c/li\u003e\r\n\u003cli\u003eThe implementation is not tied to the firmware-based verification and may be compatible with any trusted kernel.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cdiv\u003eWhen combined, the two verification systems will perform as follows:\u003c/div\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eDetects changes at boot-time\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eFiles, or read-write firmware, changed by an opportunistic attacker with a bootable USB drive will be caught on reboot.\u003c/li\u003e\r\n\u003cli\u003eChanges performed by a successful runtime attack will also be detected on next reboot.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eProvides a secure recovery path so that new installs are safe from past attacks.\u003c/li\u003e\r\n\u003cli\u003eDoesn't protect against\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eDedicated attackers replacing the firmware.\u003c/li\u003e\r\n\u003cli\u003eRun-time attacks: Only code loaded from the file system is verified. Running code is not.\u003c/li\u003e\r\n\u003cli\u003ePersistent attacks run by a compromised Chromium browser: It's not possible to verify the browser's configuration as safe using this technique.\u003cb\u003e\u003ci\u003e\u003cbr /\u003e\r\n\u003c/i\u003e\u003c/b\u003e\u003ci\u003e\r\n\u003c/i\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\nIt's\r\nimportant to note that at no point is the system restricted to\r\ncode from the Chromium project; however, if Google Chrome OS is used, additional\r\nhardware-supported integrity guarantees can be made.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Rendering-pwned-devices-useless\" /\u003eRendering pwned devices useless\u003c/h3\u003e\r\nWe\r\ndo not intend to brick devices that we believe to be hacked. If we can\r\nreliably detect this state on the client, we should just initiate an\r\nupdate and reboot. We could try to leverage the abuse detection and\r\nmitigation mechanisms in the Google services that people are using from\r\ntheir Chromium OS devices, but it seems more scalable to allow each\r\nservice to continue handling these problems on its own.\u003cbr /\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Mitigating-device-theft\" /\u003eMitigating device theft\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"Mitigating_Device_Theft_415006\" /\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nA stolen device is likely to have a higher value to a dedicated\r\nadversary than to an opportunistic adversary. An opportunistic adversary is more likely to reset the device for resale, or try to log in to use the device for himself. \u003c/p\u003e\r\n \r\n\u003cp\u003eThe challenges here are myriad:\u003c/p\u003e\r\n \r\n\u003cul\u003e\u003cli\u003eWe want to protect user data while also enabling users to opt-in to auto-login.\u003c/li\u003e\r\n\u003cli\u003eWe want to protect user data while also allowing users to share the device.\u003c/li\u003e\r\n\u003cli\u003eWe especially want to protect user credentials without giving up offline login, auto-login, and device sharing.\u003c/li\u003e\r\n\u003cli\u003eDisk encryption can have real impact on battery life and performance speed.\u003c/li\u003e\r\n\u003cli\u003eThe attacker can remove the hard drive to circumvent OS-level protections.\u003c/li\u003e\r\n\u003cli\u003eThe attacker can boot the device from a USB device.\u003c/li\u003e\u003c/ul\u003e\r\n\u003col\u003e\r\n\u003c/ol\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Data-protection\" /\u003eData protection\u003c/h3\u003e\r\n\r\nUsers\r\nshouldn't need to worry about the privacy of their data if they forget\r\ntheir device in a coffee shop or share it with their family members. \r\nThe easiest way to protect the data from opportunistic attackers is to\r\nensure that it is unreadable except when it is in use by its owner.\u003c/div\u003e\r\n\u003cp\u003eThe \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data\"\u003eProtecting Cached User Data\u003c/a\u003e design document provides details on data protection. Key requirements for protecting cached user data (at rest) are as follows:\u003c/p\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eEach user has their own encrypted store.\u003c/li\u003e\r\n\u003cli\u003eAll user data stored by the operating system, browser, and any plugins are encrypted.\u003c/li\u003e\r\n\u003cli\u003eUsers cannot access each other's data on a shared device.\u003c/li\u003e\r\n\u003cli\u003eThe system does not protect against attacks while a user is logged in.\u003c/li\u003e\r\n\u003cli\u003eThe system will attempt to protect against memory extraction (cold boot) attacks when additional hardware support arrives.\u003c/li\u003e\r\n\u003cli\u003eThe system does not protect against root file system tampering by a dedicated attacker (verified boot helps there).\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Account-management\" /\u003eAccount management\u003c/h3\u003e\r\n \r\n \r\n \r\n\u003cdiv\u003e\r\nPreventing the adversary from logging in to the system closes one easy\r\npathway to getting the machine to execute code on their behalf. That\r\nsaid, many want this device to be just as sharable as a Google Doc.\r\n How can we balance these questions, as well as take into account\r\ncertain practical concerns? These issues are discussed at length in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/user-accounts-and-management\"\u003eUser Accounts and Management\u003c/a\u003e design document, with some highlights below.\u003cbr /\u003e\r\n\r\n \r\n\u003cul\u003e\u003cli\u003e\r\n What \u003ci\u003eare\u003c/i\u003e the practical concerns?\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n Whose wifi settings do you use? Jane's settings on Bob's device in Bob's house don't work.\u003c/li\u003e\r\n\u003cli\u003e\r\n But using Bob's settings no matter where the device is doesn't work either.\u003c/li\u003e\r\n\u003cli\u003e\r\n And if Bob's device is set up to use his enterprise's wifi, then it's dangerous if someone steals it!\u003cbr /\u003e\r\n\r\n \u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\r\n \"The owner\"\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eEach device has one and only one owner. \u003cbr /\u003e\r\n\r\n \u003c/li\u003e\r\n\u003cli\u003e\u003ci\u003eUser preferences\u003c/i\u003e are distinct from \u003ci\u003esystem settings.\u003c/i\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n \u003ci\u003eSystem settings\u003c/i\u003e, like wifi, follow the owner of a device.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\r\n Whitelisting\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n The owner can whitelist other users, who can then log in.\u003c/li\u003e\r\n\u003cli\u003e\r\n The user experience for this feature should require only a few clicks or keystrokes.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\r\n Promiscuous mode\r\n \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n The owner can opt in to a mode where anyone with a Google account can log in.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eGuest mode\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUsers can initiate a completely stateless session, which does not sync or cache data.\u003c/li\u003e\r\n\u003cli\u003eAll system settings would be kept out of this session, including networking config.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"Login_06044909358024597_298465_5687262681137824\" /\u003e\r\n Login\u003c/h3\u003e\r\n\r\n For design details, see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/login\"\u003eLogin\u003c/a\u003e design document.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003ci\u003e\u003cbr /\u003e\r\n\r\n\u003c/i\u003e\u003c/b\u003e\r\nAt a high level, here is how Chromium OS devices authenticate users:\u003cbr /\u003e\r\n\r\n\u003col\u003e\u003cli\u003eTry to reach Google Accounts online.\u003c/li\u003e\r\n\u003cli\u003eIf the service can't be reached, attempt to unwrap the locally-stored, TPM-wrapped keys we use for per-user data encryption. Successful unwrap means successful login.\u003c/li\u003e\r\n\u003cli\u003eFor every successful online login, use a salted hash of the password to wrap a fresh encryption key using the TPM.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\nThere\r\nare a number of important convenience features around authentication\r\nthat we must provide for users, and some consequences of integrating\r\nwith Google Accounts we must deal with. These all have\r\nsecurity consequences, and we discuss these (and potential mitigation)\r\nhere. Additionally, we are currently working through the various tradeoffs of supporting non-Google OpenID providers as an authentication backend.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n\u003cb\u003eCAPTCHAs\u003c/b\u003e\u003cbr /\u003e\r\n\r\n \u003c/div\u003e\r\n\u003cdiv\u003e Rather than strictly\r\nrate limiting failed authentication attempts, Google Accounts APIs\r\nrespond with CAPTCHAs if our servers believe an attack is underway. We do not\r\nwant users to face CAPTCHAs to log in to their device; if the user has correctly provided their credentials, they should be successfully logged in.\u003cbr /\u003e\r\nFurthermore, including HTML rendering code in our screen locker would\r\nintroduce more potential for crashing bugs, which would give an\r\nattacker an opportunity to access the machine. That said, we cannot introduce a\r\nvector by which attackers can brute force Google Accounts.\u003cbr /\u003e\r\nTo\r\nwork around this right now, we do offline credential checking when\r\nunlocking the screen and ignore problems at login time, though we realize this is not acceptable long-term and are considering a\r\nvariety of ways to address this issue in time for V1.\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n \u003cb\u003eSingle signon\r\n\u003c/b\u003e \u003cbr /\u003e\r\n\r\n\u003c/div\u003e\r\n\u003cdiv\u003e As we discuss in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/login\"\u003eLogin\u003c/a\u003e design document, we want to\r\nprovide an SSO experience on the web for our users. Upon login, we decrypt the user's profile and perform a request for her Google Accounts cookies in the background. As a result, her profile gets fresh cookies and she is logged in to all her Google services.\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cbr /\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Future-work\" /\u003e\u003cspan style\u003d\"font-size:15px\"\u003eFuture work\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cb\u003eAuto-login\u003c/b\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e \u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eWhen a user turns on auto-login, they are asserting that they wish this device to be trusted as though it had the user's credentials at all times; however, we don't want to store actual Google Account credentials on the device—doing so would expose them to offline attack unnecessarily. We also don't want to rely on an expiring cookie; auto-login would \"only work sometimes,\" which is a poor user experience. We would like to store a revokable credential on the device, one that can be exchanged on-demand for cookies that will log the user in to all of their Google services. We're considering using an OAuth token for this purpose.\u003c/span\u003e\u003c/div\u003e\r\n\r\n\u003cdiv\u003e\u003cb\u003eBiometrics, smartcards and Bluetooth\u003c/b\u003e \u003c/div\u003e\r\n\u003cdiv\u003eWe expect to keep an eye on biometric authentication technologies as they continue to become cheaper and more reliable, but at this time we believe that the cost/reliability tradeoff is not where it needs to be for our target users. We expect these devices to be covered in our users' fingerprints, so a low-cost fingerprint scanner could actually increase the likelihood of compromise. We were able to break into one device that used facial recognition authentication software just by holding it up to the user's photo. Bluetooth adds a whole new software stack to our login/screenlocker code that could potentially be buggy, and the security of the pairing protocol has been \u003ca href\u003d\"http://www.schneier.com/blog/archives/2005/06/attack_on_the_b_1.html\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ecriticized in the past\u003c/a\u003e. Smart cards and USB crypto tokens are an interesting technology, but we don't want our users to have to keep track of a physically distinct item just to use their device.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eSingle signon\u003c/b\u003e \r\n\u003cdiv\u003eFor third-party sites, we would like to provide credential generation and synced, cloud-based storage. \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Wrapup\" /\u003eWrapup\u003c/h2\u003e\r\nIn this document, we have aimed only to summarize the wide-ranging efforts we are undertaking to secure Chromium OS at all levels. For more detail, please read the rest of the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs\"\u003edesign documents.\u003c/a\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003cdiv\u003e\r\n \u003cbr /\u003e\r\n\r\n \r\n\u003cdiv\u003e\r\n \u003cbr /\u003e\r\n \r\n\u003cdiv\u003e\r\n \u003ca name\u003d\"Web_App_Security\" /\u003e\r\n \r\n\u003cdiv\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/security-overview"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6239047848706062933"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6239047848706062933"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6239047848706062933"}],"author":[{}],"sites$pageName":{"$t":"security-overview"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1159249564783175982"},"published":{"$t":"2017-08-10T14:17:48.999Z"},"updated":{"$t":"2017-08-10T14:17:49.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-10T14:17:48.999Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Volume - Update Aug 10.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1159249564783175982"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20Aug%2010.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1159249564783175982"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1159249564783175982"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1159249564783175982"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1159249564783175982"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9064925554768664074"},"published":{"$t":"2017-08-10T14:17:44.821Z"},"updated":{"$t":"2017-08-10T14:17:44.828Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-10T14:17:44.821Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Daily Actives - Update Aug 10.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9064925554768664074"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20Aug%2010.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9064925554768664074"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9064925554768664074"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9064925554768664074"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9064925554768664074"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5708407352957304430"},"published":{"$t":"2013-04-09T18:16:12.224Z"},"updated":{"$t":"2017-08-09T18:20:29.040Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-09T18:20:27.405Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"The Zen of Merge Requests"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Times New Roman\"\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Ownership-for-Approvals\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eOwnership for Approvals\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Guidelines-for-Approvals\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eGuidelines for Approvals\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-1:-Branch-Day\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003ePhase 1: Branch Day\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-2:-The-Push-to-Beta\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003ePhase 2: The Push to Beta\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-3:-The-Push-to-Stable\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003ePhase 3: The Push to Stable\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-4:-Post-Stable\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003ePhase 4: Post Stable\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h1\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Ownership-for-Approvals\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOwnership for Approvals\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cul style\u003d\"font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThese ownerships are independent of issue trackers:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Chrome desktop TPM is responsible for approving merge requests related to desktop or in Blink.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe ChromeOS TPM is responsible for approving merge requests \u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003erelated to ChromeOS, explicitly those related to systems software and the kernel\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Android TPM is responsible for approvals related to the Android code base\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Security team owns approval for security bugs (TPMs should still be consulted on larger changes and security “features”)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Guidelines-for-Approvals\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGuidelines for Approvals\u003c/span\u003e\u003c/h1\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Phase-1:-Branch-Day\" /\u003e\u003cspan style\u003d\"font-size:19px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePhase 1: Branch Day\u003c/span\u003e\u003c/h2\u003e\u003c/li\u003e\u003cul style\u003d\"font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eKey Objective:\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGet a release to the Dev channel that we can validate for fitness as a branch point.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat that means in practice:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe keep the branch closed for merges until we are confident that we have a branch we can stabilize (across all platforms)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe bar for confidence is basically:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ea.) Stability rates that we are comfortable with\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eb.) Blessing from QA\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ec.) No red flags from real world usage (which manifests in response to our release blog post, issues, and stability info (crash dumps/ UMA stats))\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat merges we accept:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReleaseBlock:Dev issues (across all trackers)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStability issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges that we will reject:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAt this point the we shouldn’t really be rejecting requests yet, until the branch is opened up.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen do we move to the next phase?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce we are confident in our branch point, we signal the start of phase 2 by sending the \"Branch XXX has been declared, we are open for merges\" e-mail.\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Phase-2:-The-Push-to-Beta\" /\u003e\u003cspan style\u003d\"font-size:19px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePhase 2: The Push to Beta\u003c/span\u003e\u003c/h2\u003e\u003c/li\u003e\u003cul style\u003d\"font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eKey Objective: Refine our Dev channel to get it Beta ready (as quickly as reasonably possible, to return the Dev channel back to trunk based builds), addressing critical regressions (stability, performance, behavior, etc...).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat that means in practice:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are a few parallel objectives in this phase:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClear Stability Issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClear ReleaseBlock-Beta issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDisable features/functionality that aren't ready to ship\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCures for functional regressions to the default shipping experience of Chrome\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eImportant note about Risk: \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBecause of the early phase of the branch, we are generally a little less risk averse at this point in the project (we have to extend a bit of trust (which we validate) to our engineers, that they are requesting reasonable items\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges that we will accept in this phase\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eMust have at least been on the Canary channel for 1 day, and verified to have been fixed.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReleaseBlock:Dev issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStability issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCures for critical regressions\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePatches to turn off/ disable features\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSmall refinements/fixes\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eImportant notes about what is acceptable:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMinor/ low risk patches that cure defects in the product that would harm the default user experience\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples: Polish fixes, a quick bug fix that didn't make the branch point, etc...\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples of things we’d reject: Major changes to behavior, UI, features, a change to a feature that was behind a flag, etc...\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges we will reject (i.e. things we should Merge-Reject)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eChanges to strings (i.e. .grd changes)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAt branch point, we are frozen from a localization perspective\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBuilding out a feature that isn't complete on the branch (a hint of this is when there are more than a couple of requests for a single feature)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWork for features that are behind flags or not enabled by default (e.g. building out a Finch experiment)\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSome logic tests to apply:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAre we shipping a product that is of lower quality than the previous release?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDoes this patch have a material benefit to a group of end users?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat size of the affected group?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIs the risk (to all of our Beta channel users) of accepting this patch worth the benefit to the affected user base?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen do we move to the next phase?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce we promote the release to the Beta channel\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Phase-3:-The-Push-to-Stable\" /\u003e\u003cspan style\u003d\"font-size:19px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePhase 3: The Push to Stable\u003c/span\u003e\u003c/h2\u003e\u003c/li\u003e\u003cul style\u003d\"font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eKey Objective: Get a working release of Chrome that meets or exceeds the quality level of the existing stable channel.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat this means in practice:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe are looking to cure any remaining:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSecurity issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStability issues\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCritical regressions\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges that we will accept\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eShould have at least been on a Dev channel for 1 day, and verified to have been fixed\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReleaseBlock-Stable issues that fit the category of Security/Stability/Critical Regressions\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eImportant Note about Risk:\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e Risk tolerance in this phase is greatly diminished from when we are in Dev (and diminishes as we approach our stable launch date). We need to be open to patches, but there needs to be a very clear ROI to the overall user population\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges that we will reject\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEverything at this point should be closely reviewed on a case by case basis, but as a general guideline anything that’s not a stability, security, or critical regression at this point should be rejected\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen do we exit this phase?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen we promote to the stable channel.\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Phase-4:-Post-Stable\" /\u003e\u003cspan style\u003d\"font-size:19px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePhase 4: Post Stable\u003c/span\u003e\u003c/h2\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:circle;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eKey Objective: Maintenance mode to fix critical issues that affect stable channel users\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:circle;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat this means in practice:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:square;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCure gross defects that are harming our stable user population\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:square;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMerges that we will accept\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-weight:bold;line-height:17.25px;white-space:pre-wrap\"\u003eShould have at least been on a Dev or Beta channel for 1 day, and verified to have been fixed\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17.25px;white-space:pre-wrap\"\u003eOnly very critical ReleaseBlock-Stable issues that fit the category of Security/Stability/Critical Regressions\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:square;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eImportant Note about Risk:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOur tolerance for merges is at its lowest at this point in the cycle. Every change that lands needs to be safe and must have a very specific purpose.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-size:15px;list-style-type:square;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUnder normal conditions we try to bucket these merges into 1-2 post stable updates. That said, depending on the urgency/ nature of the issues, we may need to do a special release (e.g. a critical issues that affects a non-trivial number of users).\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/the-zen-of-merge-requests"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5708407352957304430"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5708407352957304430"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5708407352957304430"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"the-zen-of-merge-requests"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/886720043425599541"},"published":{"$t":"2014-06-10T01:53:52.677Z"},"updated":{"$t":"2017-08-09T18:16:53.379Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-09T18:16:51.659Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Generated files"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eMany files are generated as part of the Chrome build. Fundamentally these are treated the same as static files (files checked into the repo), but have various subtleties. In many cases the build configuration file will be named \u003ccode\u003egenerated.{gn,gyp,gypi}\u003c/code\u003e or similar.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Location\" /\u003eLocation\u003c/h2\u003e\r\n\u003cdiv\u003eGenerated files are output in \u003ccode\u003e$CHROMIUM_DIR/out/$BUILD_TYPE/gen,\u003c/code\u003e as in \u003ccode\u003esrc/out/Release/gen\u003c/code\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThese are indexed in code search in \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/out/Debug/gen/\" style\u003d\"font-size:10pt;background-color:transparent\"\u003esrc/out/Debug/gen\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003eBecause this is a \u003ci\u003edifferent\u003c/i\u003e directory than static files, any behavior must be separately specified for generated files, notably:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003eInclude search path:\u003c/b\u003e if you compile generated C++ files, you need to list the appropriate directory for generated files in the include search path, e.g., \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003e\u0026lt;(SHARED_INTERMEDIATE_DIR)/blink\u003c/code\u003e in a .gyp file for Blink generated files.\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eNote that static and generated files are not distinguished by path in includes; this is because qualified paths are for componentization, and static and generated files are in the same component.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cb\u003ePossibly different directory tree:\u003c/b\u003e life is much simpler if the generated files follow the same directory structure as the static files: this allows them to be treated uniformly, only needing to specify two roots.\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eE.g., for qualified paths in includes, you don't need to distinguish whether a file is generated or not: you just need to list both roots in the include search path.\u003c/li\u003e\r\n\u003cli\u003eFor the same reason, \u003ccode\u003echeckdeps\u003c/code\u003e is simpler if generated files have the same directory structure.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Outputs-esp.-.pyc-\" /\u003eOutputs (esp. .pyc)\u003c/h2\u003e\u003cdiv\u003e\u003ci\u003eAll\u003c/i\u003e generated files must be listed in the \u003ccode\u003eoutputs\u003c/code\u003e of the build step. If not, these files won't be cleaned up (notably by \u003ccode\u003eninja -t clean\u003c/code\u003e), and then the build won't function properly (it will rebuild excessively). One case of this are byte-compiled Python files (\u003ccode\u003e.pyc\u003c/code\u003e), which are implicitly generated on import: if you generate Python files, you must \u003ci\u003ealso\u003c/i\u003e list the .pyc files in the outputs. See Bug \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"http://crbug.com/397909\"\u003e397909\u003c/a\u003e and CL \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"http://crrev.com/463063003\"\u003e463063003\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Clobber-build\" /\u003eClobber build\u003c/h2\u003e\r\n\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-clobber-landmines#TOC-Moving-generated-files\"\u003eMoving generated files\u003c/a\u003e can break incremental builds, and thus requires a \"clobber build\" (i.e., full, clean build: delete all generated files). This is because t\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ehe build does not \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003edelete\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e old generated files, so a stale file may be used, notably via includes of headers with unqualified paths.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThis shows up as generated files appearing to not be regenerated, though in fact the files are being generated in a new location; see for example Issue \u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d381111\"\u003e381111\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e (\u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d381111#c4\" style\u003d\"font-size:10pt;background-color:transparent\"\u003ecomment\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e).\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo avoid this (see also \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-clobber-landmines#TOC-Moving-generated-files\"\u003eChromium clobber landmines: moving generated files\u003c/a\u003e):\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ci style\u003d\"font-style:italic\"\u003e(Required):\u003c/i\u003e Warn the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/tree-sheriffs\"\u003etree sheriff\u003c/a\u003e or gardener (if other repo).\u003c/li\u003e\u003cli\u003e\u003ci\u003e(Required):\u003c/i\u003e Add a \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-clobber-landmines\"\u003eclobber landmine\u003c/a\u003e, which forces a rebuild.\u003c/li\u003e\u003cul\u003e\u003cli\u003eThis \u003ci\u003eshould\u003c/i\u003e be done as part of the original CL (if in Chromium), or part of the roll (if in another repo).\u003c/li\u003e\u003cli\u003eIf you forget this, it can also be done in a followup CL (E.g., CL \u003ca href\u003d\"https://codereview.chromium.org/316343003\"\u003e316343003\u003c/a\u003e).\u003c/li\u003e\u003cli\u003eFor files in other repos (like Blink), this requires a roll, and thus causes breakage if there are other changes before the roll.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003ci\u003e(Optional):\u003c/i\u003e In case of moving headers, put destination directory \u003ci\u003eafter\u003c/i\u003e origin directory in search path, so new files are found first. (E.g., CL \u003ca href\u003d\"https://codereview.chromium.org/325483002/\"\u003e325483002\u003c/a\u003e (\u003ca href\u003d\"https://codereview.chromium.org/325483002/#msg14\"\u003ecomment\u003c/a\u003e))\u003c/li\u003e\u003cul\u003e\u003cli\u003eThis does not always work, and can cause cruft if the order is not natural.\u003c/li\u003e\u003cli\u003eHowever, this does not require a roll, and thus is good for changes in other repos.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Dependencies\" /\u003eDependencies\u003c/h2\u003e\r\n\u003cdiv\u003eCurrently \u003ccode\u003echeckdeps\u003c/code\u003e is \u003ci\u003enot\u003c/i\u003e run on generated files (Issue \u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d365190\" style\u003d\"font-size:10pt;background-color:transparent\"\u003e365190\u003c/a\u003e), so generated files can break componentization.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/generated-files"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/886720043425599541"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/886720043425599541"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/886720043425599541"}],"author":[{"name":{"$t":"Nils Barth"},"email":{"$t":"nbarth@chromium.org"}}],"sites$pageName":{"$t":"generated-files"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7578745348325911703"},"published":{"$t":"2013-01-25T21:49:11.751Z"},"updated":{"$t":"2017-08-09T18:14:58.843Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-09T18:14:56.943Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Code Browsing in Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(68,68,68);vertical-align:baseline;white-space:pre-wrap\"\u003eYou're new, and Chromium is a big code base. \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYou’ll spend a lot of time searching around Chromium to discover for yourself how the code works, so it makes sense to spend a bit of time investing in a good code browsing solution. Fortunately, there are lots of options.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eCode search\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: The source code is indexed and available on the web, complete with hyperlinks to jump to other symbols. If you have one tab open for each search, then you can easily back up. \u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch\"\u003ehttps://code.google.com/p/chromium/codesearch\u003c/a\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eSlickEdit:\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e This editor works on Linux, Mac, and Windows, and has code searching built in. One drawback is that you may have to spend 20 minutes or so rebuilding your SlickEdit project whenever you sync.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eXcode:\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e The code browsing in Xcode 4.x has a hard time keeping up with the size of the codebase - after a sync, just opening Xcode 4.x with browsing turned on can take more than an hour. We recommend turning symbol indexing off if you use Xcode. That being said, it is a nice browsing environment if you are willing to pay the startup cost, careful to never shut down Xcode, and don't sync often.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eVisual Studio and Intellisense:\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e Also nice, also takes a long time.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eEmacs (or VI) and CScope\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: Emacs plugins can run the cscope indexing tool, and it runs very fast (a minute or two after a fresh sync). the xcscope.el extension will run it for you automatically when you search. Check the cscope page for instructions to integrate with VI. \u003c/span\u003e\u003ca href\u003d\"http://cscope.sourceforge.net/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ehttp://cscope.sourceforge.net/\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. This works on Windows, Mac, and Linux. \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/cscope-emacs-example-linux-setup\"\u003eExample Linux setup\u003c/a\u003e.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eEmacs (or VI) and tags\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: This still works.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eEmacs and rgrep \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e- a bit slower since there is no prebuilt index, but if you can limit your search to a fraction of the source code tree, it is not too slow. Even if you have to search all cpp and h files, it is not too bad, but other methods are faster. There is an emacs extension called grep-a-lot.el which will put the results of each grep into a separate buffer to make it easy to back up when grepping around.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cu\u003eEmacs and git-emacs\u003c/u\u003e: The \u003ca href\u003d\"https://github.com/tsgates/git-emacs/tree/master\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003egit-emacs\u003c/a\u003e package provides 'git-grep' and 'git-find' which are very fast and useful for quickly find keywords or files. It's not actively maintained so may need minor tweaks with recent versions of Emacs.\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ePlain grep from the command line\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: This is still available for those who may perfer it and have learned the syntax.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eFancier grep\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: you can also use “git gs \u0026lt;search term here\u0026gt;” to limit the search to files in the git repository, or “git ls-files | xargs grep -H \u0026lt;search term here\u0026gt;”. These are a lot faster than just letting grep move its way through the whole directory structure. \"gclient grep\" conceptually runs \"git gs\" on all subrepositories.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(68,68,68);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eSource Insight\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(68,68,68);vertical-align:baseline;white-space:pre-wrap\"\u003e - PC only - SI has great browsing support, and the helpful references window that you can configure to see where a function gets called from (among other things). It is important to learn how to customize the .tom file (c.tom) to get the best out of Source Insight.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(68,68,68);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eSublime Text\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(68,68,68);vertical-align:baseline;white-space:pre-wrap\"\u003e - Sublime has a built in search feature that works pretty well although slower than Code Search (but sometimes more reliable). Version 3 also has a built in \"Goto Definition\" feature that opens a list of possible answers which is useful but not very precise (it seems text based, not real x-refs). Indexing is somewhat resource intensive, made continuously in the background but mind that it's limited to currently opened filed and folders included in the current project (so you must \"Add folder to Project\" for it to work properly).\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/code-browsing-in-chromium"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7578745348325911703"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7578745348325911703"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7578745348325911703"}],"author":[{"name":{"$t":"Peter Williamson"},"email":{"$t":"petewil@chromium.org"}}],"sites$pageName":{"$t":"code-browsing-in-chromium"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8005088163211314432"},"published":{"$t":"2013-01-25T23:36:12.623Z"},"updated":{"$t":"2017-08-09T18:06:01.630Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-09T18:06:00.117Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Learning your way around the code"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere is lots to learn about the Chromium code base, both at a macro level (how the processes are laid out, how IPC works, the flow of a URL load), and at a micro level (code idioms such as smart pointer usage guidelines, message loops, common threads, threading guidelines, string usage guidelines, etc).\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Learning-to-do-things-the-Chromium-way\" /\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eLearning to do things the Chromium way\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal;font-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/coding-style\"\u003eCoding style\u003c/a\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e If you’ve coded elsewhere, the chrome guidelines (and code reviewer comments) might seem strict. For example, extra spaces at the end of lines are forbidden. All comments should be legitimate English sentences, including the ending period. There is a strict 80 column limit (with exceptions for things that can’t possibly be broken up).\u003c/span\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-A-personal-learning-plan\" /\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:bold;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eA personal learning plan\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEventually you’ll have your build setup, and want to get to work. In a perfect world, we would have all the time we needed to read every line of code and understand it before writing our first line of code. In practice, this is impossible. So, what can we do? We suggest you develop your own plan for learning what you need, here are some suggested starting points.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-weight:normal;font-family:Arial;color:rgb(68,68,68);vertical-align:baseline;white-space:pre-wrap\"\u003eFortunately for us, Chromium has some top quality \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents\"\u003edesign docs\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-family:Arial;color:rgb(68,68,68);vertical-align:baseline;white-space:pre-wrap\"\u003e. While these can go a bit stale (for instance, when following along, you may find references to files that have been moved or renamed or refactored out of existence), it is awesome to be able to comprehend the way that the code fits together overall.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRead the most important developer design docs\u003c/span\u003e\u003c/li\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;background-color:transparent;vertical-align:baseline\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture\"\u003eMulti-process architecture\u003c/a\u003e\u003c/font\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:lower-alpha;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome\"\u003eDisplaying a web page in Chrome\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:lower-alpha;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/inter-process-communication\"\u003eInter-process communication\u003c/a\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:lower-alpha;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/threading\"\u003eThreading\u003c/a\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:lower-alpha;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/getting-around-the-chrome-source-code\"\u003eGetting around the Chrome source code\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSee if your group has any docs; there may be some docs that people working on the same code will care about while others don’t need to know as much detail.\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLearn some of the code idioms:\u003c/span\u003e\u003c/li\u003e\u003col style\u003d\"font-family:Times New Roman;font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/coding-style/important-abstractions-and-data-structures\"\u003eImportant abstractions and data structures\u003c/a\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/smart-pointer-guidelines\"\u003eSmart pointer guidelines\u003c/a\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/chromium-string-usage\"\u003eChromium String usage\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLater, as time permits, skim all the design docs, reading where it seems relevant.\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGet good at using code search (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/code-browsing-in-chromium\"\u003eor your code browsing tool of choice\u003c/a\u003e)\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLearn who to ask how the code works (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/finding-somebody-who-knows-how-a-piece-of-code-works\" target\u003d\"_blank\"\u003ehow to find somebody who knows how the code works\u003c/a\u003e)\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDebug into the code you need to learn, with a debugger if you can, or log statements and grepping if you cannot.\u003c/span\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-family:Arial;font-weight:normal;list-style-type:decimal;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook at the differences in what you need to understand and you currently understand. For instance, if your group does a lot of GUI programming, then maybe you can invest time in learning GTK+, Win32, or Cocoa programming.\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003ch2 style\u003d\"font-weight:normal\"\u003e\u003ca name\u003d\"TOC-Blink\" /\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eBlink\u003c/span\u003e\u003c/b\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSometimes to make a fix or add a feature to Chromium, the right place to put it is in Blink (formerly WebKit).\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere is a (2012) \u003ca href\u003d\"https://docs.google.com/presentation/pub?id\u003d1ZRIQbUKw9Tf077odCh66OrrwRIVNLvI_nhLm2Gi__F0\"\u003e“How Webkit works” slide deck\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;color:rgb(17,85,204);vertical-align:baseline;white-space:pre-wrap\"\u003e. \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWhile Blink has forked, some of this may still be relevant. \u003c/span\u003e\u003c/b\u003e\u003cspan style\u003d\"font-weight:normal;font-size:10pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px\"\u003eThere is also a slide that explains a \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:6b4957594b746f67\" class\u003d\"disabled\"\u003ebasic workflow for WebKit development for people who are already familiar with Chromium development\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/learning-your-way-around-the-code"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8005088163211314432"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8005088163211314432"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8005088163211314432"}],"author":[{"name":{"$t":"Peter Williamson"},"email":{"$t":"petewil@chromium.org"}}],"sites$pageName":{"$t":"learning-your-way-around-the-code"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"WSl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5818877675715973641"},"published":{"$t":"2011-06-03T00:32:59.572Z"},"updated":{"$t":"2017-08-08T20:36:55.193Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-08T20:36:53.738Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chromium OS [serial] Console Debugging HOWTO"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:500px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Enable-Kernel-Serial-Drivers\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eEnable Kernel Serial Drivers\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Note-that-on-some-systems-these-serial-drivers-are-always-loaded-due-to-them-being-needed-by-some-hardware-ex:-Bluetooth-modules-sometimes-communicate-with-the-AP-via-serial.\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eNote that on some systems these serial drivers are always loaded due to them being needed by some hardware, ex: Bluetooth modules sometimes communicate with the AP via serial.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Enable-Console-Logging\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eEnable Console Logging\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-console-option\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eThe console\u003d option\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Platform-Specific-Settings\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003ePlatform Specific Settings\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Virtual-Machines-QEMU-KVM-\"\u003e\u003cstrong\u003e4.2.1 \u003c/strong\u003eVirtual Machines (QEMU/KVM)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-X86\"\u003e\u003cstrong\u003e4.2.2 \u003c/strong\u003eX86\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-ARM-Exynos\"\u003e\u003cstrong\u003e4.2.3 \u003c/strong\u003eARM Exynos\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Enabling-Serial-Console-Login\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eEnabling Serial Console Login\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Build-Chromium-OS-image-using-your-custom-kernel-config\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eBuild Chromium OS image using your custom kernel config\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Appendix\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eAppendix\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-A:-How-to-find-alternate-IO-and-MMIO-addresses-for-your-UART\"\u003e\u003cstrong\u003e7.1 \u003c/strong\u003eA: How to find alternate IO and MMIO addresses for your UART\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eThe kernel team has been working to remove cruft from the Chromium OS kernel configs. Since there are no Chromebooks with a serial port, serial port drivers were removed from the stock configuration, which is a minor inconvenience for those who still do a lot of debugging using the serial port.\u003c/p\u003e\r\n\u003cp\u003eA quick howto was e-mailed some time ago \u003ca href\u003d\"http://groups.google.com/a/chromium.org/group/chromium-os-dev/browse_thread/thread/5c8a44b76cecb2ce\"\u003ehere\u003c/a\u003e for using mini-PCIe serial cards, but the information is somewhat limited in scope and is worth correcting and modernizing. There are several ways to accomplish what is described here, please feel free to chip in.\u003c/p\u003e\r\n\u003cp\u003eThis HOWTO assumes you have built a bootable Chromium OS image and are not afraid to edit some config files. We'll assume the target platform is 32-bit \"x86-generic\".\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Enable-Kernel-Serial-Drivers\" /\u003eEnable Kernel Serial Drivers\u003c/h2\u003e\u003cdiv\u003eWhen the team goes to release a board to the public, right before release, the default serial console enable flags (USE and TTY_CONSOLE [see \u003cb\u003eEnabling Serial Console Login\u003c/b\u003e below] in \u003ccode\u003emake.conf\u003c/code\u003e are reverted.\u003c/div\u003e\r\n\u003cp\u003eFor x86 based systems, use the pcserial USE flag when building your kernel:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003ccode\u003echromium-os$ USE\u003dpcserial cros_workon_make --board\u003d\"${BOARD}\" chromeos-kernel\u003c/code\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eFor Exynos-based systems, add the samsung_serial USE flag:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003ccode\u003echromium-os$ USE\u003dsamsung_serial cros_workon_make --board\u003d\"${BOARD}\" chromeos-kernel\u003c/code\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Note-that-on-some-systems-these-serial-drivers-are-always-loaded-due-to-them-being-needed-by-some-hardware-ex:-Bluetooth-modules-sometimes-communicate-with-the-AP-via-serial.\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eNote that on some systems these serial drivers are always loaded due to them being needed by some hardware, ex: Bluetooth modules sometimes communicate with the AP via serial.\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003eNote that you will likely need to replace \"chromeos-kernel\" in your cros_workon_make call with an ebuild relevant to your board, like chromeos-kernel-3_18 for asuka.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Enable-Console-Logging\" /\u003eEnable Console Logging\u003c/h2\u003e\r\n\u003cp\u003eBy default, the kernel command line is set up to enable no consoles and thus log no output. This leads to a cleaner/speedier boot, but is not helpful when you need to see failure messages. Thus you'll need change some kernel command-line parameters to get meaningful output.\u003c/p\u003e\r\n\u003cp\u003eWhen you create the image with build_image, simply use the --enable_serial flag to select the console for logging output. The value it takes is exactly the same as what the kernel expects for \u003cb\u003econsole\u003d\u003c/b\u003e (see the next section for more details).\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003ccode\u003e$ ./build_image --enable_serial ttyS0\u003c/code\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cp\u003eNote that every board will have a a different bus layout resulting in potentially different ttyS# port for serial console. See \u003cb\u003ePlatform Specific Settings\u003c/b\u003e, below.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-The-console-option\" /\u003eThe console\u003d option\u003c/h3\u003e\r\n\u003cp\u003eThe console\u003d option is described in detail in \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/kernel/+/master/Documentation/kernel-parameters.txt\"\u003ekernel-parameters.txt\u003c/a\u003e in the Linux kernel source tree.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Platform-Specific-Settings\" /\u003ePlatform Specific Settings\u003c/h3\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Virtual-Machines-QEMU-KVM-\" /\u003eVirtual Machines (QEMU/KVM)\u003c/h4\u003e\u003cp\u003eIf you boot the image in a VM, and you use the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines\"\u003ecros_start_vm\u003c/a\u003e script to launch it, then serial output will be logged to a \u003ccode\u003e/tmp/kvm.xxx.serial\u003c/code\u003e file (exact name will be shown when starting the VM).\u003c/p\u003e\u003cp\u003eIf you want to interact with the serial console directly, you'll need to launch qemu yourself and pass the -nographics flag directly. The serial device should be connected to stdin/stdout by default.\u003c/p\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-X86\" /\u003eX86\u003c/h4\u003e\r\n\u003cp\u003eOn most x86 platforms, ttyS0 will refer to the southbridge's UART accessed via ports specified in Super IO configuration space. However, for add-in PCIe cards you may need to specify a MMIO address to access the UART. For example, \"console\u003duart8250,mmio,0x50401000,115200n8\". An alternative is to specify the ttyS# port configured by the kernel for the specific hardware and connection that you're testing on. (E.g. \"ttyS2\".)\u003c/p\u003e\r\n\u003cp\u003eSee Appendix A below for more details.\u003c/p\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-ARM-Exynos\" /\u003eARM Exynos\u003c/h4\u003e\r\n\u003cp\u003eYou probably want to use ttySAC3 for your console.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Enabling-Serial-Console-Login\" /\u003eEnabling Serial Console Login\u003c/h2\u003e\r\n\u003cp\u003eSee the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide/using-serial-tty\"\u003eControlling Enabled Consoles document\u003c/a\u003e for all the details.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Build-Chromium-OS-image-using-your-custom-kernel-config\" /\u003eBuild Chromium OS image using your custom kernel config\u003c/h2\u003e\r\n\u003cp\u003eSet the pcserial USE flag when calling build_packages:\u003c/p\u003e\r\n\u003cdiv /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003ccode\u003eUSE\u003dpcserial ./build_packages\u003c/code\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Appendix\" /\u003eAppendix\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-A:-How-to-find-alternate-IO-and-MMIO-addresses-for-your-UART\" /\u003eA: How to find alternate IO and MMIO addresses for your UART\u003c/h3\u003e\r\n\u003cdiv\u003eIf you already have UART support but simply do not know what options to pass to the kernel, you may examine a few sources to figure it out.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eMethod 1: Look at /proc/iomem\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003elocalhost ~ # cat /proc/iomem | grep serial\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \u003cb\u003e50401000-50401007 : serial\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003enote: for two port pci-serial cards you will see two entries like this:\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cspan\u003e e0801000-e0801008 : serial\u003c/span\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cspan\u003e\u003cspan\u003e e0801200-e0801207 : serial\u003c/span\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eand the each range will correspond to the two different serial ports\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eMethod 2: Look at PCI device config\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003elocalhost chronos # lspci | grep -i serial\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e02:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\r\n\u003cdiv\u003elocalhost chronos # lspci -v -s 02:00.0\u003c/div\u003e\r\n\u003cdiv\u003e02:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller (prog-if 02 [16550])\u003c/div\u003e\r\n\u003cdiv\u003e Subsystem: Device a000:1000\u003c/div\u003e\r\n\u003cdiv\u003e Flags: bus master, fast devsel, latency 0, IRQ 16\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e I/O ports at 2000 [size\u003d8]\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e Memory at c0401000 (32-bit, non-prefetchable) [size\u003d4K]\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e Memory at c0400000 (32-bit, non-prefetchable) [size\u003d4K]\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e Capabilities: [80] Power Management version 3\u003c/div\u003e\r\n\u003cdiv\u003e Capabilities: [88] MSI: Enable- Count\u003d1/32 Maskable- 64bit+\u003c/div\u003e\r\n\u003cdiv\u003e Capabilities: [c0] Express Legacy Endpoint, MSI 00\u003c/div\u003e\r\n\u003cdiv\u003e Kernel driver in use: serial\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eMethod 3: Look at dmesg for lines such as this:\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\r\n\u003cdiv\u003e[ 0.676698] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\u003c/div\u003e\r\n\u003cdiv\u003e[ 0.678173] serial 0000:04:00.3: PCI INT D -\u0026gt; GSI 18 (level, low) -\u0026gt; IRQ 18\u003c/div\u003e\r\n\u003cdiv\u003e[ 0.678716] 1 ports detected on Oxford PCI Express device\u003c/div\u003e\r\n\u003cdiv\u003e[ 0.678910] ttyS0: detected caps 00000700 should be 00000100\u003c/div\u003e\r\n\u003cdiv\u003e[ 0.679365] 0000:04:00.3: ttyS0 at \u003cb\u003eMMIO\u003c/b\u003e \u003cb\u003e0x50401000\u003c/b\u003e (irq \u003d 18) is a 16C950/954\u003c/div\u003e\r\n\u003cdiv\u003e[ 0.679899] console [ttyS0] enabled, bootconsole disabled\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5818877675715973641"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5818877675715973641"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5818877675715973641"}],"author":[{"name":{"$t":"David Hendricks"},"email":{"$t":"dhendrix@chromium.org"}}],"sites$pageName":{"$t":"serial-debugging-howto"},"sites$revision":{"$t":"30"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7824565905199985775"},"published":{"$t":"2011-09-08T00:03:20.059Z"},"updated":{"$t":"2017-08-07T07:11:52.596Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-07T07:11:51.136Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"No-compile Tests"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eNo Compile Tests are used to verify that certain coding constructs will fail to compile. These were developed to test the base/callback.h and base/bind.h constructs which need to ban certain types of assignments in order to preserve type safety. The tests however can be used to enforce any sort of compile-time check, such as static_assert.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eWhy do we want to assert failure in compilation?\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eMost of the time you don't want to do this. However, with template code, you are playing with the type system. In particular with callbacks, it's possibly to accidentally write code that allows unsafe type conversion leading to a code execution. Here's a specific example:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e int func(double f) {\u003c/div\u003e\u003cdiv\u003e printf(\"woohoo! Called with %lf!\\n\", f);\u003c/div\u003e\u003cdiv\u003e }\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e Callback\u0026lt;int(void)\u0026gt; c \u003d Bind(\u0026amp;func, 1);\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you look carefully at the types, Callback\u0026lt;int(void)\u0026gt; has no concept of how many arguments func originally needed, or what types they were. Somewhere between the call to Bind() and the assignment, the type of func:int(int), and the type of 1:int was captured and erased so that it could be assigned into a Callback that only knew the resulting function was int(void). To do this, there is some casting happening that can break type safety. In the Bind() implementation, the code has been constructed carefully to fail at compile time if you were to try and do something like:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e Callback\u0026lt;void(void)\u0026gt; c \u003d Bind(\u0026amp;func, 1);\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHowever, the system is complicated and regressions can occur. In fact, they already snuck in once. To ensure we do not regress in behavior and allow a dangerous type safety violation, we need a set of \"no compile tests\" that assert that known dangerous constructs will not silently compile. This makes it much safer to modify the Bind() implementation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThough this uses the Callback/Bind system as an example, any code that ends up needing to ensure a certain set of compile time constraints aren't violated can benefit from these kinds of tests.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eHow to write:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eCreate a \".nc\" source file.\u003c/li\u003e\u003cli\u003eImport build/nocompile.gni\u003c/li\u003e\u003cli\u003eInclude the \".nc\" source file into a sources section of a nocompile_test target (eg., base_nocompile_tests).\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eThe nocompile.gni import adds a template target that will process the .nc files and produce a .cc file that represents the test results. On a failed no-compile test (aka success compilation), the generated .cc file will consist of a set of #error lines holding the compiler output. This will cause the unittest to fail to build. If all tests succeed, then the .cc file will contain a set of unittests representing each no-compile test which trivially succeed. This lets you know that the tests were at least run.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe comment at the top of build/nocompile.gni has most of the documentation for how to use this system.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1447271005938918470"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/no-compile-tests"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7824565905199985775"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7824565905199985775"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7824565905199985775"}],"author":[{"name":{"$t":"Albert Wong"},"email":{"$t":"ajwong@chromium.org"}}],"sites$pageName":{"$t":"no-compile-tests"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"Xyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3908792126156697729"},"published":{"$t":"2014-02-02T07:14:33.211Z"},"updated":{"$t":"2017-08-05T02:39:57.323Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-05T02:39:55.248Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"The Chromium OS Platform"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Goals\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eGoals\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Decisions\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDecisions\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Build-System\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eBuild System\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Style\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eStyle\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Inter-Process-Communication-IPC-\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eInter-Process Communication (IPC)\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Data-Serialization\"\u003e\u003cstrong\u003e3.3.1 \u003c/strong\u003eData Serialization\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Utility-Libraries\"\u003e\u003cstrong\u003e3.4 \u003c/strong\u003eUtility Libraries\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Metrics\"\u003e\u003cstrong\u003e3.5 \u003c/strong\u003eMetrics\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Sandboxing-User-Process-etc...-Isolation-\"\u003e\u003cstrong\u003e3.6 \u003c/strong\u003eSandboxing (User/Process/etc... Isolation)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Install-Locations\"\u003e\u003cstrong\u003e3.7 \u003c/strong\u003eInstall Locations\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Crypto\"\u003e\u003cstrong\u003e3.8 \u003c/strong\u003eCrypto\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing\"\u003e\u003cstrong\u003e3.9 \u003c/strong\u003eTesting\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eChromium OS has many userland programs and sub-projects that make up the \"platform\" of the system. You can find them listed (as well as more details on each one) in the main \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages\"\u003ePackages page\u003c/a\u003e. This guide is about the platform those projects build off. It is meant as the authoritative guide when writing a new project (or updating an existing one). You should not deviate from the choices outlined here without a very very good reason (and chances are that what you think is a very good reason is really not).\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Goals\" /\u003eGoals\u003c/h2\u003e\r\n\u003cp\u003eHere are some explicit goals for the Chromium OS platform:\u003c/p\u003e\r\n\r\n\u003cul\u003e\u003cli\u003eWe should align \u0026amp; share code with Chromium whenever possible.\u003c/li\u003e\r\n\u003cli\u003eC++ is the language you should be using.\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eOnly use C when C++ is not a viable option (e.g. kernel/bootloader/etc...).\u003c/li\u003e\r\n\u003cli\u003eShell code is rarely acceptable beyond short snippets.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eEach platform project should align \u0026amp; share code whenever possible.\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUse the same build system.\u003c/li\u003e\r\n\u003cli\u003eUse the same set of utility libraries.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Decisions\" /\u003eDecisions\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Build-System\" /\u003eBuild System\u003c/h3\u003e\r\n\u003cp\u003eRather than have every package implement its own build system (scons, cmake, autotools, hand written makefiles, common.mk, etc...), The One True Build System we use is \u003ca href\u003d\"https://code.google.com/p/gyp/\"\u003eGYP\u003c/a\u003e. More details on how it integrates can be found in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/getting-started-with-platform2\"\u003ePlatform2 page\u003c/a\u003e.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Style\" /\u003eStyle\u003c/h3\u003e\r\n\u003cp\u003eWe follow the various Google style guides for Chromium OS projects. For third party projects, you should follow the style that project has decided on.\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://www.chromium.org/developers/coding-style\"\u003eC++\u003c/a\u003e - Chromium C++ Style Guide\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/python-style-guidelines\"\u003ePython\u003c/a\u003e - Chromium OS Python Style Guide (a superset of the Google Python Style Guide)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/shell-style-guidelines\"\u003eShell\u003c/a\u003e - Chromium OS shell-script Style Guide\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Inter-Process-Communication-IPC-\" /\u003eInter-Process Communication (IPC)\u003c/h3\u003e\r\n\u003cp\u003eMost communication between processes is done via D-Bus. See the \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/docs/+/master/dbus_best_practices.md\"\u003e\"D-Bus best practices\" doc\u003c/a\u003e for more information.\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Data-Serialization\" /\u003eData Serialization\u003c/h4\u003e\r\n\u003cp\u003eIf you need to serialize data, either for reading back later (from disk/cache/etc...) or for passing to another process (via ipc/network/etc...), then you should use:\u003c/p\u003e\r\n\r\n\u003cul\u003e\u003cli\u003eIPC (local machine or network)\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://dbus.freedesktop.org/\" rel\u003d\"nofollow\"\u003edbus\u003c/a\u003e - for simple stuff, dbus itself includes marshaling of basic types\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/protobuf/\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eprotocol buffers\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e (protobufs) - for larger/binary content, or when communicating via the network\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003cli\u003eReading/Writing to disk\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebase::JSON* - for general saved runtime state and/or config files (reading \u0026amp; writing)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebase::IniParser - for simple config files (read only); but json is still preferred\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Utility-Libraries\" /\u003eUtility Libraries\u003c/h3\u003e\r\n\u003cp\u003eFirst off, whenever you want to do some new that you suspect someone else has done already, you should look through Chromium's base library and Chromium OS library (libchromeos). We build \u0026amp; ship these in Chromium OS; see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/libchrome\"\u003elibchrome page\u003c/a\u003e and \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/libchromeos\" style\u003d\"font-size:10pt;background-color:transparent\"\u003elibchromeos page\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003efor building against them.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003eHere is a common run down of functionality provided by libchrome that platform projects use:\u003c/p\u003e\r\n\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"text-align:left;border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:left;width:262px;height:15px\"\u003e logging\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:left;width:204px;height:15px\"\u003e base/logging.h\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:left;width:262px;height:15px\"\u003e command line flags\u003c/td\u003e\r\n\u003ctd style\u003d\"width:204px;height:15px\"\u003e base/command_line.h\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:262px;height:15px\"\u003e string parsing\u003c/td\u003e\r\n\u003ctd style\u003d\"width:204px;height:15px\"\u003e base/strings/*\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:262px;height:15px\"\u003e file path manipulation\u003c/td\u003e\r\n\u003ctd style\u003d\"width:204px;height:15px\"\u003e base/file_path.h\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e file read/write utilities\u003c/td\u003e\r\n\u003ctd\u003e base/file_util.h\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e JSON manipulation\u003c/td\u003e\r\n\u003ctd\u003e base/json/*\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e INI file reading\u003c/td\u003e\r\n\u003ctd\u003e base/ini_parser.h\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e DBus bindings\u003c/td\u003e\r\n\u003ctd\u003e dbus/*\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e Message Loop\u003c/td\u003e\r\n\u003ctd\u003e base/message_loop.h\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cp\u003eFor libchromeos, see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/libchromeos\" style\u003d\"font-size:10pt;background-color:transparent\"\u003elibchromeos page\u003c/a\u003e for and overview of the functionality implemented there.\u003c/p\u003e\u003cp\u003eIn particular, you should avoid using:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/gflags/\"\u003egflags\u003c/a\u003e - command line parsing\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/google-glog/\"\u003eglog\u003c/a\u003e - logging\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Metrics\" /\u003eMetrics\u003c/h3\u003e\r\n\u003cp\u003eIf you want your program to gather \u0026amp; report statistics at runtime (like UMA stats), then you should use:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003emetrics - the Chromium OS metrics library\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Sandboxing-User-Process-etc...-Isolation-\" /\u003eSandboxing (User/Process/etc... Isolation)\u003c/h3\u003e\r\n\u003cp\u003eAll daemons should always be run with as restricted permissions as possible. This often means using a dedicated UID/GID, chroots, and seccomp filters. This is all handled by:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide/chromium-os-sandboxing\"\u003eminijail\u003c/a\u003e - the Chromium OS jail manager\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Install-Locations\" /\u003eInstall Locations\u003c/h3\u003e\r\n\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:center;width:292px;height:15px\"\u003eType\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center;width:340px;height:15px\"\u003eWhere\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:292px;height:15px\"\u003e public executables\u003c/td\u003e\r\n\u003ctd style\u003d\"width:340px;height:15px\"\u003e \u003ccode\u003e/usr/bin/\u003c/code\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:292px;height:15px\"\u003e public libraries\u003c/td\u003e\r\n\u003ctd style\u003d\"width:340px;height:15px\"\u003e \u003ccode\u003e/usr/$(get_libdir)/\u003c/code\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:292px;height:15px\"\u003e internal executables/libraries/plugins\u003c/td\u003e\r\n\u003ctd style\u003d\"width:340px;height:15px\"\u003e \u003ccode\u003e/usr/$(get_libdir)/${PN}/\u003c/code\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:292px;height:15px\"\u003e data files\u003c/td\u003e\r\n\u003ctd style\u003d\"width:340px;height:15px\"\u003e \u003ccode\u003e/usr/share/${PN}/\u003cbr /\u003e\r\n\u003c/code\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:292px;height:15px\"\u003e include files\u003c/td\u003e\r\n\u003ctd style\u003d\"width:340px;height:15px\"\u003e \u003ccode\u003e/usr/include/\u003c/code\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cp\u003eYou should avoid /sbin/ and /bin/ and /usr/sbin/ paths. They are unnecessary and you should just stick to /usr/bin/.\u003c/p\u003e\u003cp\u003eSimilarly, you should avoid /$(get_libdir)/ (e.g. /lib/).\u003c/p\u003e\r\n\u003cp\u003eYou should avoid /opt/. It is for exceptional cases only (mostly non-public/binary-only projects).\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Crypto\" /\u003eCrypto\u003c/h3\u003e\r\n\u003cp\u003eYou should use \u003ca href\u003d\"http://www.openssl.org/\" rel\u003d\"nofollow\"\u003eOpenSSL\u003c/a\u003e for crypto services. A few projects still use \u003ca href\u003d\"https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS\" rel\u003d\"nofollow\"\u003eNSS\u003c/a\u003e, but the plan is to migrate away from that, so no new code should be using it.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Testing\" /\u003eTesting\u003c/h3\u003e\r\n\u003cp\u003eSince you will of course be writing unittests for all of your projects, you should use (which is to say unittests are a hard requirement):\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/googletest/\"\u003egtest\u003c/a\u003e - unittest framework\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/googlemock/\"\u003egmock\u003c/a\u003e - mocking framework\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/platform"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3908792126156697729"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3908792126156697729"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3908792126156697729"}],"author":[{"name":{"$t":"Mike Frysinger"},"email":{"$t":"vapier@chromium.org"}}],"sites$pageName":{"$t":"platform"},"sites$revision":{"$t":"16"}},{"gd$etag":"\"XSl7JmA7\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3025636262756420824"},"published":{"$t":"2012-12-02T01:16:33.096Z"},"updated":{"$t":"2017-08-02T17:15:20.578Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-08-02T17:15:18.778Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Triaging Gasper Alerts"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Obsolete.-\" /\u003e\u003cfont color\u003d\"#ff0000\"\u003eObsolete.\u003c/font\u003e \u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-More-relevant-updated-information-at:-https:-chromium.googlesource.com-chromium-src-master-docs-speed-perf_regression_sheriffing.md\" /\u003e\u003cfont size\u003d\"3\"\u003eMore relevant updated information at: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/speed/perf_regression_sheriffing.md\" style\u003d\"background-color:transparent;font-weight:normal\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/speed/perf_regression_sheriffing.md\u003c/a\u003e\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8352598335739972631"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/sheriffing/triaging-gasper-alerts"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3025636262756420824"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3025636262756420824"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3025636262756420824"}],"author":[{"name":{"$t":"Ojan Vafai"},"email":{"$t":"ojan@chromium.org"}}],"sites$pageName":{"$t":"triaging-gasper-alerts"},"sites$revision":{"$t":"74"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9110861090688090063"},"published":{"$t":"2016-04-29T00:37:06.505Z"},"updated":{"$t":"2017-07-31T18:05:53.319Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-31T18:05:50.997Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Vectorized icons in native Chrome UI"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003ethe docs have migrated to markdown: \u003cspan style\u003d\"background-color:transparent\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/vector_icons/README.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/components/vector_icons/README.md\u003c/a\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/vectorized-icons-in-native-chrome-ui"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9110861090688090063"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9110861090688090063"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9110861090688090063"}],"author":[{"name":{"$t":"Evan Stade"},"email":{"$t":"estade@chromium.org"}}],"sites$pageName":{"$t":"vectorized-icons-in-native-chrome-ui"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"KXsmYD1bHg..\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8590908504692658353"},"published":{"$t":"2013-05-14T23:00:05.863Z"},"updated":{"$t":"2017-07-31T09:04:37.908Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-31T09:04:35.917Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autotest Client Tests"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-References\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-3\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-References\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eReferences\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Overview\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eOverview\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Background\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eBackground\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Prerequisites\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Objectives\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eObjectives\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-a-test-on-the-client\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eRunning a test on the client\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Through-test_that\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eThrough test_that\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Directly-on-the-DUT\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eDirectly on the DUT\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Editing-a-Test\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eEditing a Test\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Writing-a-New-Test\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eWriting a New Test\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Emerging-and-Running\"\u003e\u003cstrong\u003e5.1 \u003c/strong\u003eEmerging and Running\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Checking-results\"\u003e\u003cstrong\u003e5.2 \u003c/strong\u003eChecking results\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Import-helpers\"\u003e\u003cstrong\u003e5.3 \u003c/strong\u003eImport helpers\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-run_once-cleanup-and-initialize\"\u003e\u003cstrong\u003e5.4 \u003c/strong\u003erun_once, cleanup and initialize\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:normal;line-height:1.15\"\u003eReferences \u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h1\u003e\u003cspan\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/master/docs/best-practices.md\" style\u003d\"line-height:1.15;text-indent:36pt;font-size:10pt;text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eAutotest Best Practices\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://git.chromium.org/gitweb/?p\u003dchromiumos/third_party/autotest.git;a\u003dblob;f\u003dCODING_STYLE;h\u003d777cc1de3e409a69581ae44a9432d8634dc114e6;hb\u003dHEAD\" style\u003d\"line-height:1.15;text-indent:36pt;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eAutotest Coding Style Guide\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests\" style\u003d\"line-height:1.15;text-indent:36pt;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eWriting Autotests\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/dynamic-suite-codelab\" style\u003d\"line-height:1.15;text-indent:36pt;font-size:10pt;text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eDynamic Suites Codelab\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/server-side-test\" style\u003d\"line-height:1.15;text-indent:36pt;font-size:10pt;text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eServer Side Autotests Codelab\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"text-indent:36pt;text-decoration:underline;font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs\" target\u003d\"_blank\"\u003eResult logs \u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"text-indent:36pt;white-space:pre;background-color:transparent;font-family:Arial;font-size:15px;line-height:1.15\"\u003e\t\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"text-indent:36pt;text-decoration:underline;font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries\" target\u003d\"_blank\"\u003eClient helper libraries\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting\" style\u003d\"font-size:10pt;line-height:normal;text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eTroubleshooting ebuild files\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-best-practices\" style\u003d\"text-decoration:none\" /\u003e\u003c/p\u003e\u003c/span\u003e\u003cdiv\u003e\u003cspan\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Overview\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"5\"\u003eOverview\u003c/font\u003e\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn this codelab, you will build a client-side Autotest to check the disk and cache throughput of a ChromiumOS device. You will learn how to:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e1. Setup the environment needed for autotest\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e2. Run and edit a test\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e3. Write a new test and control file\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e4. Check results of the test\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn the process of doing so you will also learn a little about the autotest framework.\u003c/span\u003e\u003c/span\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.454545021057129px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cdiv\u003e\u003cspan\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Background\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eBackground\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutotest is an open source project designed for testing the linux kernel. Before starting this codelab you might benefit from scrolling through some \u003c/span\u003e\u003ca href\u003d\"https://github.com/autotest/autotest/wiki/AddingTest\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eupstream documentation\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e on autotest client tests. Autotest is responsible for managing the state of multiple client devices as a distributed system, by integrating a web interface, database, servers and the clients themselves. Since this codelab is about client tests, what follows is a short description of how autotest runs a specific test, on one client. \u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eAutotest looks through all directories in client/tests and client/site_tests for simple python files that begin with ‘control.’. These files contain a list of variables, and a call to job.run_test. The control variables tell autotest when to schedule the test, and the call to run_test tells autotest how. Each test instance is part of a job. Autotest creates this job object and forks a child process to execute its control file.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cimg height\u003d\"107px;\" src\u003d\"https://docs.google.com/a/google.com/drawings/d/szgUiW_L7jkUJospRoV-dlQ/image?w\u003d668\u0026amp;h\u003d107\u0026amp;rev\u003d1\u0026amp;ac\u003d1\" width\u003d\"668px;\" /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:11px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote the exec mentioned above is the python keyword, not os.exec\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTests reside in a couple of key locations in your checkout, and map to similar locations on the DUT (Device Under Test). Understanding the layout of these directories might give you some perspective:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e\u0026lt;cros_checkout\u0026gt;/chromium/src/chrome/test/functional\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e: holds chrome/chromeos functional tests. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;line-height:1.15;white-space:pre-wrap\"\u003eThese include pyauto tests, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ebut not autotest tests (Note: pyauto is deprecated). \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOn the DUT, these map to: \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e/usr/local/autotest/deps/chrome_test/test_src/chrome/test/functional/\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e\u0026lt;cros_checkout\u0026gt;/src/third_party/autotest/client/site_tests\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e: holds autotest tests. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eOn the DUT, these map to /usr/local/autotest/tests.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e\u0026lt;cros_checkout\u0026gt;/src/platform/factory\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e: holds some private factory tests, although the bulk of factory tests reside in site_tests.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePlease consult the \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/dynamic-suite-codelab\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003edynamic suite codelab\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e to understand how your tests can run as a suite.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Prerequisites\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003ePrerequisites\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echroot build environment.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutotest source, basic python knowledge.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Objectives\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eObjectives\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eIn this codelab, we will:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eRun a test, edit and rerun a test on the client device\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWrite a new test from scratch\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eView and collect results of the test\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eGet an overview of how autotest on the client works\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eGet an overview of the classes and libraries available to help you write tests.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Running-a-test-on-the-client\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;color:#000000;background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eRunning a test on the client\u003c/span\u003e\u003c/h1\u003e\u003c/span\u003e\u003cspan\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eFirst, get the autotest source:\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ea. If you \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/developer-guide\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eGot the Code\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eyou already have autotest.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eb. If you do not wish to sync the entire source and reimage a device, you can run tests in a vm.\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/google.com/chromeos/for-team-members/lab/gsutil-setup\" style\u003d\"line-height:1.15;font-size:10pt;text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eInstall gsutils\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eGet an image\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e Select your image, e.g.,\r\n\u003c/span\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003egsutil ls gs://chromeos-releases/dev-channel/lumpy/*\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:1.15;white-space:pre-wrap\"\u003eCopy your image, e.g.,\r\n\u003c/span\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003egsutil cp gs://chromeos-releases/dev-channel/lumpy/3014.0.0/ChromeOS-R24-3014.0.0-lumpy.zip ./\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:1.15;white-space:pre-wrap\"\u003eUnzip the image and untar autotest.tar.bz2, e.g.,\r\n\u003c/span\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003eunzip ChromeOS-R24-3014.0.0-lumpy.zip chromiumos_qemu_image.bin autotest.tar.bz2\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003ca href\u003d\"http://www.chromium.org/running-smoke-suite-on-a-vm-image\" style\u003d\"line-height:1.15;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eGet a VM\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e:\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:1.15;white-space:pre-wrap\"\u003eThe unzipped folder from 2.b should contain a VM.\r\n\u003c/span\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e\u0026lt;cros_checkout\u0026gt;/src/scripts/bin/cros_start_vm --image_path\u003dpath/to/chromiumos_qemu_image.bin\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eIf the cros_start_vm scripts fails you need to enable virtualization on your workstation. check for /dev/kvm or run ‘sudo kvm-ok’ (you might have to ‘sudo apt-get install cpu-checker’ first). It will either say /dev/kvm exists and kvm acceleration can be used or that /dev/kvm doesn’t and kvm acceleration can NOT be used. In the latter case, hit esc on boot and go to ‘system security:’, turn on virtualization. More information about running tests on a vm can be found \u003ca href\u003d\"http://www.chromium.org/running-smoke-suite-on-a-vm-image\" target\u003d\"_blank\"\u003ehere\u003c/a\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:normal\"\u003e\u003cfont size\u003d\"3\"\u003eOnce you have autotest, there are 2 ways to run tests, either using your machine as a server or from the client DUT. Running it directly on the device is faster, but requires invoking it from your server at least once.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Through-test_that\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eThrough test_that\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e1. enter chroot: \u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003ecros_checkout_directory$ cros_sdk\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2. Invoke test_that, t\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eo run login_LoginSuccess on a vm with local autotest bits:\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:1.15;background-color:transparent;font-family:Arial;white-space:pre-wrap\"\u003e\u003ccode\u003etest_that localhost:9222 l\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;font-family:Arial;white-space:pre-wrap;background-color:transparent\"\u003e\u003ccode\u003eogin_LoginSuccess\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003eThe basic usage of test_that:\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003etest_that -b board dut_ip[:port] TEST\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003eTEST can be the name of the test, or suite:suite_name for a suite. For example, to run the smoke suite on a device with board x86-mario\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003etest_that -b x86-mario 192.168.x.x suite:smoke\u003c/font\u003e\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003ePlease see the\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/master/docs/test-that.md\" target\u003d\"_blank\"\u003e test_that \u003c/a\u003epage for more details.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Directly-on-the-DUT\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline\"\u003eDirectly on the DUT\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003eYou have to use test_that at least once so it copies over the test/dependencies before attempting this; If you haven’t, /usr/local/autotest may not exist on the device.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"white-space:normal\"\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"color:rgb(0,136,0);line-height:15.454545021057129px;white-space:pre-wrap;background-color:transparent;vertical-align:baseline\"\u003e\u003ccode\u003essh root@\u0026lt;ip_address_of_dut\u0026gt;, \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"line-height:15.454545021057129px;white-space:pre-wrap;background-color:transparent;vertical-align:baseline\"\u003e\u003cfont color\u003d\"#6aa84f\"\u003e\u003ccode\u003epassword\u003dtest0000 \u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003eOnce you're on the client device:\u003c/font\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"3\"\u003e\u003ccode\u003ecd /usr/local/autotest\u003c/code\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"3\"\u003e\u003ccode\u003e./bin/autotest_client tests/login_LoginSuccess/control\u003c/code\u003e\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Editing-a-Test\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;color:#000000;background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eEditing a Test\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"background-color:transparent;white-space:pre-wrap;font-size:15px;font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ci\u003e\u003cfont color\u003d\"#0000ff\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003eFor python-only changes, test_that uses\u003ccode\u003e autotest_quickmerge\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline\"\u003e to copy your python changes to the sysroot. There is no need to run rcp/scp to copy the change over to your DUT.\u003c/span\u003e\u003c/font\u003e\u003c/i\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThe fastest way to edit a test is directly on the client. If you find the text editor on a Chromium OS device non-intuitive then edit the file locally and use a copy tool like rcp/scp to send it to the DUT. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e1. Add a print statement to the \u003c/span\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/gitweb?p\u003dchromiumos/third_party/autotest.git;a\u003dblob;f\u003dclient/site_tests/login_LoginSuccess/login_LoginSuccess.py;h\u003d2b46ccbb0b37c2eaaa5e0c1a0a23b37c7d877546;hb\u003dHEAD\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003elogin_LoginSuccess\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e test you just ran\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2. rsync it into /usr/local/autotest/tests on the client\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"3\"\u003e\u003ccode\u003ercp path/to/login_LoginSuccess.py root@\u0026lt;DUT_ip\u0026gt;:/usr/local/autotest/tests/login_LoginSuccess/\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3. run it by invoking autotest_client, as described in the section on Running Tests Directly on the client. Note a print statement won’t show up when the test is run via test_that.\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:19px;line-height:1.15;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;background-color:transparent;font-size:15px;font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;background-color:transparent;font-size:15px;font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);text-decoration:none;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003eThe more formal way of editing a test is to change the source and emerge it. The steps to doing this are very similar to those described in the section on \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cfont color\u003d\"#1155cc\"\u003e\u003cu\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests#TOC-Emerging-and-Running\"\u003eemerging tests\u003c/a\u003e\u003c/u\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);text-decoration:none;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e. You might want to perform a full emerge if you’ve modified several files, or would like to run your test in an environment similar to the automated build/test pipeline. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:24pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Writing-a-New-Test\" /\u003e\u003cspan style\u003d\"font-size:24px;font-family:Arial;color:#000000;background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWriting a New Test\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12px;font-family:Arial;color:#000000;background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eA word of caution: copy-pasting from Google Docs has been known to convert consecutive whitespace characters into unicode characters, which will break your control file. Using CTRL-C + CTRL-V is safer than using middle-click pasting on Linux.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOur aim is to create a test which does the following:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003erun \u003ccode\u003ehdparm -T \u0026lt;disk\u0026gt;\u003c/code\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;line-height:1.15;text-indent:36pt;white-space:pre-wrap\"\u003eSearch output for timing numbers. \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eReport this as a result.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e1. Create a directory in \u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003eclient/site_tests\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e, name\u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e kernel_HdParmBasic\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2. Create a control file \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:medium;line-height:11.960000038146973px;white-space:pre-wrap;background-color:transparent\"\u003ekernel_HdParmBasic/control\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e, a\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e bare minimum control file for the hdparm test:\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003eAUTHOR \u003d \"Chrome OS Team\"\r\nNAME \u003d \"kernel_HdParmBasic\"\r\nTIME \u003d \"SHORT\"\r\nTEST_TYPE \u003d \"client\"\r\n\r\nDOC \u003d \"\"\"\r\nThis test uses hdparm to measure disk performance.\r\n\"\"\"\r\n\r\njob.run_test('kernel_HdParmBasic', named_arg\u003d'kernel test')\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eTo which you can add the necessary control variables as described in the \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/master/docs/best-practices.md\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eautotest best practices\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e. Job.run_test can take any named arguments, and the appropriate ones will be \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"http://git.chromium.org/gitweb/?p\u003dchromiumos/third_party/autotest.git;a\u003dblob;f\u003dclient/common_lib/test.py;h\u003d9b51cd65f25b05b9f9a0b60339f77af85f46dc4b;hb\u003d546142013484dbdb2c1322debe9e5fc5e91f63c1#l474\" target\u003d\"_blank\"\u003echerry picked\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e and passed on to the test.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-style:normal;font-variant:normal;font-weight:normal;white-space:pre-wrap;text-decoration:none;background-color:transparent;font-size:15px;color:rgb(0,136,0);font-family:Inconsolata;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3. Create a test file:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eAt a bare minimum the test needs a run_once method, which should contain the implementation of the test; it also needs to inherit from\u003c/span\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/gitweb?p\u003dchromiumos/third_party/autotest.git;a\u003dblob;f\u003dclient/bin/test.py;h\u003d33f194ca39e955d030789b08ae8f89bda8f45cab;hb\u003dHEAD\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e test.test\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e. Most tests also need initialize and cleanup methods. Create a test file \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;line-height:13.800000190734863px;white-space:pre-wrap;background-color:transparent\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003eclient/site_tests/kernel_HdParmBasic/kernel_HdParmBasic.py\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15.199999809265137px\"\u003e:\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003eimport logging\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003e\u003cbr /\u003e\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003efrom autotest_lib.client.bin import test\r\n\r\n\r\nclass kernel_HdParmBasic(test.test):\r\n version \u003d 1\r\n\r\n def initialize(self):\r\n logging.debug('initialize')\r\n\r\n def run_once(self, named_arg\u003d''):\r\n logging.debug(named_arg)\r\n\r\n def cleanup(self):\r\n logging.debug('cleanup')\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003eNotice how only run_once takes the argument named_arg, which was passed in by the \u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003ejob.run_test\u003c/font\u003e\u003cspan style\u003d\"font-size:15px\"\u003e \u003c/span\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003emethod. You can pass arguments to initialize and cleanup this way too. You can find examples of initialize and cleanup methods in helper classes, like \u003c/span\u003e\u003c/span\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/gitweb?p\u003dchromiumos/third_party/autotest.git;a\u003dblob;f\u003dclient/cros/cros_ui_test.py;h\u003d1f95267d8dce01626e7bcb560922e9513eef265d;hb\u003dHEAD\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ecros_ui_test\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Emerging-and-Running\" /\u003e\u003cspan style\u003d\"font-size:19px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEmerging and Running\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBasic flow:\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003eAdd the new test: add \u003c/span\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e+tests_kernel_HdParmBasic\u003c/code\u003e in the\u003ccode\u003e IUSE_TESTS\u003c/code\u003e s\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eection of the autotest-tests ebuild file:\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Inconsolata;color:rgb(0,136,0);vertical-align:baseline\"\u003e\u003ccode\u003e#\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:trebuchet ms,sans-serif;color:rgb(0,136,0);vertical-align:baseline\"\u003e\u003ccode\u003ethird_party/chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:trebuchet ms,sans-serif;color:rgb(0,136,0);line-height:12.727272033691406px\"\u003e\u003ccode\u003eebuild\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:12.727272033691406px;white-space:pre-wrap\"\u003e\u003ccode\u003eIUSE_TESTS\u003d\"${IUSE_TESTS}\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:12.727272033691406px;white-space:pre-wrap\"\u003e\u003ccode\u003e # some other tests\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:12.727272033691406px;white-space:pre-wrap\"\u003e\u003ccode\u003e # some other tests\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:12.727272033691406px;white-space:pre-wrap\"\u003e\u003ccode\u003e # ...\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:12.727272033691406px;white-space:pre-wrap;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap;background-color:transparent\"\u003e\u003ccode\u003e+tests_kernel_HdParmBasic\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap;background-color:transparent\"\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003ecros_workon autotest-test\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003ecros_workon --board\u003dlumpy start autotest-tests\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eemerge autotest-tests\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"font-family:Arial;line-height:13.8000001907349px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003eemerge-lumpy chromeos-base/autotest-tests\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan style\u003d\"line-height:17.25px;white-space:pre-wrap\"\u003e\u003cdiv style\u003d\"font-size:15px;font-family:Arial\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent\"\u003e(if that fails because of dependency problems, you can try \u003c/span\u003e\u003cspan style\u003d\"font-size:medium;font-family:monospace;color:rgb(0,96,0);line-height:normal\"\u003ecros_workon --board\u003dlumpy autotest-chrome\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent\"\u003e and append \u003c/span\u003e\u003cspan style\u003d\"line-height:normal;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003echromeos-base/autotest-chrome\u003c/code\u003e\u003c/font\u003e\u003c/font\u003e\u003cfont face\u003d\"Arial\" style\u003d\"font-size:15px\"\u003e to the line above)\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:1.15;white-space:pre-wrap;background-color:transparent\"\u003erun test_that\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003etest_that -b lumpy DUT_IP kernel_HdParmBasics\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you’d like more perspective you might benefit from consulting the \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003etroubleshooting\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e doc.\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Checking-results\" /\u003e\u003cspan style\u003d\"font-size:19px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eChecking results\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe results folder contains \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003emany logs\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, to analyze client test logging messages you need to find kernel_HdParmBasic.(DEBUG, INFO, ERROR) depending on which logging macro you used. Note: logging message priorities escalate, and debug \u0026lt; info \u0026lt; warning \u0026lt; error. If you want to see all logging messages just look in the debug logs.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClient test logs should be in: \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e/tmp/test_that.\u0026lt;RESULTS_DIR_HASH\u0026gt;/kernel_HdParmBasic/kernle_HdParmBasic/debug\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003ewhere you will have to replace ‘\u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e/tmp/test_that.\u0026lt;RESULTS_DIR_HASH\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003e’ with anything you might have specified through the --results_dir_root option.\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:1.15;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003eYou can also find the latest results in \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:15.199999809265137px;line-height:13.800000190734863px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003e/tmp/test_that_latest\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn the DEBUG logs you should see messages like: \u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e01/18 12:22:46.716 DEBUG| kernel_HdParmBasic:0025| Your logging message\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote that print messages will not show up in these logs since we redirect stdout. \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eIf you’ve already performed a ‘run_remote’ once you can directly invoke your test on a client, as described in the previous section. Two things to note when using this approach:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003ea. print messages do show up\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003eb. logging messages are also available under autotest/results/default/\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline\"\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:18pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Import-helpers\" /\u003e\u003cspan style\u003d\"font-size:19px;background-color:transparent;vertical-align:baseline\"\u003eImport helpers\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eYou can import any autotest client helper module with the line\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003efrom autotest_lib.client.\u0026lt;dir\u0026gt; import \u0026lt;module\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eYou might also benefit from reading how the framework \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline\"\u003emakes autotest_lib\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e available for you.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003ekernel_HdParmBasic Needs test.test, so it needs to import test from client/bin.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eLooking back at our initial test plan, it also needs to:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e1. run \u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003ehdparm -T \u0026lt;disk\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eThis implies running things on the command line, modules to look at are base/site utils. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eHowever common_lib’s ‘utils.py’ conveniently gives us both.\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003efrom autotest_lib.client.bin import test, utils\u003c/font\u003e\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e2. Search output for timing numbers. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e3. Report this as a result.\u003c/span\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003eimport logging, re\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent;font-family:Arial,Verdana,sans-serif;font-size:13px;white-space:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent;font-family:Arial,Verdana,sans-serif;font-size:13px;white-space:normal\" /\u003e\u003ch2 style\u003d\"background-color:transparent\"\u003e\u003ca name\u003d\"TOC-run_once-cleanup-and-initialize\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-size:19px;line-height:1.15\"\u003erun_once, cleanup and initialize\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline\"\u003eIf your test manages any state on the DUT it might need initialization and cleanup. In our case the subprocess handles it’s own cleanup, if any. Putting together all we’ve talked about, our run_once method looks like:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:6pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:6pt\"\u003e\u003cspan style\u003d\"font-family:trebuchet ms,sans-serif;color:rgb(0,0,136);font-size:13px;line-height:1;vertical-align:baseline\"\u003e\u003ccode\u003eimport\u003c/code\u003e\u003c/span\u003e\u003ca href\u003d\"https://cs.corp.google.com/#search\u0026amp;q\u003dpackage:%5Echromeos_public$%20file:(/%7C%5E)logging(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)\u0026amp;is_navigation\u003d1\" style\u003d\"font-family:trebuchet ms,sans-serif;background-color:transparent;line-height:1;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,0);vertical-align:baseline\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(85,26,139);vertical-align:baseline\"\u003e\u003ccode\u003elogging\u003c/code\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:trebuchet ms,sans-serif;font-size:13px;line-height:1;vertical-align:baseline\"\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/span\u003e\u003ca href\u003d\"https://cs.corp.google.com/#search\u0026amp;q\u003dpackage:%5Echromeos_public$%20file:(/%7C%5E)re(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)\u0026amp;is_navigation\u003d1\" style\u003d\"font-family:trebuchet ms,sans-serif;background-color:transparent;line-height:1;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"line-height:1;background-color:transparent;font-size:13px;color:rgb(0,0,0);vertical-align:baseline\"\u003e \u003c/span\u003e\u003cspan style\u003d\"line-height:1;background-color:transparent;font-size:13px;color:rgb(85,26,139);vertical-align:baseline\"\u003e\u003ccode\u003ere\u003c/code\u003e\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:6pt\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:6pt\"\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003efrom\u003c/code\u003e\u003c/span\u003e\u003ca href\u003d\"https://cs.corp.google.com/#search\u0026amp;q\u003dpackage:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)\u0026amp;is_navigation\u003d1\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(85,26,139);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eautotest_lib.client.bin\u003c/code\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eimport\u003c/code\u003e\u003c/span\u003e\u003ca href\u003d\"https://cs.corp.google.com/#search\u0026amp;q\u003dpackage:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin/test(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)\u0026amp;is_navigation\u003d1\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(85,26,139);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003etest\u003c/code\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/span\u003e\u003ca href\u003d\"https://cs.corp.google.com/#search\u0026amp;q\u003dpackage:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin/utils(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)\u0026amp;is_navigation\u003d1\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(85,26,139);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eutils\u003c/code\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eclass\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003ekernel_HdParmBasic\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e(test.test):\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\"\"\"\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e Measure disk performance: both disk (-t) and cache (-T).\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \"\"\"\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003ccode\u003e version \u003d \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,102,102);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e1\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003edef\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e run_once(self):\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eif\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e (utils.get_cpu_arch() \u003d\u003d \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\"arm\"\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e):\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e disk \u003d \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'/dev/mmcblk0'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003eelse\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e:\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e disk \u003d \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'/dev/sda'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e logging.debug(\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\"Using device %s\"\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e, disk)\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e result \u003d utils.system_output(\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'hdparm -T %s'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e % disk)\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e match \u003d re.search(\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'(\\d+\\.\\d+) MB\\/sec'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e, result)\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e self.write_perf_keyval({\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'cache_throughput'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e: match.groups()[\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,102,102);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e0\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e]})\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e result \u003d utils.system_output(\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'hdparm -t %s'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e % disk)\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e match \u003d re.search(\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'(\\d+\\.\\d+) MB\\/sec'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e, result)\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e self.write_perf_keyval({\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,136,0);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e'disk_throughput'\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e: match.groups()[\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(0,102,102);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e0\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e]})\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Inconsolata;white-space:pre-wrap;vertical-align:baseline\"\u003e\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003eNote the use of \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-How-do-I-write-a-performance-test-\" style\u003d\"font-size:13px;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline\"\u003eperformance keyvals\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px\"\u003e instead of plain logging statements. The keyvals are written to \u003c/span\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e/usr/local/autotest/results/default/kernel_HdParmBasic/results/keyval \u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:15px\"\u003eon the client and will be reported on your console when run through run_remote_tests:\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e---------------------------------------\u003cbr /\u003ekernel_HdParmBasic/kernel_HdParmBasic cache_throughput 4346.76\u003cbr /\u003ekernel_HdParmBasic/kernel_HdParmBasic disk_throughput 144.28\u003cbr /\u003e---------------------------------------\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;text-indent:36pt\"\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-best-practices\" style\u003d\"text-decoration:none\" /\u003e\u003c/p\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/36211457229797764"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8590908504692658353"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8590908504692658353"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8590908504692658353"}],"author":[{}],"sites$pageName":{"$t":"autotest-client-tests"},"sites$revision":{"$t":"128"}},{"gd$etag":"\"Xil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3068707316235659712"},"published":{"$t":"2017-05-10T21:38:46.182Z"},"updated":{"$t":"2017-07-29T03:29:00.422Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-29T03:28:57.781Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Service Worker Security FAQ"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Do-not-edit-for-historical-reference-onlyThe-canonical-version-of-the-FAQ-is-now-in-the-Chromium-source-tree.\" /\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif;font-size:13.3333px;font-weight:normal\"\u003e\u003cb\u003e\u003cfont size\u003d\"6\"\u003eDo not edit — for historical reference only\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif;font-size:13.3333px;font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif;font-size:13.3333px;font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eThe \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/security/service-worker-security-faq.md\"\u003ecanonical version of the FAQ is now in the Chromium source tree\u003c/a\u003e.\u003c/font\u003e\u003c/div\u003e\u003c/h4\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cbr /\u003e\u003c/h4\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2\" /\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Do-not-edit-for-historical-reference-onlyThe-canonical-version-of-the-FAQ-is-now-in-the-Chromium-source-tree.\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eDo not edit — for historical reference onlyThe canonical version of the FAQ is now in the Chromium source tree.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Service-Workers-seem-extremely-risky-Why-are-they-OK-\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eService Workers seem extremely risky! Why are they OK?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Do-Service-Workers-run-in-a-sandbox-\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDo Service Workers run in a sandbox?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-APIs-can-Service-Workers-access-\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eWhat APIs can Service Workers access?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Do-Service-Workers-obey-the-same-origin-policy-\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eDo Service Workers obey the same-origin policy?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Do-Service-Workers-live-forever-\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eDo Service Workers live forever?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-can-I-see-Service-Workers-in-Chrome-\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eHow can I see Service Workers in Chrome?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Do-Service-Workers-keep-running-after-I-close-the-tab-\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eDo Service Workers keep running after I close the tab?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Can-attackers-use-Service-Workers-to-trigger-attacks-developed-after-SW-registration-\"\u003e\u003cstrong\u003e9 \u003c/strong\u003eCan attackers use Service Workers to trigger attacks developed after SW registration?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-If-a-site-has-an-XSS-vulnerability-can-the-attacker-permanently-compromise-that-origin-for-me-\"\u003e\u003cstrong\u003e10 \u003c/strong\u003eIf a site has an XSS vulnerability, can the attacker permanently compromise that origin for me?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Can-sites-opt-out-of-Service-Workers-\"\u003e\u003cstrong\u003e11 \u003c/strong\u003eCan sites opt out of Service Workers?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-many-SWs-can-an-origin-or-Chrome-itself-spawn-\"\u003e\u003cstrong\u003e12 \u003c/strong\u003eHow many SWs can an origin, or Chrome itself, spawn?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Can-attackers-hide-Service-Worker-scripts-in-JPEGs-or-other-non-script-MIME-types-\"\u003e\u003cstrong\u003e13 \u003c/strong\u003eCan attackers 'hide' Service Worker scripts in JPEGs or other non-script MIME types?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Can-iframes-register-Service-Workers-\"\u003e\u003cstrong\u003e14 \u003c/strong\u003eCan iframes register Service Workers?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Why-doesn-t-Chrome-prompt-the-user-before-registering-a-Service-Worker-\"\u003e\u003cstrong\u003e15 \u003c/strong\u003eWhy doesn’t Chrome prompt the user before registering a Service Worker?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-if-I-don-t-want-any-SWs-\"\u003e\u003cstrong\u003e16 \u003c/strong\u003eWhat if I don't want any SWs?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-are-some-SW-best-practices-for-site-operators-\"\u003e\u003cstrong\u003e17 \u003c/strong\u003eWhat are some SW best practices for site operators?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-SW-bugs-would-quality-for-a-bounty-under-Chrome-s-VRP-\"\u003e\u003cstrong\u003e18 \u003c/strong\u003eWhat SW bugs would quality for a bounty under Chrome’s VRP?\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:medium;white-space:pre-wrap;background-color:transparent;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis FAQ is specifically about service workers. Also see the general \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/security-faq\"\u003esecurity FAQ\u003c/a\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eLike the general security FAQ, this document is a collaborative effort by many Chromium developers. (\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:medium;white-space:pre-wrap;background-color:transparent\"\u003ersesek, estark, falken, slightlyoff, jakearchibald, evn, raymes, ainslie, mek, lgarron, elawrence, kinuko, palmer, your name here...) \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:arial,sans-serif;font-size:medium;white-space:pre-wrap\"\u003eLast updated 12 May 2017. If you see an error or have an additional question, and have a Chromium account, go ahead and fix it. If you don't have a Chromium account, email palmer@chromium.org for a fix.\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-3\" /\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Service-Workers-seem-extremely-risky-Why-are-they-OK-\" /\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eService Workers seem extremely risky! Why are they OK?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eService Workers (SW) are indeed powerful. They support compelling web applications that can run offline or with intermittent connectivity. You can edit documents, browse and buy from catalogs, send social media messages, write email, etc. even in the subway! Service Workers can make the web platform more viable than ever before, enabling web apps to better compete with native apps even while essentially retaining the browse-to-use, sandboxed nature of the \u003c/span\u003e\u003ca href\u003d\"https://www.w3.org/wiki/Open_Web_Platform\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOpen Web Platform\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e (OWP) that we all love. The rest of this FAQ will explain how the SW designers and implementers have mitigated the risks that necessarily come with this functionality.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eService Workers are a replacement for and an improvement on the legacy \u003c/span\u003e\u003ca href\u003d\"https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eApplication Cache API\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, which has been available in the OWP for a very long time.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor more background on Service Workers, see \u003c/span\u003e\u003ca href\u003d\"https://github.com/w3c/ServiceWorker/blob/master/explainer.md\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eService Workers Explained\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Do-Service-Workers-run-in-a-sandbox-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eDo Service Workers run in a sandbox?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eYes, SWs run in renderer processes. When Chrome starts a SW, it chooses a renderer process that is associated with the SW’s origin. If one does not exist, the browser creates a new one using a new SiteInstance for the origin.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-What-APIs-can-Service-Workers-access-\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eWhat APIs can Service Workers access?\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe HTML \u003c/span\u003e\u003ca href\u003d\"https://html.spec.whatwg.org/#apis-available-to-workers\" style\u003d\"font-family:arial,sans-serif\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003especification partially enumerates the API surface available to Workers\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. See also \u003c/span\u003e\u003ca href\u003d\"https://developer.mozilla.org/en-US/docs/Web/API/Client\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eClient\u003c/font\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, and \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-interface\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eServiceWorkerGlobalScope\u003c/font\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. (Note that SWs do not have access to synchronous APIs.)\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHowever, other web platform specifications can add new API surface. For example, \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/permissions/#navigator-and-workernavigator-extension\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ethe Permissions API exposes a \u003c/span\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003epermissions\u003c/span\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e attribute to workers\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. Generally, SWs have access to a subset of the web platform APIs, although there are some Worker- and Service Worker-specific APIs that do not make sense for in-page JavaScript.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e[Service]WorkerGlobalScope\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e is of course not necessarily a strict subset of \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWindow\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, and similarly \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWorkerNavigator\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e is not necessarily a strict subset of \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNavigator\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. And the various SW events are of course only exposed to SWs.)\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Do-Service-Workers-obey-the-same-origin-policy-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eDo Service Workers obey the same-origin policy?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eService Worker registration specifies that \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#register-algorithm\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eService Workers must run in the same origin as their callers\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe origin comparison for finding a Service Worker registration for a request is \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#scope-match-algorithm\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003especified\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e to be to be a longest-prefix match of serialized URLs, including their path. (E.g. \u003c/span\u003e\u003ca href\u003d\"https://example.com/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://example.com/\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e !\u003d \u003c/span\u003e\u003ca href\u003d\"https://example.com.evil.com/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://example.com.evil.com/\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.) This specification gap seems fragile to us, \u003c/span\u003e\u003ca href\u003d\"https://github.com/w3c/ServiceWorker/issues/1118\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eand should be fixed to be specified and implemented as actual origin equality\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, but doesn’t currently seem exploitable.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnly \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/webappsec-secure-contexts/#example-c52936fc\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSecure Contexts can register or use Service Workers\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBecause SWs can call \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eimportScripts\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e to import scripts (from any other origin), it is a good idea for site operators to set a Content-Security-Policy response header on the ServiceWorker’s JavaScript response, instructing the browser what sources of script the origin considers trustworthy. That would reduce an XSS attacker’s ability to pull in their own code.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Do-Service-Workers-live-forever-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eDo Service Workers live forever?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThere are two concepts of “live” here. One is about the installed registration and one is about the running Service Worker thread.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe installed registration lasts indefinitely, similar to origin-scoped storage like \u003c/span\u003e\u003ca href\u003d\"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIndexedDB\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. Additionally, the browser performs an update check after any navigation using the Service Worker, invalidating the HTTP cache every 24 hours. (Additionally, \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#dfn-use-cache\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eaccording to a recent spec change\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, browsers will revalidate the HTTP cache for SW scripts unless the site opts into using the cache. Chrome does not yet adhere to this new part of the spec, \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/detail?id\u003d675540\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ebut will soon\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.)\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe browser also performs an update check whenever the SW starts and periodically while the worker is running, if it has not checked in the last 24 hours (86,400 seconds, \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#handle-functional-event-algorithm\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eas specified in the Handle Functional Event algorithm\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e).\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eThe browser can terminate a running SW thread at almost any time. Chrome terminates a SW if the SW has been idle for 30 seconds. Chrome also detects long-running workers and terminates them. It does this if an event takes more than 5 minutes to settle, or if the worker is busy running synchronous JavaScript and does not respond to a ping within 30 seconds. When a SW is not running, Developer Tools and chrome://serviceworker-internals show its status as STOPPED.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-How-can-I-see-Service-Workers-in-Chrome-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eHow can I see Service Workers in Chrome?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYou can see them in the \u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003eService Workers\u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e field in the \u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003eApplication\u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e tab of \u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003eDeveloper Tools\u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. You can also look at chrome://serviceworker-internals.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Do-Service-Workers-keep-running-after-I-close-the-tab-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eDo Service Workers keep running after I close the tab?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:400;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf an origin has any Service Workers running, each worker will be shut down soon after it processes the last event. Events that can keep a worker alive include push notifications. (Note that the \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://cs.chromium.org/chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc?type\u003dcs\u0026amp;l\u003d270\" style\u003d\"color:rgb(17,85,204)\"\u003epush notifications will trigger a user-visible notification if the SW does not create one\u003c/a\u003e, and they also require the person to grant the origin permission in a prompt\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. you can see that in action in this \u003ca href\u003d\"https://gauntface.github.io/simple-push-demo/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003epush notifications demo app\u003c/a\u003e.)\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Can-attackers-use-Service-Workers-to-trigger-attacks-developed-after-SW-registration-\" /\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eCan attackers use Service Workers to trigger attacks developed after SW registration?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eFor example, c\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eould an attacker convince users to visit a malicious website, then wait for (e.g.) a V8 bug to show up in Chrome's repository, then write an exploit, and then somehow run that exploit on the machines of everyone who visited the malicious website in the last month or so?\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eWithout explicit permission from the user, the browser won't let the SW poll for/receive any push notification events the attacker's server may (try to) send, and hence the SW won't get a chance to handle the events.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eSimilarly, you might imagine a SW that tries to use \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eimportScripts\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to periodically (re-)load \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003emaybe-v8-payload.js\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. But, the SW would only get to do that as part of an event handler. And if the SW isn't getting any events (because the person is not browsing or navigating to attacker.com, and because the person never granted attacker.com push notification permission), then it will never get to run its event handlers, and so again the SW won't get a chance to attack.\r\n\r\nIf the person \u003ci\u003eis\u003c/i\u003e currently browsing attacker.com, then the attacker doesn't gain any additional attack benefit from a Service Worker. They can just \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026lt;script src\u003d\"maybe-v8-payload.js\"\u0026gt;\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e as usual, from the in-page JavaScript.\u003c/font\u003e\u003c/span\u003e\r\n\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eHowever,\u003c/b\u003e if/when \u003ca href\u003d\"https://github.com/w3c/ServiceWorker/blob/master/foreign_fetch_explainer.md\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eForeign Fetch\u003c/a\u003e ships, the situation will change if people browse sites that fetch resources from the attacker's server.\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-If-a-site-has-an-XSS-vulnerability-can-the-attacker-permanently-compromise-that-origin-for-me-\" /\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003eIf a site has an XSS vulnerability, can the attacker permanently compromise that origin for me?\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003eAn XSS attacker can indeed register an evil SW. As before SWs, XSS is a very powerful mode of attack on a web origin. To mitigate the risk that an XSS attack will register a malicious SW, the browser requires that the SW registration URL come from the origin itself. Thus, to use an XSS attack to register a malicious SW, the attacker needs the additional capability to host their own scripts on the server.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHere is another exploit scenario: If the page with an XSS vulnerability also has a JSONP endpoint, the attacker could use it to (1) bypass CSP; (2) register a SW; and (3) call \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eimportScripts\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e to import a third-party script to persist until\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003ethe site operators detect and remediates the issue, and\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eusers navigate to the site again while online.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn an XSS situation, the 24 hour cache directive limit ensures that a malicious or compromised SW will outlive a fix to the XSS vulnerability by a maximum of 24 hours (assuming the client is online). Site operators can shrink the window of vulnerability by setting lower TTLs on SW scripts. We also encourage developers to \u003c/span\u003e\u003ca href\u003d\"https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ebuild a kill-switch SW\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn the near future, the right cleanup strategy (for this and other issues) will be \u003c/span\u003e\u003ca href\u003d\"https://www.w3.org/TR/clear-site-data/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClear-Site-Data\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAdditionally, site operators should ignore (e.g. respond with \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e400 Bad Request\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e) requests that have the Service-Worker request header for domains or paths that the server doesn’t expect to be serving SW scripts for.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Can-sites-opt-out-of-Service-Workers-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eCan sites opt out of Service Workers?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSites that do not intend to serve Service Workers on particular domains or paths can check for and explicitly reject requests for worker scripts, by checking for \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/ServiceWorker/#service-worker-script-request\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ethe Service-Worker request header\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-How-many-SWs-can-an-origin-or-Chrome-itself-spawn-\" /\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eHow many SWs can an origin, or Chrome itself, spawn?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe current specification and the current implementation in Chrome do not define any limits.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Can-attackers-hide-Service-Worker-scripts-in-JPEGs-or-other-non-script-MIME-types-\" /\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eCan attackers 'hide' Service Worker scripts in JPEGs or other non-script MIME types?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003ci\u003eCan an attacker upload (for example) JPEG files to a site that supports the capability, and then use the uploaded files as SW scripts?\u003c/i\u003e\r\n\r\nThe SW specification and implementation require that a SW script have the right JavaScript MIME type. (Additionally, as noted elsewhere in this document, server operators should reject SW script requests except for the exact endopints they intend to serve SW scripts from.)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Can-iframes-register-Service-Workers-\" /\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eCan iframes register Service Workers?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYes, if and only if they are themselves secure contexts. \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/webappsec-secure-contexts/#examples-framed\" style\u003d\"font-size:medium;background-color:transparent\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBy definition\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, that means that they must be nested inside secure contexts, all the way up to the top-level document.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eAdditionally, third-party iframes can’t register Service Workers if third party cookies are blocked. (See chrome://settings/content.)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Why-doesn-t-Chrome-prompt-the-user-before-registering-a-Service-Worker-\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWhy doesn’t Chrome prompt the user before registering a Service Worker?\u003c/font\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Chrome Team generally prefers to ask people about things that are privacy-relevant, using nouns and verbs that are simple and precise (camera, mic, geo-location, and so on). But we avoid asking questions about resource-use (caching, persistence, CPU, and so on). We’re better prepared to make those types of resource decisions automatically. (Consider, for example, that the HTTP cache, AppCache, and even \u003c/span\u003e\u003ca href\u003d\"https://en.wikipedia.org/wiki/Gears_(software)\" style\u003d\"font-size:medium;background-color:transparent\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGoogle Gears\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e also do not/did not prompt the user.)\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003ca href\u003d\"https://docs.google.com/presentation/d/1suzMhtvMtA11jxPUdH1jL1oPh-82rTymCnslgR3ehEE/edit#slide\u003did.p\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAn informal study by Chrome team members Rebecca Rolfe, Ben Wells, and Raymes Khoury\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e suggests that people do not generally have sufficient context to understand permission requests triggered by API calls from origins in iframes. It seems reasonable that people would similarly lack the context to understand requests from Service Workers.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-What-if-I-don-t-want-any-SWs-\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat if I don't want \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eany\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e SWs?\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eYou can disable SWs by disabling storage in chrome://settings. SW are gated on cookie/local data storage settings. (That is, the \u003cb\u003eBlock sites from setting any data\u003c/b\u003e radio button in \u003cb\u003eContent Settings\u003c/b\u003e.)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eClearing browser data (CBD; the \u003cb\u003eClear browsing data...\u003c/b\u003e button in Settings or \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003echrome://settings/clearBrowserData\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e) also deletes SWs. You can verify that by following this test procedure:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eVisit https://gauntface.github.io/simple-push-demo/\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eIn a second tab, visit chrome://serviceworker-internals/ to see the ACTIVATED and RUNNING SW\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eNote that the origin/the origin's SW cannot actually send any push notifications until you grant it that permission\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eIn a third tab, go to chrome://settings/clearBrowserData to clear browsing data; clear it by clicking \u003cb\u003eClear browsing data\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eReload chrome://serviceworker-internals/ to see that the SW's status is now REDUNDANT and STOPPED\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eClose the Simple Push Demo tab\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eReload chrome://serviceworker-internals/ to see that the SW is now gone\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eYou can also remove individual SW registrations with chrome://serviceworker-internals/.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you really want to not use the modern web, you can use one of the browsers that don't (yet) support SWs. But, eventually, the\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;vertical-align:baseline;white-space:pre-wrap\"\u003e Open Web Platform will continue to evolve into a powerful, useful platform supporting applications that are \u003c/span\u003e\u003ca href\u003d\"https://paul.kinlan.me/slice-the-web/\" style\u003d\"background-color:transparent;font-size:medium\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003esecure, linkable, indexable, composable, and ephemeral\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;vertical-align:baseline;white-space:pre-wrap\"\u003e. Yes, SWs make web apps somewhat less ephemeral, but we believe the increased applicability of the OWP is worth it.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBrowser vendors are committed to ensuring the security of the OWP improves even as we give it new capabilities. This process happens in the open, in fora like \u003c/span\u003e\u003ca href\u003d\"https://www.w3.org/2001/tag/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eW3C Technical Architecture Group\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, \u003c/span\u003e\u003ca href\u003d\"https://www.w3.org/blog/2015/07/wicg/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eW3C’s Web Platform Incubator Community Group\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, and \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eblink-dev@chromium.org\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. Security and privacy reviews are part of the process and we invite knowledgeable experts to participate in those open fora.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-What-are-some-SW-best-practices-for-site-operators-\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:medium;white-space:pre-wrap\"\u003eWhat are some SW best practices for site operators?\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003ca href\u003d\"https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBuild a kill-switch SW\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUse \u003c/span\u003e\u003ca href\u003d\"https://www.w3.org/TR/clear-site-data/\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClear-Site-Data\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e when it becomes available.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBe aware of the need for longer session lifetimes, since clients may go offline and SWs might need to POST cached requests after coming back online. \u003c/span\u003e\u003ca href\u003d\"https://developers.google.com/web/updates/2016/06/2-cookie-handoff\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHere is one way to handle that\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch4 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-What-SW-bugs-would-quality-for-a-bounty-under-Chrome-s-VRP-\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat SW bugs would quality for a bounty under \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/Home/chromium-security/vulnerability-rewards-program\" style\u003d\"font-size:medium;background-color:transparent\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome’s VRP\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e?\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:medium;background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you could break one or more of the security assertions we make in this FAQ, that would be potentially rewardable under the Vulnerability Rewards Program (VRP). Here is a non-exhaustive list of examples:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eOver-long registration/lifetime (e.g. a SW able to run or stay alive even without incoming events to handle)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eSame-origin bypass or off-origin SW registration\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eAccess to APIs that require prompts, choosers, or permissions, without permission having been granted to the origin\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eGeolocation\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eHardware sensors\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eMicrophone, camera, media devices\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eUSB, Bluetooth\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHere is \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d1\u0026amp;q\u003dType%3DBug-Security+serviceworker\u0026amp;colspec\u003dID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified\u0026amp;x\u003dm\u0026amp;y\u003dreleaseblock\u0026amp;cells\u003dids\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ea list of historical SW security bugs\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e in Chromium’s bug tracker.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you believe you have found a bug in the SW specification, please \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?template\u003dSecurity%20Bug\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003efile a new Chromium bug using the Security template\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. It’s a good idea to file bugs with all browser vendors that implement the buggy section of the spec.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e \u003c/font\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you believe you have found a bug in Chrome’s implementation of SW, please \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?template\u003dSecurity%20Bug\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003efile a new bug using the Security template\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. The Chrome Security Team will triage it within 1 or 2 business days. Good bug reports come with minimal test cases that demonstrate the problem!\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Roboto;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4433083908861966341"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/security-faq/service-worker-security-faq"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3068707316235659712"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3068707316235659712"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3068707316235659712"}],"author":[{"name":{"$t":"Chris Palmer"},"email":{"$t":"palmer@chromium.org"}}],"sites$pageName":{"$t":"service-worker-security-faq"},"sites$revision":{"$t":"17"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2842842086020703924"},"published":{"$t":"2016-02-08T20:01:45.332Z"},"updated":{"$t":"2017-07-28T18:39:48.832Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-28T18:35:31.624Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chromium Code of Conduct"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003e\u003cspan style\u003d\"font-family:Open Sans,sans-serif;font-size:14px\"\u003eGoogle and the Chromium team are committed to preserving and fostering a diverse, welcoming community.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003e\u003cfont face\u003d\"Open Sans, sans-serif\"\u003e\u003cspan style\u003d\"font-size:14px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Open Sans, sans-serif\" style\u003d\"color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003e\u003cspan style\u003d\"font-size:14px\"\u003ePlease read our Code of Conduct at \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:14px\"\u003e\u003cfont color\u003d\"#212121\" face\u003d\"Open Sans, sans-serif\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/CODE_OF_CONDUCT.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/CODE_OF_CONDUCT.md\u003c/a\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/conduct"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2842842086020703924"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2842842086020703924"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2842842086020703924"}],"author":[{"name":{"$t":"Jeffrey Yasskin"},"email":{"$t":"jyasskin@chromium.org"}}],"sites$pageName":{"$t":"conduct"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"Wil7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5994965627925106008"},"published":{"$t":"2010-06-01T08:38:42.970Z"},"updated":{"$t":"2017-07-27T05:51:41.782Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-27T05:51:39.649Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Using Dr. Memory"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:320px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Note:-Dr.Memory-bot-has-retired-and-the-documentation-here-is-obsolete-added-on-Jul.-27-2017-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eNote: Dr.Memory bot has retired and the documentation here is obsolete (added on Jul. 27, 2017)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Dr.-Memory-is-a-new-open-source-tool-for-finding-memory-errors---similar-to-Memcheck-Valgrind-but-with-Windows-support-including-detection-of-Windows-handle-leaks-and-GDI-usage-errors.\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eDr. Memory is a new open-source tool for finding memory errors - similar to Memcheck (Valgrind) but with Windows support, including detection of Windows handle leaks and GDI usage errors.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-OK-I-ve-found-a-real-bug\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eOK, I've found a real bug\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-drmemory_light-vs-drmemory_full\"\u003e\u003cstrong\u003e4 \u003c/strong\u003edrmemory_light vs drmemory_full\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Suppressing-error-reports-from-the-bots\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eSuppressing error reports from the bots\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-Chromium-under-Dr.-Memory-on-a-given-set-of-URLs\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eRunning Chromium under Dr. Memory on a given set of URLs\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-your-custom-command-line-under-Dr.-Memory\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eRunning your custom command line under Dr. Memory\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Feedback-\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eFeedback?\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Note:-Dr.Memory-bot-has-retired-and-the-documentation-here-is-obsolete-added-on-Jul.-27-2017-\" /\u003eNote: \u003cfont color\u003d\"#ff0000\"\u003eDr.Memory bot has retired and the documentation here is obsolete\u003c/font\u003e (added on Jul. 27, 2017)\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Dr.-Memory-is-a-new-open-source-tool-for-finding-memory-errors---similar-to-Memcheck-Valgrind-but-with-Windows-support-including-detection-of-Windows-handle-leaks-and-GDI-usage-errors.\" /\u003eDr. Memory is a new open-source tool for finding memory errors - similar to Memcheck (Valgrind) but with Windows support, including detection of Windows handle leaks and GDI usage errors.\u003c/h3\u003e\u003cdiv\u003e\u003cdiv\u003eDr. Memory is running on the MFYI waterfall \u003ca href\u003d\"http://build.chromium.org/p/chromium.memory.fyi/waterfall?builder\u003dChromium+Windows+Builder+(DrMemory)\u0026amp;builder\u003dWindows+Unit+(DrMemory)\u0026amp;builder\u003dWindows+Browser+(DrMemory)+(1)\u0026amp;builder\u003dWindows+Browser+(DrMemory)+(2)\u0026amp;reload\u003dnone\"\u003eMFYI waterfall\u003c/a\u003e where it finds bugs in Chromium on Windows.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you want to try Dr. Memory on your machine, please do the following:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eFirst of all, you need Windows. Win7 x64 is preferred. DrMemory supports Linux, but the support is not as robust.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/build-instructions-windows\"\u003eBuild\u003c/a\u003e Chromium tests on Windows with the following GN configuration (you can save some time by building only the small tests like \u003cfont face\u003d\"'courier new', monospace\"\u003egoogleurl\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eipc\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003ebase\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003enet\u003c/font\u003e to start with). Build with the following setting in order to disable inlining and FPO for better callstacks:\u003cbr /\u003e\u003cbr /\u003e\u003cfont size\u003d\"2\" style\u003d\"color:rgb(56,118,29)\"\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eenable_iterator_debugging \u003d false\u003c/span\u003e\u003c/div\u003e\r\nis_component_build \u003d true\u003cbr /\u003e\r\nis_debug \u003d false\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:arial\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003eThe Dr. Memory binaries are downloaded from Google Storage automatically (on Windows) into the \u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003ethird_party/drmemory\u003c/span\u003e directory.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eNow you can run chromium tests like this:\u003cbr /\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etools\\valgrind\\chrome_tests.bat -t \u003ci\u003e\u0026lt;test\u0026gt;\u003c/i\u003e --tool drmemory_light # only search for unaddressable accesses and uses-after-free\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003eor\u003c/span\u003e\u003cbr /\u003e\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etools\\valgrind\\chrome_tests.bat -t \u003c/font\u003e\u003ci style\u003d\"font-family:courier new,monospace\"\u003e\u0026lt;test\u0026gt;\u003c/i\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e --tool drmemory_full # search for uninits and leaks etc as well\u003c/font\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eAlternatively, if you prefer Msysgit, you can also use \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etools/valgrind/chrome_tests.sh\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e with the same arguments. Just be aware that the bots use the .bat script.\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003eYou can use --build-dir to select between Debug and Release, for example: \u003cfont face\u003d\"courier new, monospace\"\u003etools\\valgrind\\chrome_tests.bat -t base_unittests --tool drmemory_light --build-dir\u003dout\\Release\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eYou can use \u003cfont face\u003d\"courier new, monospace\" style\u003d\"font-size:13.3333px\"\u003e--gtest_filter\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-size:13.3333px\"\u003e t\u003c/font\u003eo run an individual test or a subset of tests, for examle:\u003cbr /\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px\"\u003etools\\valgrind\\chrome_tests.bat -t base_unittests --tool drmemory_light --gtest_filter\u003dA*\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eYou can use \u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px\"\u003e--drmemory_ops\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to add additional Dr. Memory options, for example: \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px\"\u003etools\\valgrind\\chrome_tests.bat -t base_unittests --tool drmemory_light --drmemory_ops \"-pause_at_error\"\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eExtra Dr. Memory specific options can be passed via option \u003cfont face\u003d\"'courier new', monospace\" style\u003d\"font-size:13.3333px\"\u003e--drmemory_ops\u003c/font\u003e, for example: \u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px\"\u003etools\\valgrind\\chrome_tests.bat --drmemory_ops \"-fuzz\" \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003efor \u003ca href\u003d\"https://www.chromium.org/developers/testing/dr-fuzz\"\u003efuzzing the test with Dr. Memory\u003c/a\u003e.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eIt will print you some error reports at the end.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eIf for some reason you cannot reproduce a bot failure on your Windows machine, look for the exact command that started the tests and run that. For example, here is one variation of the test command that catches some memory bugs that the above commands may not catch:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003esrc\\tools\\valgrind\\chrome_test\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003es.bat --brave-new-test-launcher --test-launcher-bot-mode --test \u0026lt;test\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e --tool drmemory_full --target Release --build-dir src\\out\u003c/span\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-OK-I-ve-found-a-real-bug\" /\u003eOK, I've found a real bug\u003c/h3\u003e\u003cdiv\u003eGreat!\u003c/div\u003e\u003cdiv\u003ePlease file a crbug and add the \u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?q\u003dStability-Memory-DrMemory\" target\u003d\"_blank\"\u003eStability-Memory-DrMemory\u003c/a\u003e label.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-drmemory_light-vs-drmemory_full\" /\u003edrmemory_light vs drmemory_full\u003c/h3\u003e\u003cdiv\u003eLight: searches for unaddressable accesses like OOB or use-after-frees, handle leaks, and graphical library usage errors, incurring a moderate execution slowdown.\u003c/div\u003e\u003cdiv\u003eFull: additionally searches for uninitialized reads but adds a large slowdown.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMore on the \"full\" mode:\u003c/div\u003e\u003cdiv\u003eIf you're familiar with the Valgrind guts you probably know that tools like Valgrind and Dr. Memory need to intercept and handle all system calls to know precisely what data is uninitialized, what is read and so on.\u003c/div\u003e\u003cdiv\u003eIn contrast to the open-source Linux kernel with just a hundred system calls or so, on Windows we have an open-ended problem of handling undocumented system calls.\u003cbr /\u003eWe're trying hard to do that but we haven't finished yet. We have some heuristics that work pretty well to ignore errors stemming from system libraries making system calls as opposed to Chromium code, but if you do see an error report that you believe is a false positive,\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e please create a short reproducer and file it into our \u003c/span\u003e\u003ca href\u003d\"http://code.google.com/p/drmemory/issues/list?can\u003d2\u0026amp;q\u003dBug%3DFalsePositive\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eissue tracker\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Suppressing-error-reports-from-the-bots\" /\u003eSuppressing error reports from the bots\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eTODO(rnk): When the DrMemory bots have moved to the chromium.memory.fyi waterfall, this information will be moved into the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:55efc8a06f2320f8\" class\u003d\"disabled\"\u003ememory sheriff\u003c/a\u003e page.\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003etimurrrr: most of this info sounds DrMemory-specific, do we really want to put it onto the \"common\" page?\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eThe DrMemory suppression file is at \u003cfont face\u003d\"'courier new', monospace\"\u003etools/valgrind/drmemory/suppressions[_full].txt\u003c/font\u003e.\u003cbr /\u003eGenerally speaking, suppressions in these files are maintained in exactly the same way as those for all of the other memory tools we use for Chromium, except that DrMemory uses a slightly different suppression format.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen the bot generates a report, follow the link to the bot's stdio and search for \"\u003cfont face\u003d\"'courier new', monospace\"\u003ehash\u003d#\u003c/font\u003e\" to find the report quickly. You should see something similar to:\u003c/div\u003e\u003cdiv\u003e\u003cpre style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:Courier New,courier,monotype;font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003eUNADDRESSABLE ACCESS: reading 0x00000000-0x00000004 4 byte(s)\r\n# 0 TestingProfile::FinishInit [chrome\\test\\base\\testing_profile.cc:211]\r\n# 1 TestingProfile::TestingProfile [chrome\\test\\base\\testing_profile.cc:164]\r\n# 2 BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New,courier,monotype;font-weight:normal;font-size:small\"\u003e [chrome\\browser\\browser_about_handler_unittest.cc:110]\r\n\u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New,courier,monotype;font-weight:normal;font-size:small\"\u003e# 3 testing::Test::Run [testing\\gtest\\src\\gtest.cc:2162]\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:Courier New,courier,monotype;font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003eNote: @0:00:08.656 in thread 1900\r\nNote: instruction: mov (%ebx) -\u0026gt; %esi\r\nSuppression (error hash\u003d#30459DB8320B1FA3#):\r\n{\r\nUNADDRESSABLE ACCESS\r\nname\u003d\u0026lt;insert_a_suppression_name_here\u0026gt;\r\n*!TestingProfile::FinishInit\r\n*!TestingProfile::TestingProfile\r\n*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody\r\n*!testing::Test::Run\r\n}\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cp\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eAs a starting point, you can copy the suppression (the portion between the curly brackets \u003cb\u003enot including the brackets\u003c/b\u003e) into the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003esuppressions.txt\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e file and then widen it so it covers any similar reports on other bots.\u003cbr /\u003eThe curly brackets are \u003cb\u003enot \u003c/b\u003epart of the suppression as in all the other memory tools! DrMemory suppressions are separated by blank lines instead, so make sure your suppression does not run into an existing suppression.\u003c/font\u003e\u003c/p\u003e\u003cp\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eEach frame from the stack trace is of the form \"\u0026lt;module\u0026gt;!\u0026lt;function\u0026gt;\". For functions from Chrome, we generally link the code statically into many different binaries, so we always use a wildcard for the module.\u003cbr /\u003eFor third party code, it is generally helpful to identify which DLL the frame came from, especially since we often do not have debug info for windows system libraries.\u003c/font\u003e\u003c/p\u003e\u003cp\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eAs in the other tool suppression formats, '\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e*\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e' is a single frame variable-width wildcard, '\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e?\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e' is a single-character wildcard, and '\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e...\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e' will match any number of frames.\u003c/font\u003e\u003c/p\u003e\u003cp\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eDrMemory has support for a handful of other pattern matching mechanisms.\u003cbr /\u003eIn particular, if you paste the instruction from the report on a line starting with \"\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003einstruction\u003d\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\", you can match the exact instruction producing the report.\u003cbr /\u003eThe \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003einstruction\u003d\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e qualifier is mostly useful when suppressing bit-level false positive uninitialized reads in third party libraries where we don't have an accurate callstack and want to make a tight suppression.\u003c/font\u003e\u003c/p\u003e\u003cp\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eOnce you have your suppression, you can test that it suppresses the existing reports using \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003etools/valgrind/waterfall.sh\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e as you would with the other memory tools.\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Running-Chromium-under-Dr.-Memory-on-a-given-set-of-URLs\" /\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eRunning Chromium under Dr. Memory on a given set of URLs\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003eFirst, put the list of \u003cfont size\u003d\"2\"\u003eURLs into \u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etools\\valgrind\\reliability\\url_list.txt\u003c/font\u003e\u003c/span\u003e, one URL per line without the http:// prefix. You can also put in the local URLs like \u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003efile://c:\\mypath\\repro.htm\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003eThen, run\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003etools\\valgrind\\chrome_tests.bat -t reliability --tool drmemory --\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003etool_flags\u003d\"-no_check_uninitialized -no_count_leaks\"\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you're searching for some stability/security bugs, you may consider running Chromium in the single process mode to increase the probability of the report by applying this patch:\u003c/div\u003e\u003cdiv\u003e\u003cpre style\u003d\"white-space:pre-wrap;max-width:80em;padding-left:0.7em\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eIndex: tools/valgrind/chrome_tests.py\u003cbr /\u003e\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /\u003e--- tools/valgrind/chrome_tests.py (\u003ca href\u003d\"http://code.google.com/p/chromium/source/detail?r\u003d96002\" style\u003d\"color:rgb(0,0,204)\"\u003erevision 96002\u003c/a\u003e)\u003cbr /\u003e+++ tools/valgrind/chrome_tests.py (working copy)\u003cbr /\u003e@@ -271,7 +271,8 @@\u003cbr /\u003e # Valgrind timeouts are in seconds.\u003cbr /\u003e UI_VALGRIND_ARGS \u003d [\"--timeout\u003d7200\", \"--trace_children\", \"--indirect\"]\u003cbr /\u003e # UI test timeouts are in milliseconds.\u003cbr /\u003e- UI_TEST_ARGS \u003d [\"--ui-test-action-timeout\u003d120000\",\u003cbr /\u003e+ UI_TEST_ARGS \u003d [\"--single-process\u003dyes\",\u003cbr /\u003e+ \"--ui-test-action-timeout\u003d120000\",\u003cbr /\u003e \"--ui-test-action-max-timeout\u003d280000\"]\u003cbr /\u003e\u003cbr /\u003e def TestAutomatedUI(self):\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Running-your-custom-command-line-under-Dr.-Memory\" /\u003eRunning your custom command line under Dr. Memory\u003c/h3\u003eSometimes you may need to run your own program or your own custom command line under Dr. Memory. For example, if you want to prefix your own \"chrome.exe --my-flags\" command with Dr. Memory, do the following:\u003cbr /\u003e \u003ccode\u003etools\\valgrind\\drmemory.bat chrome.exe -- --my-flags # don't forget to increase the timeouts\u003c/code\u003e\u003cbr /\u003eIf the command line runs Chrome, you may consider increasing the timeouts by appending\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e--ui-test-action-timeout\u003d120000 --ui-test-action-max-timeout\u003d280000 --ui-test-terminate-timeout\u003d120000\u003c/span\u003e\u003cbr /\u003e\u003cdiv\u003eto the commandline.\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eRandom notes for the curious ones\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eYou can find the Dr. Memory suppression file for Chrome at \u003cfont face\u003d\"'courier new', monospace\"\u003etools\\valgrind\\drmemory\\suppressions[_full].txt\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003eThe report files are parsed and re-formatted to be more familiar for Valgrind users (see \u003cfont face\u003d\"'courier new', monospace\"\u003etools\\valgrind\\drmemory_analyze.py\u003c/font\u003e).\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eExcluded tests are listed in \u003cfont face\u003d\"courier new, monospace\"\u003etools\\valgrind\\gtest_exclude\u003c/font\u003e - see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:32223b310ffa7e9f\" class\u003d\"disabled\"\u003eUsing Valgrind\u003c/a\u003e more for information.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSome debugging tips while using Dr. Memory can be found \u003ca href\u003d\"https://github.com/DynamoRIO/drmemory/wiki/Debugging\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor those still wanting to use Valgrind, be aware Valgrind requires Chrome be built using the system memory allocator. To do this, add \u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px;background-color:transparent\"\u003euse_allocator \u003d \"none\"\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e to your gn args.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Feedback-\" /\u003eFeedback?\u003c/h3\u003e\u003cdiv\u003eDrop drmemory-team@ a message\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/using-drmemory"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5994965627925106008"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5994965627925106008"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5994965627925106008"}],"author":[{}],"sites$pageName":{"$t":"using-drmemory"},"sites$revision":{"$t":"53"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1928001533168046929"},"published":{"$t":"2017-07-21T13:45:59.155Z"},"updated":{"$t":"2017-07-24T13:04:42.257Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-24T13:04:40.138Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Upstreaming drm patches"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Pre-requisites\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ePre-requisites\u003c/span\u003e\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://lists.freedesktop.org/mailman/listinfo/dri-devel\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eSubscribe to dri-devel mailing list\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eSetup git send-email to work with your email (@chromium, @android, @google) (\u003ca href\u003d\"https://www.kernel.org/pub/software/scm/git/docs/git-send-email.html\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eCheck out the Examples section\u003c/a\u003e)\u003c/li\u003e\u003cul\u003e\u003cli\u003eThis requires the git-email package (sudo apt-get install git-email)\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Sending-the-patch\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eSending the patch\u003c/span\u003e\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eAdd the upstream repo as a remote in your git tree\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eFor kernel patches, consult the MAINTAINERS file or scripts/get_maintainer.pl to find the remote git tree location\u003c/li\u003e\r\n\u003cli\u003eFor libdrm patches, the tree is located at git://anongit.freedesktop.org/mesa/drm\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003col /\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e; git remote add -f upstream \u0026lt;remote_addr\u0026gt;\u003cbr /\u003e; git fetch upstream\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\r\n\r\n\r\n\u003cul\u003e\u003cli\u003eCreate a new branch which tracks upstream\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eFor kernel, the branch will depend on how the maintainer has setup their tree. Ask on IRC if you're unsure.\u003c/li\u003e\r\n\u003cli\u003eFor libdrm, use the master branch\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e; git branch -t for_upstream upstream/\u0026lt;upstream_branch\u0026gt;\u003c/code\u003e\u003c/div\u003e\r\n\r\n\r\n\u003c/blockquote\u003e\r\n\u003c/blockquote\u003e\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eApply the patch to your for_upstream branch (resolving any conflicts) and test the patch still works\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eGenerate a patch file for upstream, it will be saved as\u003c/font\u003e 0001-\u0026lt;my-commit-subject\u0026gt;.patch\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eFor libdrm, add --subject-prefix 'PATCH libdrm' to the command\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you have not added a Signed-off-by: line to your commit message, add --signoff to the command\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e; git format-patch \u0026lt;optional parameters\u0026gt; HEAD^..\u003c/code\u003e\u003c/div\u003e\u003c/font\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cul\u003e\u003cli\u003eOpen the patch file and strip out all of the Google-specific kruft (Bug, Test, Change-Id, etc). Once again, ensure you have a Signed-off-by: line in the commit message\u003c/li\u003e\u003cul\u003e\u003cli\u003eIf this is a v2/v3/vN patch, add vX to the subject after PATCH (ie: [PATCH vX] my commit subject)\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eSend the patch to the list\u003c/li\u003e\u003cul\u003e\u003cli\u003eFor kernel patches:\u003c/li\u003e\u003cul\u003e\u003cli\u003eRun the patch through scripts/checkpatch.pl to ensure it conforms with kernel style guide\u003c/li\u003e\u003cli\u003eRun the patch through scripts/get_maintainer.pl to generate a list of people/lists who should be cc'd\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eMake sure you cc anyone who provided you with a downstream review, as well as people who can help with upstream review (seanpaul@, marcheu@, etc)\u003c/li\u003e\u003cul\u003e\u003cli\u003eUse the --cc argument to git send-email\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eTo reply to an email with a patch (ex: after code review), add the --in-reply-to\u003d\u0026lt;Message-Id\u0026gt; argument. You can get \u0026lt;Message-Id\u0026gt; from mail headers\u003c/li\u003e\u003cli\u003eIf you want ONE MORE chance to ensure that everything is right for the patch, add the --annotate flag to send-email, it'll let you review the message before sending\u003c/li\u003e\u003cli\u003eIf this is a series of patches, add a cover letter to explain the series with the --cover-letter \u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/font\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e; git send-email --to\u003ddri-devel@lists.freedesktop.org\u003c/code\u003e\u003c/div\u003e\u003c/font\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2820759774765985493"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide/upstreaming-drm-patches"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1928001533168046929"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1928001533168046929"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1928001533168046929"}],"author":[{"name":{"$t":"Sean Paul"},"email":{"$t":"seanpaul@chromium.org"}}],"sites$pageName":{"$t":"upstreaming-drm-patches"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7110830394485262472"},"published":{"$t":"2010-11-22T20:41:33.948Z"},"updated":{"$t":"2017-07-20T19:41:24.245Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-20T19:41:22.857Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Decoding Crash Dumps"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003eThis document describes how to process Breakpad minidumps on Linux.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Breakpad-tools-needed\" /\u003eBreakpad tools needed\u003c/h3\u003e\u003cdiv\u003eThe tools from Breakpad needed to process crash dumps manually are \u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003edump_syms\u003c/font\u003e. It is possible to build these tools from source from within a Chromium checkout on Mac and Linux by running, for example, \u003cfont face\u003d\"courier new, monospace\"\u003eninja -C out/Release minidump_stackwalk dump_syms\u003c/font\u003e. To build these tools from source in a Breakpad checkout, check out the source from \u003ca href\u003d\"http://code.google.com/p/google-breakpad/\"\u003ehttp://code.google.com/p/google-breakpad/\u003c/a\u003e and follow the included instructions. Prebuilt binaries from thestig@ are \u003ca href\u003d\"https://drive.google.com/folderview?id\u003d0B5yuieQYffwPfmYwNktxYUVxb2tobHlkS2hqcjlHMUplMTdndkVaMlU0QXlaa3cwSE9xZm8\u0026amp;usp\u003dsharing\"\u003eavailable for download\u003c/a\u003e.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Get-the-crash-dump\" /\u003eGet the crash dump\u003c/h3\u003e\u003cdiv\u003eCrash dumps (.dmp files) usually come from a crash server i.e. \u003ca href\u003d\"http://crash/\" rel\u003d\"nofollow\"\u003ehttp://crash/\u003c/a\u003e or from the crash reports directory: \u003cfont face\u003d\"'courier new', monospace\"\u003e/path/to/profile/Crash Reports\u003c/font\u003e. I.e. \u003cfont face\u003d\"'courier new', monospace\"\u003e~/.config/google-chrome/Crash Reports/\u003c/font\u003e on Linux.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor Linux crash dumps that are in the crash reports directory, one must strip off the headers before processing it with \u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk\u003c/font\u003e. Just open the file in a text editor and delete all the lines up until the line that starts with MDMP followed by binary data.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Getting-the-stacktrace-without-symbols-\" /\u003eGetting the stacktrace (without symbols)\u003c/h3\u003e\u003cdiv\u003eRun \u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk\u003c/font\u003e \u003cfont face\u003d\"'courier new', monospace\"\u003efoo.dmp\u003c/font\u003e. For 32-bit, \u003cfont face\u003d\"courier new, monospace\"\u003eminidump_stackwalk\u003c/font\u003e will display the stacktrace without symbols. For 64-bit, it will only display the top frame.\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Get-the-debugging-symbols\" /\u003eGet the debugging symbols\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eTo get symbols or more frames, one needs to have the symbols for the libraries and executables that are part of the stacktrace.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe easiest way is to run a tool that will generate the right directory structure:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ecomponents/crash/content/tools/generate_breakpad_symbols.py --build-dir\u003dout/gnand --symbols-dir\u003d/tmp/my_symbols/ --binary\u003dout/gnand/lib.unstripped/libchrome.so --clear --verbose\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo do the same thing manually, start by running:\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk foo.dmp /tmp/my_symbols 2\u0026gt;\u0026amp;1 | grep my_symbols\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis will print out lines like:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e[time stamp] simple_symbol_supplier.cc:150: INFO: No symbol file at /tmp/my_symbols/libfoo/hash/libfoo.sym.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIn order to get the symbol file for \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003elibfoo\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, one needs to have a copy of the exact \u003cspan style\u003d\"font-family:courier new,monospace\"\u003elibfoo\u003c/span\u003e binary from the system that generated the crash and its corresponding debugging symbols. Oftentimes, Linux distros provide \u003cspan style\u003d\"font-family:courier new,monospace\"\u003elibfoo\u003c/span\u003e and its debugging symbols as two separate packages. In the chrome build, you'll need an unstripped binary -- official builds generate these by default somewhere. After obtaining and extracting the packages, use \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003edump_syms\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to extract the symbols. Assuming the library in question is \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e/lib/libfoo.so\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and its debugging symbol is \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e/usr/debug/lib/libfoo.so\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, run:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003edump_syms /lib/libfoo.so /usr/debug/lib \u0026gt; /tmp/libfoo.so.sym\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eTo verify it's the correct version of \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003elibfoo\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e, look at the hash from the \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e output and compare it to the hash on the first line. If they match, move \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e/tmp/libfoo.sym\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e to \u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e/tmp/my_symbols/libfoo.so/hash/libfoo.so.sym\u003c/span\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eminidump_stackwalk\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e will load it on future runs to give better stacktraces.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eRepeat this process for other libraries until \u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003eminidump_stackwalk\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e outputs the required information.\u003c/span\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Decoding-Windows-crash-dumps-on-Linux\" /\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eDecoding Windows crash dumps on Linux\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWindows crash dumps can be decoded the same way as Linux crash dumps. The issue is mainly getting the debugging symbols as a \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e.sym\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e file instead of a \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e.pdb\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e file.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eTo convert a \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e.pdb\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e file to a \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e.sym\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e file:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eObtain the \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e.pdb\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e file and put it on a Windows machine. (It may be possible to do this with Wine, YMMV.)\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eDownload \u003ca href\u003d\"http://google-breakpad.googlecode.com/svn/trunk/src/tools/windows/binaries/dump_syms.exe\"\u003edump_syms.exe\u003c/a\u003e.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eRun: \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003edump_syms foo.pdb \u0026gt; foo.sym\u003c/font\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf no error messages, then you are done.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you get: \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eCoCreateInstance CLSID_DiaSource failed (msdia80.dll unregistered?)\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, go to step 4.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eGet a copy of \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003emsdia80.dll\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and put it in \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ec:\\Program Files\\Common Files\\Microsoft Shared\\VC\\\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eAs Administrator, run: \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eregsvr32 \u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003ec:\\Program Files\\Common Files\\Microsoft\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e Shared\\VC\\msdia80.dll\u003c/span\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e.\u003c/font\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOn success, retry step 3.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you get error 0x80004005, you did not run as Administrator.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Decoding-Mac-crash-dumps\" /\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eDecoding Mac crash dumps\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eSee \u003c/font\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003ca href\u003d\"http://dev.chromium.org/developers/crash-reports#TOC-Working-with-Minidumps\"\u003eWorking with Minidumps\u003c/a\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you've built Chromium.app with symbols, the easiest way to symbolize a crash is to let Crashpad forward the crash to the system crash reporter. See \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:monospace;font-size:medium;white-space:pre;background-color:transparent\"\u003e\u003ca href\u003d\"https://cs.chromium.org/chromium/src/third_party/crashpad/crashpad/client/crashpad_info.h?l\u003d135\"\u003eset_system_crash_reporter_forwarding\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/decoding-crash-dumps"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7110830394485262472"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7110830394485262472"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7110830394485262472"}],"author":[{"name":{"$t":"Lei Zhang"},"email":{"$t":"thestig@chromium.org"}}],"sites$pageName":{"$t":"decoding-crash-dumps"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"WCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2514578343425486059"},"published":{"$t":"2012-06-21T20:20:48.201Z"},"updated":{"$t":"2017-07-17T21:27:24.760Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-17T21:27:22.773Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"High DPI Resources"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-If-you-are-thinking-of-adding-new-resources-strongly-consider-vectorized-icons.\" /\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont color\u003d\"#ff0000\"\u003eIf you are thinking of adding new resources, \u003ci\u003estrongly\u003c/i\u003e consider\u003c/font\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/vectorized-icons-in-native-chrome-ui\"\u003evectorized icons\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Summary\" /\u003eSummary\u003c/h2\u003e\u003cdiv\u003eMost Chrome image assets should be supplied in 1x and (for Mac Retina display) 2x scales. Eventually we'll probably also have 1.4x and 1.8x scales for Windows 8 Metro.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn addition to different scale factors, some assets come in different sizes for LAYOUT_TOUCH mode (eg. buttons that need to be larger to touch reliably). Layout is an orthogonal issue to scale factor, but both affect which assets are loaded.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you just have to add new assets this section should cover everything you need to know. For the purposes of brevity this document assumes that you want to add a 2x asset but the same applies for any scale factor.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Native\" /\u003eNative\u003c/h3\u003e\u003cdiv\u003eResources in ui/resources/ and chrome/app/theme/ should be added to the relevant subfolder for grit to automatically discover them:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003edefault_100_percent: 1x resources\u003c/li\u003e\u003cli\u003edefault_200_percent: 2x resources\u003c/li\u003e\u003cli\u003etouch_100_percent: touch optimized 1x resources\u003c/li\u003e\u003cli\u003etouch_200_percent: touch optimized 2x resources\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-WebUI\" /\u003eWebUI\u003c/h3\u003e\u003cdiv\u003eHigh DPI resources can be loaded in Chrome WebUI using one of three methods, which one is appropriate depends on where the image is.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eImportant\u003c/b\u003e: For grit to automatically construct a -webkit-image-set reference the relevant css file must be included from a \u0026lt;structure type\u003d\"chrome_html\"\u0026gt; tag. See \u003ci\u003echrome/browser/resources/shared_resources.grd\u003c/i\u003e for examples.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-WebUI-resources\" /\u003eWebUI resources\u003c/h4\u003e\u003cdiv\u003eWebUI resources are those located in \u003ci\u003echrome/browser/resources/\u003c/i\u003e. These are also referred to using the \u003ci\u003echrome://resources/\u003c/i\u003e handler. These should be referenced using a relative path to the image. For example from \u003ci\u003echrome/browser/resources/shared/css/overlay.css\u003c/i\u003e:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e background-image: url('../images/x.png');\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd a 2x subfolder to the location of the base image and place the 2x image in there. In this case you would have both:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e chrome/browser/resources/shared/images/x.png\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e chrome/browser/resources/shared/images/2x/x.png\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA -webkit-image-set rule will automatically be generated by grit when processing this file. If for some reason the file must be specified by a url or in script then manually write an image-set rule as in the UI Resources section below.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Theme-and-UI-resources\" /\u003eTheme and UI resources\u003c/h4\u003e\u003cdiv\u003eTheme and UI resources are those defined in \u003ci\u003echrome/app/theme/theme_resources*.grd \u003c/i\u003eor \u003ci\u003eui/resources/ui_resources.grd\u003c/i\u003e. These should be added according to the native resources convention. From WebUI, the resource is usually loaded from a \u003ci\u003echrome://theme/IDR_RESOURCE_NAME\u003c/i\u003e url referring to the name specified in \u003ci\u003etheme_resources*.grd \u003c/i\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eor\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e \u003c/span\u003e\u003ci style\u003d\"font-size:10pt\"\u003eui/resources/ui_resources.grd\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIf the resource is referred to by resource name from a css rule, (i.e. background-image: url('chrome://theme/IDR_RESOURCE_NAME');) then a high DPI reference is added automatically by grit and you are done.\u003c/li\u003e\u003cli\u003eIf the resource is referred to from Javascript or HTML by resource name you can either move this to a CSS definition or set the -webkit-image-set property on the object's style as follows:\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e html: \u0026lt;img style\u003d\"content:-webkit-image-set(url('chrome://theme/IDR_RESOURCE_NAME') 1x, url('chrome://theme/IDR_RESOURCE_NAME@2x') 2x);\"\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e js: $('my-img').style.content \u003d '-webkit-image-set(url(\\'chrome://theme/IDR_RESOURCE_NAME\\') 1x, ' + \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e 'url(\\'chrome://theme/IDR_RESOURCE_NAME@2x\\') 2x);';\u003c/font\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eIf the img is using the 'src' attribute to specify the url, 'srcset' can be used in addition to 'src' to specify just the 2x property (or just srcset can be used to describe both):\u003ccode\u003e\u003cbr /\u003e\u0026lt;img src\u003d'chrome://theme/IDR_RESOURCE_NAME' srcset\u003d'chrome://theme/IDR_RESOURCE_NAME@2x 2x'\u0026gt;\u003cbr /\u003e\u0026lt;img srcset\u003d'chrome://theme/IDR_RESOURCE_NAME 1x chrome://theme/IDR_RESOURCE_NAME@2x 2x'\u0026gt;\u003cbr /\u003e\u003cbr /\u003e\u003c/code\u003e\u003c/li\u003e\u003cli\u003eIf the resource is referred to using a relative path and you do not want to move this to css then follow the Theme and UI resources (Manual image set) section.\u003c/li\u003e\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Theme-and-UI-Resources-Manual-image-set-\" /\u003eTheme and UI Resources (Manual image set)\u003c/h4\u003e\u003c/div\u003e\u003cdiv\u003eTheme and UI image resources without corresponding IDR definitions should be referenced using a relative path with an explicit -webkit-image-set. I.e. for the file \u003ci\u003eui/resources/default_100_percent/close.png\u003c/i\u003e being referred to from \u003ci\u003echrome/browser/resources/close.css\u003c/i\u003e change the CSS to the following:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e background-image: -webkit-image-set(\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e url('../../../ui/resources/default_100_percent/close.png') 1x,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e url('../../../ui/resources/default_200_percent/close.png') 2x);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Design\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eDesign\u003c/font\u003e\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-WebUI1\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWebUI\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe goals of the means for using high DPI resources in WebUI are the following:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eUse standard HTML / CSS / Javascript such that developers can potentially run WebUI pages outside of chrome.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eMake it obvious when changes to one size asset require a corresponding change to other size asset descriptions through code locality.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eHave a mechanism by which developers can be warned when adding only low resolution assets. \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eAutomatically get other densities when working on WebUI without having to think about it.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eAvoid including resources for densities not supported on a platform.\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eGiven (1) and (2), we use the \u003ca href\u003d\"http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eimage-set() function\u003c/a\u003e when manually specifying rules. This makes it immediately obvious if you are changing one of the assets that the other density assets may need to be changed as well. In order to facilitate (3) and (4) the build process will do some conversion of CSS but only in so far as it is compatible with running the page standalone (1) (i.e. there should be no macros or otherwise incorrect CSS if you use the file directly).\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIn order to automatically get other densities (3) and remove unsupported densities, the build process performs some conversion of CSS properties on files included in a chrome_html structure node. In particular, if it can determine from a given CSS image rule such as content: url('../my/image/foo.png') that a 2x image is available, then it will automatically generate an image set referring to both the 1x and 2x image. This is accomplished by using a '2x' (or scale factor + 'x') subdirectory where the 1x image is located. This allows images to be located in each of the relevant component directories and can deal with any relative image path appropriately. Since native resources must be centrally located a different tradeoff was made with respect to directory structure so we have to manually reference each density asset in folders outside of \u003ci\u003echrome/browser/resources/\u003c/i\u003e.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eTheme resources are loaded by name, and in practice can be changed dynamically. In order to fetch various density theme resources theme_source.cc was modified to accept theme source requests such as chrome://theme/IDR_RESOURCE_NAME@2x and fetch the appropriate theme image. If a high DPI theme resource is not available it falls back to returning the 1x theme resource which means that in any place where you use a theme source which may not have a 2x asset it should have the size of the image explicitly set. Otherwise, the 1x image is returned, assumed to be 2x and scaled down to half the size such that it is displayed 1:1 on a 2x screen.\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/high-dpi-resources"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2514578343425486059"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2514578343425486059"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2514578343425486059"}],"author":[{"name":{"$t":"Robert Flack"},"email":{"$t":"flackr@chromium.org"}}],"sites$pageName":{"$t":"high-dpi-resources"},"sites$revision":{"$t":"11"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4183282741093229527"},"published":{"$t":"2017-07-07T19:35:50.791Z"},"updated":{"$t":"2017-07-17T21:26:39.989Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-17T21:26:39.975Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Volume - Update July 6.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4183282741093229527"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20July%206.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4183282741093229527"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4183282741093229527"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4183282741093229527"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4183282741093229527"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},"published":{"$t":"2016-08-24T21:23:30.774Z"},"updated":{"$t":"2017-07-14T07:02:46.380Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-14T07:02:43.785Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"View Test Result via WMatrix"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(255,0,0);font-size:x-large;font-weight:bold\"\u003e***DEPRECATED, PLEASE VISIT https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab *** (20170714)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eStarting with M52, Moblab AFE UI will have a link to WMatrix, which will present a better test result viewing UI for Moblab users.\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1472074050570/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe Test Results UI might look a little overwhelming. It includes all tests that currently existing in Chrome OS autotest.git. But might not be relevant to Partners initially. We recommend to start with 'Suite List\" in the \"Quick links\" section.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1472074297672/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eDepends on the type of test suites you have run on your moblab unit, the type of suite in the subsequent screens may differ. You may have faft, storage qual, bvt, cts tests show up. Here is one example from our faft tests. From here you could drill down further to see aggregated test results.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1472074378255/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png\" /\u003e\u003c/a\u003e\u003c/div\u003eAggregated test results of one particular suites across build and devices. Here is a simple example of one device and one build test results. If you have your mouse hover over the \"red\" section on the right hand side, you will see all the failed tests associated with runs on that build (R52-8350.69.0). Clicking on the red \"1\" in the screen below will lead you to the detailed failure screen so you can investigate further.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eNOTE: If you are running a build that is old, you might see an empty UI when you click on the Suite Name from screen shown earlier. One work around is to add \"\u0026amp;days_back\u003d15\" (or whatever days you know that are required to get to your build comparing to today's build) to see the result. We are aware of this flaw and working on a fix for next release.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1472074624488/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6163425214481340131"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7013358383000086029"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$pageName":{"$t":"view-test-result-vis-wmatrix"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"Xyl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8110757228964464770"},"published":{"$t":"2014-05-23T05:05:15.942Z"},"updated":{"$t":"2017-07-14T06:56:37.218Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-14T06:56:35.336Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Overview of MobLab"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-DEPRECATED-PLEASE-VISIT-https:-sites.google.com-a-chromium.org-dev-chromium-os-testing-moblab-20170714-\" /\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\r\n\u003cdiv\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"5\"\u003e***DEPRECATED, PLEASE VISIT https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab *** (20170714)\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:10pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:10pt\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-DEPRECATED-PLEASE-VISIT-https:-sites.google.com-a-chromium.org-dev-chromium-os-testing-moblab-20170714-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003e***DEPRECATED, PLEASE VISIT https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab *** (20170714)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.9nxoeelj5av6\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eWhat is MobLab?\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.ieg5mxii7nbd\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eRequired Hardware\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Network-Configuration\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eNetwork Configuration\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.m1cwbxr8udcd\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eAdvantages\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.qg7cejkuzs6u\"\u003e\u003cstrong\u003e5.1 \u003c/strong\u003eEasy to set up and manage\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.hvfw32qawm1g\"\u003e\u003cstrong\u003e5.2 \u003c/strong\u003eFull lab feature support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.m6exsq2rv8u9\"\u003e\u003cstrong\u003e5.3 \u003c/strong\u003eScaleable\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.k1f9dnr33vmi\"\u003e\u003cstrong\u003e5.4 \u003c/strong\u003eCommon ground\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.f3h49odm5w36\"\u003e\u003cstrong\u003e5.5 \u003c/strong\u003eOpen source project\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#h.ddkps9jk1rso\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eSummary\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt;font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt;font-weight:normal\"\u003eWhen qualifying a new board for release, the test engineering team for Chrome OS performs the following tasks:\u003c/span\u003e\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan\u003eTest and qualify firmware\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eTest the \u003c/span\u003e\u003cspan\u003eFinal Shipping Image (FSI) \u003c/span\u003e\u003cspan\u003eand\u003c/span\u003e\u003cspan\u003e \u003c/span\u003e\u003cspan\u003eAuto-Update\u003c/span\u003e\u003cspan\u003e (AU) images\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eAdd repeatable qualifications for components to the Approved Vendor List (AVL)\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cp\u003e\u003cspan\u003eDone manually, these tests take human testers multiple days to complete. \u003c/span\u003e\u003cspan\u003eWhile the tests cannot be performed in parallel, each one can be automated.\u003c/span\u003e\u003cspan\u003e \u003c/span\u003e\u003cspan\u003eTo accelerate board bring-up and ensure quality, the Chrome OS team is in the process of automating the tests so that partners can run them on site.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003e\u003cspan\u003eTesting at the partner site has numerous benefits for both partners and Google:\u003c/span\u003e\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan\u003eShortens the feedback loop for bugs found with automated testing.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eEnables testing on revisions of boards that Google does not have.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eIdentifies hardware defects before mass production begins.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eDetects regressions \u003c/span\u003e\u003cspan\u003eduring \u003c/span\u003e\u003cspan\u003eFinal Shipping Image and AU image revisions.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eEnables testing of new hardware components (e.g., replace EOL components or evaluate a new variant of an existing SKU, such as a touchscreen version).\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eProvides a channel for partners to write, run, and add tests to the Google framework.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"h.9nxoeelj5av6\" /\u003e\u003cspan\u003eWhat is MobLab?\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.ieg5mxii7nbd\" /\u003e\u003cspan\u003eRequired Hardware\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMobLab is a test system in a box: a customized Chrome OS image loaded onto a Chromebox. The MobLab tests are the same tests that the Chrome OS team at Google runs in the Chrome OS lab. A few customizations have been added to help partners, like extra processes to streamline interactions with the test suite.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThe hardware specs for the supported Moblab platform as of Oct 1, 2015 are below. If your setup does not use the hardware below, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eour team will not be able to assist in troubleshooting. \u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/p\u003e\r\n\u003cdiv dir\u003d\"ltr\" style\u003d\"margin-left:0pt\"\u003e\r\n\u003ctable style\u003d\"border:none;border-collapse:collapse\"\u003e\r\n\u003ccolgroup\u003e\r\n\u003ccol width\u003d\"*\" /\u003e\r\n\u003ccol width\u003d\"*\" /\u003e\r\n\u003ccol width\u003d\"*\" /\u003e\u003c/colgroup\u003e\r\n\u003ctbody\u003e\r\n\u003ctr style\u003d\"height:0px\"\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:168px;height:15px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(0,0,0);font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003eHardware\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003e \u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:353px;height:15px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eSpecification\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:828px;height:15px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eDetails \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr style\u003d\"height:0px\"\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:168px;height:22px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eChromebox \u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:353px;height:22px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eASUS CN62 with Core i3 processor\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:828px;height:22px\"\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"https://www.asus.com/Chrome-Devices/ASUS_Chromebox_CN62/specifications/\" rel\u003d\"nofollow\"\u003ehttps://www.asus.com/Chrome-Devices/ASUS_Chromebox_CN62/specifications/\u003c/a\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr style\u003d\"height:0px\"\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:168px;height:117px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eUSB-to-ethernet adapter\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:353px;height:117px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eLINKSYS USB3GIG USB 3.0 GIGABIT ETHERNET ADAPTER\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\r\n\u003chr /\u003e\r\nApple USB Ethernet adapter\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:828px;height:117px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont color\u003d\"#1155cc\" face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cu\u003e\u003ca href\u003d\"http://www.linksys.com/us/p/P-USB3GIG/\" rel\u003d\"nofollow\"\u003ehttp://www.linksys.com/us/p/P-USB3GIG/\u003c/a\u003e\u003cbr /\u003e\r\n\u003c/u\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003eOR\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont color\u003d\"#1155cc\" face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cu\u003e\u003ca href\u003d\"https://www.amazon.com/Linksys-Ethernet-Chromebook-Ultrabook-USB3GIG/dp/B00LIW8TBG/ref\u003dsr_1_1?ie\u003dUTF8\u0026amp;qid\u003d1491807967\u0026amp;sr\u003d8-1\u0026amp;keywords\u003dlinksys+usb+ethernet+adapter\" rel\u003d\"nofollow\"\u003ehttps://www.amazon.com/Linksys-Ethernet-Chromebook-Ultrabook-USB3GIG/dp/B00LIW8TBG/ref\u003dsr_1_1?ie\u003dUTF8\u0026amp;qid\u003d1491807967\u0026amp;sr\u003d8-1\u0026amp;keywords\u003dlinksys+usb+ethernet+adapter\u003c/a\u003e\u003c/u\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\r\n\u003chr /\u003e\r\n\u003ca href\u003d\"http://www.apple.com/tw/shop/product/MC704FE/A/apple-usb-ethernet-adapter\" rel\u003d\"nofollow\"\u003ehttp://www.apple.com/tw/shop/product/MC704FE/A/apple-usb-ethernet-adapter\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr style\u003d\"height:0px\"\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:168px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eInternal SSD\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:353px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003eTranscend 128 GB SATA III 6Gb/s MTS400 42 mm M.2 SSD Solid State Drive TS128GMTS400\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:828px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"http://www.amazon.com/Transcend-MTS400-Solid-State-TS128GMTS400/dp/B00KLTPUU0\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003ehttp://www.amazon.com/Transcend-MTS400-Solid-State-TS128GMTS400/dp/B00KLTPUU0\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:168px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eSwitching Hub (optional for multiple DUTs)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:353px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003eNetgear GS105 Unmanaged Switch, Gigabit ethernet switch\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/td\u003e\r\n\u003ctd style\u003d\"border:1px solid rgb(0,0,0);vertical-align:top;padding:7px;width:828px;height:34px\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont color\u003d\"#1155cc\" face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cu\u003ehttps://www.amazon.com/NETGEAR-GS105NA-Ethernet-Replacement-Unmanaged/dp/B0000BVYT3/ref\u003dsr_1_1?srs\u003d2529990011\u0026amp;ie\u003dUTF8\u0026amp;qid\u003d1492454601\u0026amp;sr\u003d8-1\u0026amp;keywords\u003dGS105\u003c/u\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\r\n\u003c/td\u003e\u003c/tr\u003e\r\n\r\n\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003e\u003cb style\u003d\"font-weight:normal\"\u003eAdditional requirement for running CTS. Due to the large size of test results from CTS tests that can eat up 128GB quickly. We also noticed that upgrading from 4GB memory to 16GB will reduce the DUT crash rate, especially when running CTS against x86 DUTs.\u003c/b\u003e\u003c/p\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:129.4px;height:14.4px\"\u003e \u003cb\u003eHardware\u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:146.4px;height:14.4px\"\u003e\u003cb\u003eSpecification \u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:606.4px;height:14.4px\"\u003e\u003cb\u003eExample Details \u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:309.4px;height:14.4px\"\u003e Comment\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:129.4px;height:30.4px\"\u003e External Hard Drive\u003c/td\u003e\r\n\u003ctd style\u003d\"width:146.4px;height:30.4px\"\u003e 1TB USB 3.0\u003c/td\u003e\r\n\u003ctd style\u003d\"width:606.4px;height:30.4px\"\u003e \u003ca href\u003d\"https://www.amazon.com/Elements-Portable-External-Drive-WDBUZG0010BBK-EESN/dp/B00CRZ2PRM/\" rel\u003d\"nofollow\"\u003ehttps://www.amazon.com/Elements-Portable-External-Drive-WDBUZG0010BBK-EESN/dp/B00CRZ2PRM/\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:309.4px;height:30.4px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eplease follow instruction\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup#TOC-Formatting-external-storage-for-MobLab\"\u003e here \u003c/a\u003eto label the HD correctly \"MOBLAB-STORAGE\".\u003c/span\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e RAM\u003c/td\u003e\r\n\u003ctd\u003e 16GB\u003c/td\u003e\r\n\u003ctd\u003e\u003ca href\u003d\"https://www.amazon.com/gp/product/B00J8U549K/ref\u003doh_aui_search_detailpage?ie\u003dUTF8\u0026amp;psc\u003d1\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003ehttps://www.amazon.com/gp/product/B00J8U549K/ref\u003doh_aui_search_detailpage?ie\u003dUTF8\u0026amp;psc\u003d1\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003eNote: All of these components can be purchased from: \u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.656;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eSanny Chiu\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.656;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eSynnex Technology International Corp.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.656;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eTel: 886-2-2506-3320 Ext 2033\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.656;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eMobile : 0919-809-819\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"text-align:left;line-height:1.656;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eemail: \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003esannychiu@synnex.com.tw\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003chr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Network-Configuration\" /\u003e\u003cspan\u003eNetwork Configuration\u003c/span\u003e\u003c/h2\u003e\r\n\u003cp\u003e\u003cspan\u003eThis diagram shows a typical configuration of MobLab on a partner’s network:\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/overview-of-moblab/image00.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"283\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1410805802667/chromium-os/testing/moblab/overview-of-moblab/image00.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eMobLab establishes a test subnet to isolate testing activities and machines from the rest of the corporate network. It handles network setup and configuration tasks, including requesting addresses and configuring services.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eThe connection to the corporate network and the Internet enables \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eautomatic updates of the MobLab server image, as well as\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e access to Google Cloud Storage. The corporate network at the partner site should provide security features (firewall, VPN, etc.) to protect MobLab and the test subnet from potential external attacks.\u003c/span\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"h.bawumbtqjxf4\" /\u003e\u003c/h2\u003e\r\n\u003chr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"h.7496jortqy4h\" /\u003e\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"h.m1cwbxr8udcd\" /\u003e\u003cspan\u003eAdvantages\u003c/span\u003e\u003c/h2\u003e\r\n\u003cp\u003e\u003cspan\u003eThis section describes the advantages of setting up MobLab and running tests at your site.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.qg7cejkuzs6u\" /\u003e\u003cspan\u003eEasy to set up and manage\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan\u003eMobLab requires virtually no administrative overhead.\u003c/span\u003e\u003cspan\u003e Storage, network communication, and software updates are all managed automatically. The latest software is used for testing, and versions of the operating system and test suite are always in sync.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.hvfw32qawm1g\" /\u003e\u003cspan\u003eFull lab feature support \u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan\u003eAny Autotest suite or individual test case can be run on a single box. This includes test suites such as build validation tests (BVT), \u003c/span\u003e\u003cspan\u003ehardware component qualification tests, and custom automated tests\u003c/span\u003e\u003cspan\u003e. MobLab can run any test written using the Autotest framework. \u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003e\u003cspan\u003eDepending on the type of component being tested, additional equipment may be required. For example, a WiFi signal is required for wireless connectivity tests.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.m6exsq2rv8u9\" /\u003e\u003cspan\u003eScaleable\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan\u003eThe Autotest framework enables running across multiple machines and scheduling tests. Simpler tools and test frameworks only support manually launching tests, or running them on a single machine. With Autotest, you can also define pools of multiple hosts, to group machines and set scheduling priorities.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.k1f9dnr33vmi\" /\u003e\u003cspan\u003eCommon ground\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan\u003eMoblab provides a common platform for test infrastructure. Using the same hardware, software, and test builds makes communication between partners and Google more efficient. When issues are found, having a common platform makes it much quicker and easier to reproduce them.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"h.f3h49odm5w36\" /\u003e\u003cspan\u003eOpen source project\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan\u003eCommunity support provides greater security and faster response time for questions and issues. Source files are available for inspection and customization, and partner contributions are welcome. The only feature unavailable to custom builds of MobLab is automatic server updates.\u003c/span\u003e\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"h.ddkps9jk1rso\" /\u003e\u003cspan\u003eSummary\u003c/span\u003e\u003c/h2\u003e\r\n\u003cp\u003e\u003cspan\u003eWith MobLab, partners get a robust, low-maintenance test environment where they can:\u003c/span\u003e\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan\u003eRun the same tests in a repeatable fashion as in the Chrome OS lab.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eView test results.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eAccess build images for projects they are responsible for. \u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan\u003eRun custom local tests that are not a part of the Chromium OS source tree.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6163425214481340131"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/overview-of-moblab"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8110757228964464770"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8110757228964464770"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8110757228964464770"}],"author":[{}],"sites$pageName":{"$t":"overview-of-moblab"},"sites$revision":{"$t":"26"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2841669502186695671"},"published":{"$t":"2013-02-21T20:15:49.207Z"},"updated":{"$t":"2017-07-12T08:57:43.681Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-12T08:57:41.783Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chrome with libcras on gPrecise"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eHow to build and install cras and tell Chrome to use it on gooBuntu gPrecise.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eInstall prerequisites.\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003esudo apt-get install git libasound-dev libspeexdsp-dev libgtest-dev libtool automake libdbus-1-dev libudev-dev g++ ladspa-sdk libsndfile-dev\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:10pt;background-color:transparent\"\u003eOn Trusty:\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003ea\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:10pt;background-color:transparent\"\u003ept-get install libsbc-dev\u003c/span\u003e\u003c/pre\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003ePre-Trusty:\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003einstall libsbc 1.1 manually by downloading and compiling the tarball from \u003ca href\u003d\"http://www.bluez.org/sbc-11\" style\u003d\"font-size:13.333333969116211px;color:rgb(17,85,204);font-family:arial,sans-serif\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003ehttp://www.bluez.org/sbc-11\u003c/a\u003e (I couldn't find a package for Precise). \u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cb\u003eini parser.\u003c/b\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003egit clone https://github.com/ndevilla/iniparser.git\r\ncd iniparser\r\nmake\r\nsudo cp libiniparser.* /usr/local/lib\r\nsudo cp src/dictionary.h src/iniparser.h /usr/local/include\r\nsudo chmod 644 /usr/local/include/dictionary.h /usr/local/include/iniparser.h\r\nsudo chmod 644 /usr/local/lib/libiniparser.a\r\nsudo chmod 755 /usr/local/lib/libiniparser.so.0\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cb\u003egtest.\u003c/b\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003ecd /usr/src/gtest\r\nsudo apt-get install cmake\r\nsudo cmake .\r\nsudo make\r\nsudo chmod 644 *.a\r\nsudo cp *.a /usr/local/lib\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cb\u003ewebrtc-audio-processing\u003c/b\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003ewget http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/webrtc-audio-processing-0.3.tar.xz\r\ntar xvf webrtc-audio-processing-0.3.tar.xz\r\nApply \u003ca href\u003d\"https://chromium-review.googlesource.com/c/499813/\"\u003echange-header-location.patch\u003c/a\u003e \u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003ewebrtc-audio-processing-0.3\r\n./configure\r\nmake\r\nsudo make install\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word;white-space:pre-wrap\"\u003e\u003cb\u003eBuild/install cras.\u003c/b\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003egit clone https://chromium.googlesource.com/chromiumos/third_party/adhd\r\ncd adhd/cras\r\n./git_prepare.sh\r\n./configure --prefix\u003d/usr\r\nmake -j33 check\r\nsudo make install\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003emkdir /var/run/cras\u003cbr /\u003echown $USER /var/run/cras\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003eIf you see some build errors on 'snd_pcm_chmap_query_t', it means that you need newer version of alsa-lib. 1.0.27 or higher is required to build cras.\u003c/pre\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eConfiugre/build Chrome.\u003c/b\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eFollow instruction on wiki for getting and building chrome.\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003ecd chromium/src\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGYP_GENERATORS\u003d\"ninja\" ./build/gyp_chromium -Duse_cras\u003d1\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eninja -C out/Release chrome\u003c/font\u003e\u003c/span\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cbr /\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eStart cras and chrome.\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003ecd adhd/cras\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003esrc/cras\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003ecd chromium/src\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003cpre style\u003d\"word-wrap:break-word\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e./out/Release/chrome --use-cras\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2841669502186695671"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2841669502186695671"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2841669502186695671"}],"author":[{"name":{"$t":"Dylan Reid"},"email":{"$t":"dgreid@chromium.org"}}],"sites$pageName":{"$t":"chrome-with-libcras-on-gprecise"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9160019444957123033"},"published":{"$t":"2017-07-07T19:51:40.897Z"},"updated":{"$t":"2017-07-07T19:51:40.903Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T19:51:40.897Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"PPS Tiny - 0x0 after (Updated).png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9160019444957123033"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/PPS%20Tiny%20-%200x0%20after%20(Updated).png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9160019444957123033"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9160019444957123033"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9160019444957123033"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9160019444957123033"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4750761387222887227"},"published":{"$t":"2017-07-07T19:21:33.735Z"},"updated":{"$t":"2017-07-07T19:21:33.743Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T19:21:33.735Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Daily Actives - Update July 6.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4750761387222887227"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20July%206.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4750761387222887227"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4750761387222887227"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4750761387222887227"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4750761387222887227"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3121442812541950529"},"published":{"$t":"2015-11-03T09:31:41.692Z"},"updated":{"$t":"2017-07-07T00:50:13.349Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T00:50:10.877Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"OBSOLETE. Heap Profiling with memory-infra"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003eMoved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/heap_profiler.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/heap_profiler.md\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3121442812541950529"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3121442812541950529"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3121442812541950529"}],"author":[{"name":{"$t":"Primiano Tucci"},"email":{"$t":"primiano@chromium.org"}}],"sites$pageName":{"$t":"heap-profiling-with-memory-infra"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7261957401343785764"},"published":{"$t":"2015-09-25T02:53:21.865Z"},"updated":{"$t":"2017-07-07T00:49:06.213Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T00:49:03.917Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"OBSOLETE. GPU Memory Tracing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/probe-gpu.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/probe-gpu.md\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7261957401343785764"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4061537406890692522/4"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7261957401343785764"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7261957401343785764"}],"author":[{"name":{"$t":"Eric Karl"},"email":{"$t":"ericrk@chromium.org"}}],"sites$pageName":{"$t":"gpu-memory"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"XSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"},"published":{"$t":"2015-06-12T16:21:13.806Z"},"updated":{"$t":"2017-07-07T00:48:25.423Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T00:48:21.767Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"OBSOLETE. Memory profiling in chrome://tracing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/README.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/README.md\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/memory"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7348747059329133392"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"}],"author":[{"name":{"$t":"Primiano Tucci"},"email":{"$t":"primiano@chromium.org"}}],"sites$pageName":{"$t":"memory"},"sites$revision":{"$t":"14"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4272727360313780358"},"published":{"$t":"2017-05-17T18:22:21.854Z"},"updated":{"$t":"2017-07-07T00:47:09.755Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-07T00:47:06.558Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"OBSOLETE. Memory! Landing page for information on memory efforts and tools in Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eContent moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src.git/+/master/docs/memory\"\u003ehttps://chromium.googlesource.com/chromium/src.git/+/master/docs/memory\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4852676552341181359"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/memory"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4272727360313780358"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4272727360313780358"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4272727360313780358"}],"author":[{"name":{"$t":"Albert Wong"},"email":{"$t":"ajwong@chromium.org"}}],"sites$pageName":{"$t":"memory"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"WCl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8110991401667830382"},"published":{"$t":"2009-01-08T05:50:19.621Z"},"updated":{"$t":"2017-07-05T22:23:33.866Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-07-05T22:23:32.008Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"User Data Directory"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis content moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/user-data-directory"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8110991401667830382"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8110991401667830382"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8110991401667830382"}],"author":[{"name":{"$t":"Aaron Boodman"},"email":{"$t":"aa@chromium.org"}}],"sites$pageName":{"$t":"user-data-directory"},"sites$revision":{"$t":"21"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5229588253548794102"},"published":{"$t":"2013-08-30T19:24:09.951Z"},"updated":{"$t":"2017-06-28T17:38:20.986Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-28T17:38:18.139Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Building and Running Tests"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ch2 style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:350px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Building-tests\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eBuilding tests\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Building-tests-selectively\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eBuilding tests selectively\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-tests\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eRunning tests\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-tests-on-a-machine---run_remote_tests.sh\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eRunning tests on a machine - test_that\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-tests-in-a-VM---cros_run_vm_tests\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eRunning tests in a VM - cros_run_vm_tests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Interpreting-test-results-\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eInterpreting test results \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-tests-automatically-Suites\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eRunning tests automatically, Suites\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Troubleshooting-FAQ\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTroubleshooting/FAQ\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q1:-What-autotest-ebuilds-are-out-there-\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eQ1: What autotest ebuilds are out there?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q2:-I-see-a-test-of-the-name-greattests_TestsEverything-in-build-output-logs-whatever-How-do-I-find-which-ebuild-builds-it-\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eQ2: I see a test of the name ‘greattests_TestsEverything’ in build output/logs/whatever! How do I find which ebuild builds it?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q3:-I-have-an-ebuild-foo-where-are-its-sources-\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eQ3: I have an ebuild ‘foo’, where are its sources?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q4:-I-have-an-ebuild-what-tests-does-it-build-\"\u003e\u003cstrong\u003e3.4 \u003c/strong\u003eQ4: I have an ebuild, what tests does it build?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q5:-I-m-working-on-some-test-sources-how-do-I-know-which-ebuilds-to-cros_workon-start-in-order-to-properly-propagate-\"\u003e\u003cstrong\u003e3.5 \u003c/strong\u003eQ5: I’m working on some test sources, how do I know which ebuilds to cros_workon start in order to properly propagate?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q6:-I-created-a-test-added-it-into-ebuild-emerged-it-and-I-m-getting-access-denied-failures.-What-did-I-do-wrong-\"\u003e\u003cstrong\u003e3.6 \u003c/strong\u003eQ6: I created a test, added it into ebuild, emerged it, and I’m getting access denied failures. What did I do wrong?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Q7:-Missing-pyauto_dep\"\u003e\u003cstrong\u003e3.7 \u003c/strong\u003eQ7: Missing pyauto_dep\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Building-tests\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eBuilding tests\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eFundamentally, a test has two main phases:\u003c/font\u003e\u003c/span\u003e\u003cul style\u003d\"font-family:Times New Roman;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003erun_*() - This is is the main part that performs all testing and is invoked by the control files, once or repeatedly.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003esetup() - This function, present in the test case’s main .py file is supposed to prepare the test for running. This includes building any binaries, initializing data, etc.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDuring building using emerge, autotest will call a setup() function of all test cases/deps involved. This is supposed to prepare everything. Typically, this will invoke make on a Makefile present in the test’s src/ directory, but can involve any other transformation of sources (also be empty if there’s nothing to build).\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, however, that setup() is implicitly called many times as test initialization even during run_*() step, so it should be a noop on reentry that merely verifies everything is in order.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUnlike run_*() functions, setup() gets called both during the prepare phase which happens on the \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ehost and target alike\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. This creates a problem with code that is being depended on or directly executed during setup(). Python modules that are imported in any pathway leading to setup() are needed both in the host chroot and on the target board to properly support the test. Any binaries would need to be compiled using the host compiler and either ensured that they will be skipped on the target (incremental setup() runs) or cross-compiled again and dynamically chosen while running on target.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMore importantly\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, in Chromium OS scenario, doing any write operations inside the setup() function will lead to \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eaccess denied failures\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, because tests are being run from the intermediate read-only location.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGiven the above, building is as easy as \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eemerge-\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eing the autotest ebuild that contains our test.\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,255);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ emerge-${board} ${test_ebuild}\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eCurrently, tests are organized within these notable ebuilds: \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e(see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-user-doc#TOC-Q1:-What-autotest-ebuilds-are-out-there-\"\u003eFAQ\u003c/a\u003e full list)\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echromeos-base/autotest-tests - The main ebuild handling most of autotest.git repository and its client and server tests.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echromeos-base/autotest-tests-* - Various ebuilds that build other parts of autotest.git\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echromeos-base/chromeos-chrome - chrome tests; the tests that are part of chrome\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003ch3 style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Building-tests-selectively\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eBuilding tests selectively\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTest cases built by ebuilds generally come in large bundles. Sometimes, only a subset, or generally a different set of the tests provided by a given ebuild is desired. That is achieved using a \u003ca href\u003d\"http://devmanual.gentoo.org/general-concepts/use-flags/index.html\" rel\u003d\"nofollow\"\u003eUSE_EXPANDed\u003c/a\u003e flag called \u003ci\u003eTESTS.\u003c/i\u003e\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAll USE flags (and therefore tests) have a default state, either enabled (+) or disabled (-), specified directly in the ebuild, that can be manually overridden from the commandline. There are two ways to do that.\u003c/span\u003e\u003cb style\u003d\"font-family:Times New Roman\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNon-Incremental - Simply override the default selection by an entirely new selection, ignoring the defaults. This is useful if you develop a single test and don’t want to waste time building the others.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/b\u003e\u003c/font\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"font-family:Times New Roman;font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ TESTS\u003d\"test1 test2\" emerge-${board} ${ebuild}\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"font-family:Times New Roman;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eIncremental - All USE_EXPAND flags are also accessible as USE flags, with the appropriate prefix, and can be used incrementally to selectively enable/disable tests in addition to the defaults. This can be useful if you aim to enable a test that is disabled by default and want to test locally.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,255);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ USE\u003d\"test_to_be_enabled -test_to_be_disabled\" emerge-${board} ${ebuild}\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor operations across all tests, following incremental USE wildcard is supported by portage: \"tests_*\" to select all tests at once (or - to de-select).\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:bold;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNOTE:\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e Both Incremental and Non-Incremental methods can be set/overriden by (in this order): the ebuild (default values), make.profile, make.conf, /etc/portage, commandline (see above). That means that any settings provided on the emerge commandline override everything else.\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Running-tests\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eRunning tests\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cb style\u003d\"font-family:arial,sans-serif;font-size:small\"\u003eNOTE:\u003c/b\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small\"\u003e In order to run tests on your device, it needs to have a \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/common-testing-workflows#TOC-W4.-Create-and-run-a-test-enabled-image-on-your-device\"\u003etest-enabled image\u003c/a\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eWhen running tests, fundamentally, you want to either:\u003c/font\u003e\u003c/span\u003e\u003cul style\u003d\"font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eRun sets of tests manually - Use case: Developing test cases\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eTake your local test sources, modify them, and then attempt to run them on a target machine using autotest. You are generally responsible for making sure that the machine is imaged to a test image, and the image contains all the dependencies needed to support your tests.\u003c/font\u003e\u003c/span\u003e\u003cul style\u003d\"font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eVerify a given image - Use case: Developing the projects subject to testing\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eTake an image, re-image the target device and run a test suite on it. This requires either use of build-time autotest artifacts or their reproduction by not modifying or resyncing your sources after an image has been built.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Running-tests-on-a-machine---run_remote_tests.sh\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eRunning tests on a machine - test_that\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe frontend for running tests is a script called \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003etest_that\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. It provides an interface for running the autoserv process which deploys and executes tests on remote machines. \u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMost basically, \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003etest_that\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e takes several flags for specifying the remote machine IP address and a list of control files. Control files can be specified either by their NAME field, or by a NAME- or path- matching regular expression. For example:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ test_that test.device.hostname.com dummy_Pass\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis script will use \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eautotest_quickmerge\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e to copy over any python-only test changes from your source tree to the board sysroot, if it detects that your source tree is newer. This allows you to iterate rapidly on python only changes without needing to emerge your changes. However, non-python changes still require a normal emerge.\u003c/span\u003e\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Running-tests-in-a-VM---cros_run_vm_tests\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eRunning tests in a VM - cros_run_vm_tests\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#990000\" style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;white-space:normal\"\u003eWARNING: After \u003c/font\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;white-space:normal;background-color:transparent\"\u003e\u003cfont color\u003d\"#990000\"\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/detail?id\u003d710629\" target\u003d\"_blank\"\u003ecrbug/710629\u003c/a\u003e, 'betty' is the only board regularly run through pre-CQ and CQ VMTest and so is the most likely to work at ToT. 'betty' is based on 'amd64-generic', though, so 'amd64-generic' is likely to also work for most (non-ARC) tests.\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;white-space:normal;background-color:transparent\"\u003e\u003cfont color\u003d\"#990000\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003eVM tests are conveniently wrapped into a script cros_run_vm_tests that sets up the VM using a given image and then calls \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003etest_that\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. This is run by builders to test using the Smoke suite.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you want to run your tests on the VM (see \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines\" style\u003d\"font-family:Times New Roman;font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003ehere\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e for basic instructions for setting up KVM with cros images) be aware of the following:\u003c/span\u003e\u003cul style\u003d\"font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;color:rgb(51,51,51);font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003ecros_run_vm_test starts up a VM and runs \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003etest_that\u003c/font\u003e\u003cfont face\u003d\"Arial\"\u003e using the port specified (defaults to 9222). As an example:\u003c/font\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ ./bin/cros_run_vm_test --test_case\u003dsuite_Smoke ---image_path\u003d\u0026lt;my_image_to_start or don't set to use most recent build\u0026gt; --board\u003dbetty # or 'amd64-generic'\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cul style\u003d\"font-family:Times New Roman;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;color:rgb(51,51,51);font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eThe emulator command line redirects localhost port 922 to the emulated machine's port 22 to allow you to ssh into the emulator. For Chromium OS to actually listen on this port you must append the --test_image parameter when you run the ./image_to_vm.sh script, or perhaps run the mod_image_for_test.sh script instead.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;color:rgb(51,51,51);font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eYou can then run tests on the correct ssh port with something like \u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ ./test_that --board\u003dx86-generic localhost:922 platform_BootPerf\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cul style\u003d\"font-family:Times New Roman;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style:disc;font-family:Arial;color:rgb(51,51,51);font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eTo set the sudo password run set_shared_user_password. Then within the emulator you can press Ctrl-Alt-T to get a terminal, and sudo using this password. This will also allow you to ssh into the unit with, e.g. \u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e$ ssh -p 922 root@localhost\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Interpreting-test-results-\" /\u003e\u003cfont size\u003d\"4\"\u003eInterpreting test results\u003cspan style\u003d\"font-weight:normal\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eRunning autotest will result in a lot of information going by which is probably not too informative if you have not used autotest before. At the end of the \u003cfont face\u003d\"courier new, monospace\"\u003etest_that\u003c/font\u003e run, you will see a summary of pass/failure status, along with performance results:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:30 INFO | Using installation dir /home/autotest\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:30 ERROR| Could not install autotest from repos\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:32 INFO | Installation of autotest completed\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:32 INFO | GOOD\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e----\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003eAutotest.install\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003etimestamp\u003d1263509072\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003elocaltime\u003dJan 14 22:44:32\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:33 INFO | Executing /home/autotest/bin/autotest /home/autotest/control phase 0\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:36 INFO | START\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e----\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003e----\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003etimestamp\u003d1263509075\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003elocaltime\u003dJan 14 14:44:35\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:36 INFO | \u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003eSTART\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003esleeptest\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003esleeptest\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003etimestamp\u003d1263509076\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003elocaltime\u003dJan 14 14:44:36\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:36 INFO | Bundling /usr/local/autotest/client/tests/sleeptest into test-sleeptest.tar.bz2\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:40 INFO |\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e \u003ccode\u003eGOOD\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003esleeptest\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003esleeptest\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003etimestamp\u003d1263509079\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003elocaltime\u003dJan 14 14:44:39\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003ecompleted successfully\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:40 INFO | \u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003eEND GOOD\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003esleeptest\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003esleeptest\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003etimestamp\u003d1263509079\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e \u003c/font\u003e\u003c/code\u003e\u003ccode\u003elocaltime\u003dJan 14 14:44:39\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e22:44:42 INFO | END GOOD\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003e----\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003e----\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003etimestamp\u003d1263509082\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003ccode\u003elocaltime\u003dJan 14 14:44:42\u003c/code\u003e\u003cspan style\u003d\"white-space:pre\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:44 INFO | Client complete\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003e22:44:45 INFO | Finished processing control file\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003ccode\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv\u003e\u003ccode\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003eA directory full of the latest results will also be left at /tmp/test_that_latest\u003c/font\u003e\u003c/span\u003e\u003c/code\u003e\u003c/span\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/span\u003e\u003c/code\u003e\u003c/span\u003e\u003c/code\u003e\u003ch3 style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Running-tests-automatically-Suites\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eRunning tests automatically, Suites\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eSuites provide a mechanism to group tests together in test groups. They also serve as hooks for automated runs of tests verifying various builds. Most importantly, that is the BVT (board verification tests) and Smoke (a subset of BVT that can run in a VM\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003ePlease refer to the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/dynamic-suites/dynamic-test-suites\"\u003esuites documentation\u003c/a\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cdiv style\u003d\"font-size:15px\"\u003e\u003cb style\u003d\"font-family:Times New Roman\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Troubleshooting-FAQ\" /\u003e\u003cb\u003e\u003cb\u003e\u003cfont size\u003d\"5\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003eTroubleshooting/FAQ\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/b\u003e\u003c/h2\u003e\u003c/b\u003e\u003c/div\u003e\u003cp\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003eFairly asked questions, because yes, some of this may be confusing!\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cb style\u003d\"font-family:Times New Roman\"\u003e\u003ch4 style\u003d\"font-size:medium\"\u003e\u003ca name\u003d\"TOC-12\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q1:-What-autotest-ebuilds-are-out-there-\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ1: What autotest ebuilds are out there?\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eNote that the list of ebuilds may differ per board, as each board has potentially different list of overlays. To find all autotest ebuilds for board \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003efoo\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e, you can run:\u003c/span\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"font-size:medium\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ board\u003d\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003efoo\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ for dir in $(portageq-${board} envvar PORTDIR_OVERLAY); do\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e find . -name '*.ebuild' | xargs grep \"inherit.*autotest\" | grep \"9999\" |cut -f1 -d: | \\\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e sed -e 's/.*\\/\\([^/]*\\)\\/\\([^/]*\\)\\/.*\\.ebuild/\\1\\/\\2/'\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e done\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003ch4 style\u003d\"font-size:medium\"\u003e\u003ca name\u003d\"TOC-13\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q2:-I-see-a-test-of-the-name-greattests_TestsEverything-in-build-output-logs-whatever-How-do-I-find-which-ebuild-builds-it-\" /\u003e\u003cfont size\u003d\"4\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eQ2: I see a test of the name ‘\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003egreattests_TestsEverything’ in build output/logs/whatever\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e! How do I find which ebuild builds it?\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eAll ebuilds have lists of tests exported as \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUSE_EXPAND\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eed lists called \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTESTS\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e. An expanded use can be searched for in the same way as other use flags, but with the appropriate prefix, in this case, you would search for ‘\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003etests_greattests_TestsEverything\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e’:\u003c/span\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"font-size:medium\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ use_search\u003dtests_greattests_TestsEverything\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ equery-$board hasuse $use_search\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#0000ff\"\u003e \u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e* Searching for USE flag tests_greattests_TestsEverything …\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e[I-O] [ ] some_ebuild_package_name:0\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThis will however only work on ebuilds which are \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ealready installed\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e, ie. their potentially outdated versions.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAlternately\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e, you can run a pretended emerge (emerge -p) of all autotest ebuilds and scan the output.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ emerge -p ${all_ebuilds_from_Q1} |grep -C 10 “${use_search}”\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003ch4 style\u003d\"font-size:medium\"\u003e\u003ca name\u003d\"TOC-14\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q3:-I-have-an-ebuild-foo-where-are-its-sources-\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ3: I have an ebuild ‘foo’, where are its sources?\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eGenerally speaking, one has to look at the ebuild source to figure that question out (and it shouldn’t be hard). However, all present autotest ebuilds (at the time of this writing) are also ‘cros-workon’, and for those, this should always work:\u003c/span\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"font-size:medium\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ ebuild_search\u003dfoo\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ ebuild $(equery-$board which $ebuild_search) info\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eCROS_WORKON_SRCDIR\u003d”/home/you/trunk/src/third_party/foo”\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eCROS_WORKON_PROJECT\u003d”chromiumos/third_party/foo”\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003ch4 style\u003d\"font-size:medium\"\u003e\u003ca name\u003d\"TOC-15\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q4:-I-have-an-ebuild-what-tests-does-it-build-\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ4: I have an ebuild, what tests does it build?\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eYou can run a pretended emerge on the ebuild and observe the ‘TESTS\u003d’ statement:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cspan style\u003d\"font-size:medium;font-family:Times New Roman\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"background-color:rgb(243,243,243)\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ ebuild_name\u003dfoo\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ emerge-$board -pv ${ebuild_name}\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eThese are the packages that would be merged, in order:\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eCalculating dependencies...\u003c/font\u003e \u003cfont color\u003d\"#000000\"\u003edone!\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e[\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#00ff00\"\u003eebuild\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(255,255,255);font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#ffff00\"\u003eR\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#ffffff\"\u003e \u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e]\u003c/font\u003e\u003cfont color\u003d\"#ffffff\"\u003e \u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#00ff00\"\u003efoo-foo_version\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(255,255,255);font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eto\u003c/font\u003e \u003cfont color\u003d\"#000000\"\u003e/build/$board/\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eUSE\u003d\"\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#ff0000\"\u003eautox hardened tpmtools xset\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(255,255,255);font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#0000ff\"\u003e-buildcheck -opengles\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e\"\u003c/font\u003e \u003cfont color\u003d\"#000000\"\u003eTESTS\u003d\"\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#ff0000\"\u003eenabled_test1 enabled_test2 … enabled_testN\u003c/font\u003e\u003cfont color\u003d\"#ffffff\"\u003e \u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#0000ff\"\u003e-disabled_test1 ...disabled_testN\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e\" 0 kB\u003c/font\u003e\u003cfont color\u003d\"#ffffff\"\u003e \u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#3d85c6\"\u003e[1]\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAlternately, you can use equery, which will list tests with the USE_EXPAND prefix:\u003c/span\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(0,0,255);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ equery-$board uses ${ebuild_name}\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e[\u003c/font\u003e \u003cfont color\u003d\"#000000\"\u003eLegend : U - final flag setting for installation]\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e[ : I - package is installed with flag ]\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e[\u003c/font\u003e \u003cfont color\u003d\"#000000\"\u003eColors : set, unset ]\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e* Found these USE flags for chromeos-base/autotest-tests-9999:\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003eU I\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + autotest : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + autotest : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + autox : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + buildcheck : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + hardened : activate default security enhancements for toolchain (gcc, glibc, binutils)\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e- - opengles : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e+ + tests_enabled_test : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e \u003cfont color\u003d\"#000000\"\u003e- - tests_disabled_test : \u0026lt;unknown\u0026gt;\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman;font-size:medium\"\u003e\u003ca name\u003d\"TOC-16\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q5:-I-m-working-on-some-test-sources-how-do-I-know-which-ebuilds-to-cros_workon-start-in-order-to-properly-propagate-\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ5: I’m working on some test sources, how do I know which ebuilds to cros_workon start in order to properly propagate?\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYou should ‘workon’ and always cros_workon start all ebuilds that have files that you touched.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you’re interested in a particular file/directory, that is installed in /build/$board/usr/local/autotest/ and would like know which package has provided that file, you can use equery:\u003c/span\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;color:rgb(0,0,255);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ equery-$board belongs /build/${board}/usr/local/autotest/client/site_tests/foo_bar/foo_bar.py\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#0000ff\"\u003e \u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e* Searching for \u0026lt;filename\u0026gt; …\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003echromeos-base/autotest-tests-9999 (\u0026lt;filename\u0026gt;)\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#ff0000\"\u003eDON’T forget\u003c/font\u003e to do equery-$board. Just equery will also work, only never return anything useful.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAs a rule of thumb, if you work on anything from the core autotest framework or shared libraries (anything besides {server,client}/{test,site_tests,deps,profilers,config}), it belongs to \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003echromeos-base/autotest. \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIndividual test case will each belong to a particular ebuild, see Q2.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIt is important to cros_workon start every ebuild involved.\u003c/span\u003e\u003cbr /\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman;font-size:medium\"\u003e\u003ca name\u003d\"TOC-17\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q6:-I-created-a-test-added-it-into-ebuild-emerged-it-and-I-m-getting-access-denied-failures.-What-did-I-do-wrong-\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ6: I created a test, added it into ebuild, emerged it, and I’m getting access denied failures. What did I do wrong?\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eYour test’s setup() function (which runs on the host before being uploaded) is probably trying to write into the read-only intermediate location.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-18\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Q7:-Missing-pyauto_dep\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eQ7: Missing pyauto_dep\u003c/font\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eYou're seeing something like:\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont size\u003d\"4\"\u003e\u003ccode\u003eMissing pyauto_dep. \u003c/code\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003ccode\u003eUnhandled PackageInstallError: Installation of \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003ccode\u003epyauto_dep\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003ccode\u003e(type:dep) failed : dep-\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003ccode\u003epyauto_dep\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003ccode\u003e.tar.bz2 could not be fetched from any of the repos ['autoserv://']\u003c/code\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cb\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eYou're running the now-deprecated run_remote_tests.sh without the --use_emerged flag. Use test_that instead. OR, you are using test_that but have never emerged autotest-chrome, and thus the telemetry dep is missing. \u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/building-and-running-tests#TOC-Running-tests-on-a-machine---run_remote_tests.sh\"\u003ehere\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/building-and-running-tests"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5229588253548794102"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5229588253548794102"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5229588253548794102"}],"author":[{}],"sites$pageName":{"$t":"building-and-running-tests"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"XCl7JmA0\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/312343428971785383"},"published":{"$t":"2013-02-06T23:06:43.394Z"},"updated":{"$t":"2017-06-28T15:39:18.428Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-28T15:39:16.325Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Bisecting Performance Regressions"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-size:small;background-color:transparent;font-weight:normal\"\u003eLatest docs are at: \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/speed/bisects.md\" style\u003d\"font-size:small;background-color:transparent;font-weight:normal\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/speed/bisects.md\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4727746233434872159"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/312343428971785383"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/312343428971785383"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/312343428971785383"}],"author":[{"name":{"$t":"Simon Hatch"},"email":{"$t":"simonhatch@chromium.org"}}],"sites$pageName":{"$t":"bisecting-performance-regressions"},"sites$revision":{"$t":"85"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4401293337184776630"},"published":{"$t":"2017-03-17T17:47:20.864Z"},"updated":{"$t":"2017-06-23T14:24:25.797Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-23T14:24:24.273Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Origin Trials"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003cdiv class\u003d\"sites-layout-name-two-column-hf sites-layout-vbox\"\u003e\u003cdiv class\u003d\"sites-layout-tile sites-tile-name-header\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eOrigin trials are an approach to enable safe experimentation with web platform features. For more, see \u003c/span\u003e\u003ca href\u003d\"https://github.com/GoogleChrome/OriginTrials\" style\u003d\"font-size:13.3333px\" rel\u003d\"nofollow\"\u003ehttps://github.com/GoogleChrome/OriginTrials\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e.\u003c/span\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eGooglers should also refer to the internal documentation at \u003ca href\u003d\"http://goto.google.com/origin-trials\" target\u003d\"_blank\"\u003ego/origin-trials\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eFor Blink Contributors / Feature Authors\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSo, you're a Blink contributor, and maybe want to run an origin trial for your feature? \u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ePlease see our \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/origin-trials/running-an-origin-trial\"\u003eFeature Author Guide\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-2\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eFor Web Developers\u003c/b\u003e\u003c/font\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePlease see our \u003ca href\u003d\"https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/developer-guide.md\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eWeb Developer Guide\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eLinks\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eDo you have a trial token, but not sure if it's working? We have a \u003ca href\u003d\"https://googlechrome.github.io/OriginTrials/check-token.html\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003epage to check tokens\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/available-trials.md\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eCurrent Trials\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/completed-trials.md\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eCompleted Trials\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class\u003d\"sites-layout-tile sites-tile-name-footer\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eQuestions or comments? Contact us at \u003ca href\u003d\"mailto:experimentation-dev@chromium.org\"\u003eexperimentation-dev@chromium.org\u003c/a\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/origin-trials"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4401293337184776630"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4401293337184776630"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4401293337184776630"}],"author":[{"name":{"$t":"Jason Chase"},"email":{"$t":"chasej@chromium.org"}}],"sites$pageName":{"$t":"origin-trials"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3433490111794392114"},"published":{"$t":"2017-06-21T00:56:42.685Z"},"updated":{"$t":"2017-06-21T00:56:47.612Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-21T00:56:42.752Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"So you want to add a new permission?"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6743906577140407009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/adding-permissions"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3433490111794392114"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3433490111794392114"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3433490111794392114"}],"author":[{"name":{"$t":"Raymes Khoury"},"email":{"$t":"raymes@chromium.org"}}],"sites$pageName":{"$t":"adding-permissions"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"XSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5559098481692091804"},"published":{"$t":"2013-05-22T14:12:40.399Z"},"updated":{"$t":"2017-06-20T18:37:21.150Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-20T18:37:18.504Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Structure of Layered Components and iOS Code Within the Chromium Codebase"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe purpose of this document is to describe the structure of layered components and iOS code within the Chromium source tree. This document assumes the context of the\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://docs.google.com/a/google.com/document/d/1AMPEkXKgVB7vYoSwLrLaZNC3UDJBh0rjkj4W5BA-TUU/edit#heading\u003dh.c66otrtl06ql\" style\u003d\"color:rgb(0,0,0);text-decoration:none\"\u003e accompanying\u003c/a\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-design\"\u003ehigh-level design\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-technical-approach\"\u003etechnical strategy\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e documents.\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Overview\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eOverview\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere will be a new top-level directory, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eios/\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. This directory will contain the following:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-weight:normal;list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eweb/\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: iOS’s src/content/ equivalent\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-weight:normal;list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003echrome/\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: iOS’s src/chrome equivalent\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"font-weight:normal;list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eprovider/\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: the API via which Chromium code will call downstream iOS code\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-weight:bold;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econsumer/\u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e: the API via which downstream iOS code will call Chromium code \u003c/span\u003e\u003ci\u003e\u003cb\u003e[On hold:\u003c/b\u003e Due to the significant flux with componentization and upstreaming, it's not yet clear which code will actually need consumer APIs, so for now this is not enforced and does not need to be built out further.]\u003c/i\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEach layered component will be divided as follows:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003ecore/: \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eshared code that is src/content/- and src/ios/-free.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003econtent/\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: Content-based driver for the component. \u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eios/\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e: Driver for the component based on src/ios/web/ and src/ios/embed/web/.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor components that are multi-process (i.e., currently have browser/, renderer/, etc. subdirectories), the process division will move to be under the content/ driver (since Chrome for iOS is single-process and almost never uses Chromium code that is not browser-process code).\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Detailed-Example-Discussion-of-DEPS-Rules\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eDetailed Example/Discussion of DEPS Rules\u003c/span\u003e\u003c/h1\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Autofill-Focused-Example\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofill-Focused Example\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe below example indicates a structure for form autofill wherein:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003econtent- or ios-specific code detects that a form is being rendered\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecore code determines whether there is data with which to fill the form\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003econtent- or ios-specific code renders the data\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAdditionally, we assume that key components of the iOS flow (its WebContents-like object and the object that renders autofill data) are implemented downstream and exposed to upstream code via the embed layer, which will indeed be the case for some amount of time.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eStructure under components/autofill/:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecore/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofillManager interface/impl\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofillDriver interface\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003econtent/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ebrowser/\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13px\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofillDriverImpl\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13px\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eListens for IPC from the renderer to know when a form is rendered and call into AutofillManager\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReceives OnFormDataFilled calls from AutofillManager and sends IPC, which is caught by the renderer\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003erenderer/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eios/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofillDriverIOS\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eObserves WebState to know when a form is rendered and call into AutofillManager\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReceives OnFormDataFilled calls from AutofillManager and asks AutofillDriverBridge to render the data\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eStructure under ios/:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eweb/ (upstream impl code of the web layer)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echrome/ (startup, glue code, etc.)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eprovider/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eweb/ (interfaces that downstream code provides to the web layer)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWebState interface (WebContents-like object)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecomponents/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eautofill/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutofillDriverBridge interface\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRenderDataForForm()\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003econsumer/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecomponents/\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eautofill/ (Wrapper API for downstream code to call into autofill)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-DEPS-Rules\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eDEPS Rules\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eios/foo can depend on ios/provider/foo\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePurpose of ios/provider/foo is for foo (and higher layers) to use it\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eios/provider/foo can depend only on lower-layer consumer/ targets\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMight need lower-level consumer API to pass parameters to downstream code\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eios/consumer/foo will depend on ios/foo (which can’t depend on ios/consumer/foo)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecomponents/foo/ios can depend only on ios/web, ios/provider/web, and lower layers\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5559098481692091804"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5559098481692091804"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5559098481692091804"}],"author":[{"name":{"$t":"Colin Blundell"},"email":{"$t":"blundell@chromium.org"}}],"sites$pageName":{"$t":"structure-of-layered-components-within-the-chromium-codebase"},"sites$revision":{"$t":"14"}},{"gd$etag":"\"Wyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7824456237194375504"},"published":{"$t":"2015-02-04T21:01:33.485Z"},"updated":{"$t":"2017-06-20T05:54:34.975Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-20T05:54:33.853Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Speed Infra"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eContent has moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/speed/README.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/speed/README.md\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/speed-infra"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7824456237194375504"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7824456237194375504"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7824456237194375504"}],"author":[{"name":{"$t":"Annie Sullivan"},"email":{"$t":"sullivan@chromium.org"}}],"sites$pageName":{"$t":"speed-infra"},"sites$revision":{"$t":"32"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4928831842279614946"},"published":{"$t":"2015-06-17T18:37:11.674Z"},"updated":{"$t":"2017-06-20T05:50:34.634Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-20T05:50:32.519Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"FAQ for when a perf regression bug is assigned to you"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis page has been moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/speed/addressing_performance_regressions.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/speed/addressing_performance_regressions.md\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7824456237194375504"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/speed-infra/perf-bug-faq"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4928831842279614946"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4928831842279614946"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4928831842279614946"}],"author":[{"name":{"$t":"Quinten Yearsley"},"email":{"$t":"qyearsley@chromium.org"}}],"sites$pageName":{"$t":"perf-bug-faq"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7650844405767894756"},"published":{"$t":"2011-06-17T22:47:36.126Z"},"updated":{"$t":"2017-06-15T17:32:12.350Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-15T17:32:10.319Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Safe Browsing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Browsing-Protection\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eBrowsing Protection\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Resource-Handlers\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eResource Handlers\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Safe-Browsing-Interstitial-Page\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eSafe Browsing Interstitial Page\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Download-Protection\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eDownload Protection\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-URL-Checking\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eURL Checking\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Hash-Checking\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eHash Checking\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Client-Side-Phishing-Detection\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eClient Side Phishing Detection\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Resource-Request-Flow\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eResource Request Flow\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Metrics\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eMetrics\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Safe-Browsing-Database\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eSafe Browsing Database\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Browsing-Protection\" /\u003eBrowsing Protection\u003c/h2\u003e\u003cdiv\u003eWhen Safe Browsing is enabled, all URLs will be checked before the content is allowed to begin loading. URLs are checked against two lists: malware and phishing. Depending on which list is matched we show a different warning message on the interstitial page.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eChecking the safe browsing database is a multistep process. The URL is hashed and a synchronous check against the in-memory prefix list is done. If no match is found, the URL is considered safe immediately. If the prefix matches, an asynchronous request is made to the safe browsing servers for a list of all full hashes matching that prefix. Once the list is returned, the full hash is compared against the list and the URL request can be continued or cancelled. For more information, you may check the full description of the \u003ca href\u003d\"https://developers.google.com/safe-browsing/v3\"\u003eSafe Browsing v3 Protocol\u003c/a\u003e. There is work underway to switch to the \u003ca href\u003d\"https://developers.google.com/safe-browsing/v4/\"\u003ev4 protocol\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Resource-Handlers\" /\u003eResource Handlers\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eWhenever a resource is requested, the ResourceDispatcherHost will create a chain of ResourceHandlers. For each event in the loading of the resource, each handler can choose to cancel the request, defer the request (to do some asynchronous work before deciding what to do), or continue (letting the next handler in the chain have a chance to decide). The SafeBrowsingResourceHandler is created at the head of the chain so that it has first say over whether to allow loading a resource. If safe browsing is disabled, the SafeBrowsingResourceHandler is simply not added to the chain, and thus no browsing-related safe browsing actions occur.\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Safe-Browsing-Interstitial-Page\" /\u003eSafe Browsing Interstitial Page\u003c/h3\u003eWhen a resource is marked as unsafe the resource request is paused and an interstitial page (SafeBrowsingBlockingPage) is displayed. The user can choose to continue anyway, which will resume the resource request, or to go back, which will cancel the resource request and return to the previous page. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eThreat Details Collection\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003cbr /\u003eIf the interstitial is for a hit in the threat list (including malware, phishing, and UwS), \u003cstrike\u003ethe page is http (not https),\u003c/strike\u003e and the tab is not in an incognito window, there is an opt-in option to send extra details about the the unsafe resources for further analysis.\u003cbr /\u003e\u003cbr /\u003eWhen the interstitial appears an IPC is sent to the renderer process to collect details from the DOM. The data consists of a tree of the URLs for the various frames, iframes, scripts and embeds.\u003cbr /\u003e\u003cbr /\u003eIf the checkbox is checked when the user chooses dismisses the interstitial page, various extra details will be collected asynchronously on the browser side. First the History service is queried to get the list of redirects involved in all the URLs, then the Cache is queried to get the headers for each of the requests for those URLs, and finally the report will be sent.\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Download-Protection\" /\u003eDownload Protection\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-URL-Checking\" /\u003eURL Checking\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eThe download checks operate in a similar manner to the browsing ones, though with some changes due to the different nature of downloads. It is not known that a resource request will be a download until the headers are received, therefore all downloads also go through the browsing checks. For the same reason, we cannot check the redirect URLs as we go along like is done in the browsing tests. Instead the chain of redirects is saved in the URLRequest object and once we begin the download checks, all the URLs in the chain will be checked simultaneously. Since downloads are less latency sensitive than page loads, we also dispense with the in-memory database and the caching of full hash results. Finally, the check is done in parallel to the download rather than pausing the download request until the checks are done, however the file will be given a temporary name until the checks complete.\u003c/div\u003e\u003cdiv\u003e\u003cp\u003eIf a download is flagged as malicious, the item in the download bar will be replaced with a warning and buttons to keep or discard the file. If discard is chosen, the request will be cancelled and the file deleted. If the file is kept, it will be renamed to its actual name (with .crdownload if the download is still in progress). \u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Hash-Checking\" /\u003eHash Checking\u003c/h3\u003e\u003cp\u003eAs the file downloads, we also compute a hash of the file data. Once the file has completed downloading this hash is checked against the download digest list. Currently we are evaluating the usefulness of the hash check so no UI is displayed.\u003c/p\u003e\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eThis is an overview of the code flow of handling a download. Some details are omitted to keep the size reasonable. \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eThis is an overview of the code flow of handling a request. Some details are omitted to keep the size reasonable. The green line indicates the common case where loading a non-malware page only requires a synchronous check to the in-memory safe browsing database. The dashed lines indicate asynchronous calls. The dotted magenta lines indicates a request to Google's Safe Browsing server.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing/legend.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg alt\u003d\"Safe Browsing Diagram Legend\" border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1448475449232/developers/design-documents/safebrowsing/legend.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing/download_protection_without_legend.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg alt\u003d\"Download Protection Diagram\" border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1448475859930/developers/design-documents/safebrowsing/download_protection_without_legend.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Client-Side-Phishing-Detection\" /\u003eClient Side Phishing Detection\u003c/h2\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eClient Side Phishing Detection runs a detection model on pages the user visits to try to detect phishing pages that are not in the safe browsing lists. On startup, and periodically afterwards, the ClientSideDetectionService will fetch an updated model. The model is sent in an IPC to every Render Process, then assigned to PhishingClassifierDelegate associated with each RenderView. This allows the classification to be done in the render process, which has access to the page text.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing/csdservice.svg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1308878557131/developers/design-documents/safebrowsing/csdservice.svg\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Resource-Request-Flow\" /\u003eResource Request Flow\u003c/h2\u003e\u003cdiv\u003eThis is an overview of the code flow of handling a request. Some details are omitted to keep the size reasonable. The green line indicates the common case where loading a non-malware page only requires a synchronous check to the in-memory safe browsing database. The dashed lines indicate asynchronous calls. The dotted magenta lines indicates a request to Google's Safe Browsing server.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg alt\u003d\"Safe Browsing Resource Request Diagram\" border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1448477560230/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Metrics\" /\u003eMetrics\u003c/h2\u003e\u003cdiv\u003eMost safe browsing histograms use the \"SB2.\" prefix, but newer ones now use \"SafeBrowsing.\" prefix. Histograms for older versions used \"SB.\". There are also a few safe browsing UserMetrics (filter on \"SB\"), and safe browsing Rappor metrics (starts with \"interstitial\"). Metrics about what happens on interstitials are under \"interstitial.{malware,harmful,phishing}.*\", and metrics about download classification are under \"SBClientDownload.*\".\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Safe-Browsing-Database\" /\u003eSafe Browsing Database\u003c/h2\u003e\u003cdiv\u003eThe SafeBrowsingService is responsible for updating the various databases used by safe browsing. In 2016 there is work ongoing to replace all of the database code for the new Safe Browsing Pver4 update protocol.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTODO(vakh): provide more details about database format and update process.\u003c/div\u003e\u003cul /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7650844405767894756"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7650844405767894756"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7650844405767894756"}],"author":[{"name":{"$t":"Matt Mueller"},"email":{"$t":"mattm@chromium.org"}}],"sites$pageName":{"$t":"safebrowsing"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4749775017575318314"},"published":{"$t":"2013-11-06T20:06:17.151Z"},"updated":{"$t":"2017-06-12T18:21:31.232Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-12T18:21:29.393Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Rect-based event targeting in views"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"3\"\u003eAuthor: Terry Anderson (tdanderson at chromium)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eProblem\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eViews (tabs, tab close buttons, bookmark star, etc.) formerly only supported point-based event targeting, which meant that targeting for gestures only considered the center point of the touch region and not its size. Treating gesture events in the same manner as mouse events when determining the event's target can lead to a poor experience for touchscreen users because a touch region can overlap many more possible targets than a mouse cursor and it is difficult to ensure that the center of the touch region is over the intended target (especially if that target is small, such as the tab close button). \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;line-height:17px;white-space:pre-wrap;background-color:transparent\"\u003eThe goal of this feature is to add support for rect-based event targeting (\"fuzzing\") by using a heuristic to determine the most probable target of a gesture having its touch region represented by a rectangle.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eSolution\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont size\u003d\"2\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis heuristic is implemented in \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eView::GetEventHandlerForRect()\u003c/b\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e with the \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;line-height:17px;white-space:pre-wrap;background-color:transparent\"\u003eidea that small targets are more difficult to touch reliably than large targets, so small targets should get priority when determining the most probable target of a gesture.\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e The heuristic works by recursively looking for candidate targets among the descendants of \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003ethis\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e which the touch region overlaps by at least 60%. Among all such candidates, we return the target which has its center point\u003cfont color\u003d\"#0000ff\"\u003e[1]\u003c/font\u003e closest to the center point of the touch region. \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;line-height:1.15;white-space:pre-wrap\"\u003eIf no candidates for rect-based targeting exist, we instead return the target that would have been returned if point-based event targeting were used with the center point of the touch region.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:normal\"\u003ePoint-based targeting still uses \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap;line-height:normal\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eView::GetEventHandlerForPoint(gfx::Point)\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:normal\"\u003e, but this function has been made non-virtual and simply calls into the virtual function \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap;line-height:normal\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eGetEventHandlerForRect(gfx::Rect)\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:normal\"\u003e with a unit rect (i.e., having size 1x1). The implementation of \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap;line-height:normal\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eView::GetEventHandlerForRect()\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap;line-height:normal\"\u003e and its overrides has preserved the existing behavior of point-based targeting in this case. Otherwise, if called with a non-unit rect, \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;line-height:17px;font-family:Arial;white-space:pre-wrap\"\u003ethe overrides of \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;line-height:17px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eGetEventHandlerForRect()\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;line-height:17px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e call directly into \u003c/font\u003e\u003cb\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eView::GetEventHandlerForRect()\u003c/font\u003e\u003c/b\u003e\u003cfont face\u003d\"Arial\"\u003e, with two exceptions mentioned in the \"Future work\" section below.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003eSee \u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?view\u003drevision\u0026amp;revision\u003d232891\" style\u003d\"font-family:Arial;line-height:17px;white-space:pre-wrap\" target\u003d\"_blank\"\u003er232891\u003c/a\u003e for the implementation details\u003cspan style\u003d\"font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eFuture work\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003eThe algorithm does not seem to perform as well for touchscreens which do not report their own radius values (as compared to touchscreens which do); see \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d315795\" style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\" target\u003d\"_blank\"\u003eissue 315795\u003c/a\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e. Furthermore, r\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003eect-based event targeting is not yet implemented for \u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eAutofillDialogViews\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e or \u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eNotificationView\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eMetrics\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUMA metrics have been added to the \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eAsh.GestureTarget\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e histogram to give a rough estimation of how difficult it is for users to successfully tap on views elements (see \u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d209263\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003er209263\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e). These metrics specifically focus on successful taps (where the tap resulted in a user-visible effect) and unsuccessful taps (where the tap had no visible effect) on the tabstrip and surrounding regions.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eSuccessful taps counted:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_TABSWITCH_TAP: A tap on a currently unselected tab (i.e., the tap was responsible for selecting the tab).\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_TABCLOSE_TAP: A tap on a tab's close button.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_NEWTAB_TAP: A tap on the new tab button.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_FRAMEMAXIMIZE_TAP: A tap on the frame maximize button.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003eGESTURE_MAXIMIZE_DOUBLETAP: A double-tap on the browser window resulting in a maximize or restore action.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eUnsuccessful taps counted:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_TABNOSWITCH_TAP: A tap on a currently selected tab.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eGESTURE_FRAMEVIEW_TAP: A tap on the space to the right of the tabstrip, left of the tabstrip, or in between tabs\u003cfont color\u003d\"#0000ff\"\u003e[2]\u003c/font\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003eGESTURE_ROOTVIEWTOP_TAP: A tap on the top edge of a browser window.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe effectiveness is computed as \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ethe ratio of successful taps to unsuccesful taps\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eThis measurement is not perfect because it does not take into account cases where a tap was classified as successful but had an unintended result (for example, tapping with the intent of closing a tab but instead having a new tab open). Measuring these types of cases would require one or both of the following:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eAdding new metrics that track pairs of actions which occur with a very small delay in between. For example, a tap on a tab close button followed almost immediately by a Ctrl-Alt-T to restore the most recently closed tab may indicate that closing the tab was not the user’s intent.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eConducting a user study where participants execute a set of tasks (e.g., “close the second tab”, “open a new tab”) and we keep track of how many taps were required to accomplish each one.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eFootnotes\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#0000ff\"\u003e[1]\u003c/font\u003e Originally t\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003ehe distance to the \u003c/span\u003e\u003ci style\u003d\"background-color:transparent;font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003ecenter line \u003c/i\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;font-size:small;line-height:17px;white-space:pre-wrap;background-color:transparent\"\u003e(the line that remains after repeatedly removing 1px borders from the rectangle)\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;line-height:17px;white-space:pre-wrap;font-size:small\"\u003e of the view was used in order to prevent bias against wide/tall rectangular targets. But in \u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d241955\u0026amp;view\u003drevision\" target\u003d\"_blank\"\u003er241955\u003c/a\u003e this was changed to instead use the center point to fix an edge case and also because wide/tall targets would never actually be candidates for rect-based targeting due to their size relative to a touch region.\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;line-height:17px;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#0000ff\"\u003e[2]\u003c/font\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;white-space:pre-wrap\"\u003eEach double-tap to maximize or restore the window contributes 2 to the value of this count, and each single tap also contributes 2 to the value of this count. Thus when interpreting the results of the data, the value of GESTURE_FRAMEVIEW_TAP first needs to be adjusted as (GESTURE_FRAMEVIEW_TAP - (2 * GESTURE_MAXIMIZE_DOUBLETAP)) / 2.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/views-rect-based-targeting"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4749775017575318314"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4749775017575318314"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4749775017575318314"}],"author":[{"name":{"$t":"Terry Anderson"},"email":{"$t":"tdanderson@chromium.org"}}],"sites$pageName":{"$t":"views-rect-based-targeting"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"Wil7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/742609122135705455"},"published":{"$t":"2011-06-30T21:30:02.611Z"},"updated":{"$t":"2017-06-07T17:16:41.268Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-07T17:16:38.380Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Triage Best Practices"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\r\n\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-What-is-Triage-\" /\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan\u003e\r\n\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-is-Triage-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eWhat is Triage?\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Triage-boils-down-to-Three-Questions:\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eTriage boils down to Three Questions:\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-to-Think-about-Priorities\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eHow to Think about Priorities\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Recommended-Processing-Order-for-Triage-Practice\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eRecommended Processing Order for Triage Practice\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-More-Pro-Tips\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eMore Pro Tips\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eWhat is Triage?\u003c/b\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/h2\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eA process (often taking the form of a regular meeting) for \u003c/span\u003e\u003cspan\u003e\u003ci\u003emaking decisions about the need, priority, timing, and assignment of work requests\u003c/i\u003e\u003c/span\u003e\u003cspan\u003e.\u003c/span\u003e\r\n \u003cbr /\u003e\r\n \u003c/li\u003e\r\n\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Triage-boils-down-to-Three-Questions:\" /\u003e\u003cli\u003e\u003cspan\u003eTriage boils down to Three Questions:\u003c/span\u003e\u003c/li\u003e\r\n\u003c/h3\u003e\r\n\r\n \r\n\u003col\u003e\r\n \u003cli\u003e\u003cspan\u003eDo we want to do this work?\u003c/span\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e\u003c/b\u003e\u003cspan\u003e Be definitive. If the work isn't something that we intend on doing (or isn't something we're able to confirm is a real issue), then close the issue out and provide honest and \u003c/span\u003e\u003cb\u003e\u003ci\u003ecourteous\u003c/i\u003e\u003c/b\u003e\u003cspan\u003e feedback. It's always best to keep your backlog reflective of the work that you intend on doing.\u003c/span\u003e\r\n \u003cbr /\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/li\u003e\r\n\r\n \u003cli\u003e\u003cspan\u003eHow important is it to us (Priority) and when do we want it done (Schedule/Milestone)? \u003c/span\u003e\r\n\r\n\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cb\u003eNote:\u003c/b\u003e\u003cspan\u003e In the standard Chromium.org workflow Priority and Schedule are very closely related concepts (please see the background on priority below).\u003c/span\u003e\r\n \u003cbr /\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/li\u003e\r\n\r\n \u003cli\u003e\u003cspan\u003eWho should own it?\u003c/span\u003e\r\n\r\n\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e \u003c/b\u003e\u003cspan\u003ePeople can only do a finite amount of work, adding more work to someone's pile won't get it done faster.\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e \u003c/b\u003e\u003cspan\u003eIt's perfectly fine to mark something as Status:Available (i.e. no Owner), if the work doesn't need to be scheduled immediately, but please make sure that the work has a specific categorization label (e.g. Component\u003dUI\u0026gt;Browser\u0026gt;Foo), so that it's clear which team(s) are accountable for it's priority.\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/li\u003e\r\n \u003c/ol\u003e\r\n\u003c/ul\u003e\r\n \r\n\u003cdiv\u003e\r\n\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-Think-about-Priorities\" /\u003e\u003cspan\u003eHow to Think about Priorities\u003c/span\u003e\u003c/h2\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eP0 - \u003c/span\u003e\u003cb\u003eEmergency\u003c/b\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eRequires immediate resolution\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eP1 - \u003c/span\u003e\u003cb\u003eNeeded\u003c/b\u003e\u003cspan\u003e for current milestone\u003c/span\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eTeams should use best discretion here, but this bucket should generally represent high user impact issues and quality issues (e.g. regressions, crashers, security issues, feature completeness, etc...).\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eThe test: \"Would someone notice (in a bad way) if this issue were present in the release?\"\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eP2 - \u003c/span\u003e\u003cb\u003eWanted\u003c/b\u003e\u003cspan\u003e for current milestone\u003c/span\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eLow/ No user impact, can safely be punted from a release.\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eMost in-development work should have this priority.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eP3 - \u003c/span\u003e\u003cb\u003eNot time sensitive\u003c/b\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eCan be completed at any time, no release targeting required.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n \u003c/div\u003e\r\n\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Recommended-Processing-Order-for-Triage-Practice\" /\u003e\u003cb\u003eRecommended Processing Order for Triage Practice\u003c/b\u003e\u003c/h2\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eStart by checking your team's load balance.\u003c/span\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eUsing your standard triage query, pull up the \"\u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d2\u0026amp;q\u003d\u0026amp;colspec\u003dID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified\u0026amp;groupby\u003d\u0026amp;sort\u003d\u0026amp;x\u003dm\u0026amp;y\u003dreleaseblock\u0026amp;cells\u003dtiles\u0026amp;mode\u003dgrid\"\u003eGrid\u003c/a\u003e\u003cspan\u003e\" view. Set \u003c/span\u003e\u003cb\u003e\u003ci\u003eRows\u003c/i\u003e\u003c/b\u003e\u003cspan\u003e to be \"Owner,\" \u003c/span\u003e\u003cb\u003e\u003ci\u003eColumns\u003c/i\u003e\u003c/b\u003e\u003cspan\u003e to be \"None,\" and \u003c/span\u003e\u003cb\u003e\u003ci\u003eCells\u003c/i\u003e\u003c/b\u003e\u003cspan\u003e to be \"Counts\"\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eGet a rough sense for everyone's issue distribution.\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e\u003c/b\u003e\u003cspan\u003e Keep that page opened in the background, as a reference for when you are assigning issues.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eAssign unassigned (-has:owner) Release Blockers + P0 \u0026amp; P1 issues.\u003c/span\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eThese are important to start with first, since these issues are likely time sensitive (notice Blockers, which actively hold back releases, are prioritized first).\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e\u003c/b\u003e\u003cspan\u003e It's OK to change the Blocking status or Priority, but please be clear about why (e.g. \"this isn't a release block stable because ....\")\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eUntriaged (status\u003duntriaged and status\u003dunconfirmed) issues next, ordering by age (i.e. try and process the requests that have been in the queue longest)\u003c/span\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eThe point here is really to answer the 3 questions (i.e. \"Is this something we want to do?,\" \"How important is it?,\" \"Who should do it?\")\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003ePlease ensure that all P1+ issues are assigned an owner.\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003ePro Tip:\u003c/font\u003e\u003c/b\u003e Ideally you'll budget enough time to get through everything, but if your list is too large to process in a single triage session, \u003c/span\u003e\u003cspan\u003e\u003cu\u003eprioritize looking at Type-Bug-Regression\u003c/u\u003e\u003c/span\u003e\u003cspan\u003e (i.e. they are the most likely to be P1+ issues).\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003e\u003cspan\u003eOnce you've triaged the most important issues, sanity check your team's load balance (to make sure that you haven't overloaded anyone).\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eReview / Assign unassigned P2 \u0026amp; P3 issue, as well as any open Available issues.\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/h2\u003e\r\n\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-More-Pro-Tips\" /\u003e\u003cspan\u003eMore Pro Tips\u003c/span\u003e\u003c/h2\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cspan\u003eSet aside a regular time (and place) to Triage.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eGive yourself enough time to handle your incoming stream of issues and make progress on (or at least review) your backlog.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eSetup a rotation w/ your team members, to share the load. Though they are a little more burdensome to administer, they tend to be the most sustainable triage efforts, help prevent people from burning out, and ensure that the process doesn't break when people take a vacation.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eWade into and clean-up your backlog. New team members will often start from this pool of issues, please be kind and make sure that they start by working on valid/ relevant issues.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cspan\u003eMake sure that things are properly categorized, especially as Available issues, so that they are \u003c/span\u003e\u003cspan\u003ediscoverable.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cb\u003eSpend most of your time on issues opened in the last year.\r\n\u003c/b\u003e\u003c/li\u003e\r\n\r\n \r\n\u003cul\u003e\r\n \u003cli\u003e\u003cb\u003eMost issues have a half-life. \u003c/b\u003e\u003cspan\u003eIssue reports are a static reflection of what was... not necessarily what is. \u003c/span\u003e\u003cspan\u003eThat is... due to a variety of factors (e.g. code churn, environment changes, etc...) as issues age it becomes increasingly likely that they will become less reflective of the current state of the product.\r\n\u003c/span\u003e\u003c/li\u003e\r\n \u003cli\u003e\u003cb\u003ePeople will re-file (and often duplicate) important issues. \u003c/b\u003e\u003cspan\u003eMany of the old issues that linger often have not been properly duped, because the person who fixed the issue wasn't aware of the other issue's existence.\u003c/span\u003e\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/ul\u003e\r\n \r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2480943774340680129"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/bug-reporting-guidelines/triage-best-practices"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/742609122135705455"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/742609122135705455"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/742609122135705455"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"triage-best-practices"},"sites$revision":{"$t":"53"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/28094934827012725"},"published":{"$t":"2016-03-24T11:48:15.086Z"},"updated":{"$t":"2017-06-07T06:38:05.092Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-24T12:26:53.419Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"clovis"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1rvrbD570aqiFLu3KihUSnyVgRrCD7pGnznC6pj3jjMM/edit#\" style\u003d\"font-size:10pt;background-color:transparent\" target\u003d\"_blank\"\u003eGuiding Design\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDetailed Design Documents\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/17XZ7iMT5JGr8LhuUhOUNoqGyTskRu4MALB-62NTpU9M/edit\" target\u003d\"_blank\"\u003ePage similarity metric\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1QFltLe07S_mY3rTX8wp1bRxuHc1iZmOeq79g1-6jDR0/edit\" target\u003d\"_blank\"\u003eMetrics\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8001833299950616316"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/loading/clovis"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/28094934827012725"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/28094934827012725"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/28094934827012725"}],"author":[{"name":{"$t":"Matthew Cary"},"email":{"$t":"mattcary@chromium.org"}}],"sites$pageName":{"$t":"clovis"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4256831897182755662"},"published":{"$t":"2017-06-06T22:27:07.416Z"},"updated":{"$t":"2017-06-06T22:28:36.882Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-06T22:28:35.215Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Omnibox Bug Triage Process"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThe document describing the \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src.git/+/HEAD/components/omnibox/bug-triage.md\"\u003eomnibox bug triage process\u003c/a\u003e lives in the source tree. This page merely exists to aid search and discovery.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1417709785584952228"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox/omnibox-bug-triage-process"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4256831897182755662"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4256831897182755662"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4256831897182755662"}],"author":[{"name":{"$t":"Mark Pearson"},"email":{"$t":"mpearson@chromium.org"}}],"sites$pageName":{"$t":"omnibox-bug-triage-process"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3572765501188206435"},"published":{"$t":"2016-01-29T01:26:55.183Z"},"updated":{"$t":"2017-06-02T17:32:40.550Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-06-02T17:32:38.457Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Bluetooth Design Docs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-README-documents\" /\u003eREADME documents\u003c/h2\u003e\u003cdiv\u003eSee \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#search/\u0026amp;q\u003dfile:bluetooth.*README\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\"\u003eREADME documents in source code\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Supporting-Documents\" /\u003eSupporting Documents\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eAdditional documentation in other formats. These should be linked from README files, but are also linked here. They may be hosted directly on this site.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Google-Documents\" /\u003eGoogle Documents\u003c/h3\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1MBOLc1J09xhmEy9As17Rii4asM7u60LluRIv-OPPARM/edit\"\u003eInitial Design Doc\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/158gc43rbwXrHbk1lPCBIbImQ8un0IEasIT6oLUSyssw/edit\"\u003eBlocklist\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1mBipxn1sJu6jMqP0RQZpkYXC1o601bzLCpCxwTA2yGA/edit?usp\u003dsharing\"\u003eBluetooth platform abstraction layer Testing\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/edit\"\u003eWeb Platform Bluetooth Testing\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1wa96bCrB2Iw7tTI-fWsKmhLB7_ffF12frGIjRvhaj9E/edit\"\u003eInternals Page\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Sub-pages\" /\u003eSub pages\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cimg src\u003d\"http://www.google.com/chart?chc\u003dsites\u0026amp;cht\u003dd\u0026amp;chdp\u003dsites\u0026amp;chl\u003d%5B%5BPage+listing'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Subpage+Listing%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D297'dim'%5C%3D10'%3D10'%3D500'%3D297'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C\u0026amp;sig\u003dlxEPbO98PQKCTIgDHMqrwU0hJD8\" data-type\u003d\"subpages\" data-props\u003d\"align:left;borderTitle:Subpage Listing;displayAs:TOC;maxDepth:6;rootPage:THIS_PAGE;\" width\u003d\"500\" height\u003d\"300\" style\u003d\"display:block;text-align:left;margin-right:auto;\" /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3572765501188206435"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3572765501188206435"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3572765501188206435"}],"author":[{"name":{"$t":"Vincent Scheib"},"email":{"$t":"scheib@chromium.org"}}],"sites$pageName":{"$t":"bluetooth-design-docs"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6843779592643169675"},"published":{"$t":"2017-05-22T09:32:46.098Z"},"updated":{"$t":"2017-05-22T10:13:35.288Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-05-22T10:13:35.288Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Recent Changes to the Credential Management API"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eRecently there have been multiple changes to the Credential Management API. This doc aims to summarizes the changes and give developers advice to use the new features while still being able to support older versions of Chromium.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Changes-in-Details\" /\u003eChanges in Details\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe following developer facing changes have been made:\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-The-unmediated-flag-to-CredentialRequestOptions-is-replaced-by-an-mediation-enum\" /\u003eThe \u003cfont face\u003d\"courier new, monospace\"\u003eunmediated\u003c/font\u003e flag to \u003cfont face\u003d\"courier new, monospace\"\u003eCredentialRequestOptions\u003c/font\u003e is replaced by an mediation \u003cfont face\u003d\"courier new, monospace\"\u003eenum\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eThis change extends the possible mediation options passed to \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003enavigator.credentials.get\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. Instead of a boolean flag unmediated \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eget\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e now supports a \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eCredentialMediationRequirement\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e enum with three different values: \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“silent”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“optional”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e and \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“required”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. Providing \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003emediation: “silent”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e is equivalent to the old \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eunmediated: true\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, while \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003emediation: “optional”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e is equivalent to \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eunmediated: false\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. The novel option is \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“required”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, which always leads to user mediation, even if auto-signin would be possible otherwise. Similarly as before, \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003emediation: “optional”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e is the default option and will be chosen if no other value is specified.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Polyfill\" /\u003ePolyfill\u003c/h3\u003e\u003c/div\u003e\r\n\u003cdiv\u003eIn order to migrate existing code that uses the boolean unmediated flag to make use of the new enum the following patch to get will be necessary. Note that it is impossible to use mediation: required while being backwards compatible, given that this is a new feature.\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#0000ff\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#0000ff\"\u003evar\u003c/font\u003e origNavigatorCredentialsGet \u003d navigator.credentials.get;\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003enavigator.credentials.get \u003d \u003cfont color\u003d\"#0000ff\"\u003efunction\u003c/font\u003e(options) {\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (!(\u003cfont color\u003d\"#ff00ff\"\u003e\"mediation\"\u003c/font\u003e in options)) {\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e options[\u003cfont color\u003d\"#ff00ff\"\u003e\"mediation\"\u003c/font\u003e] \u003d options[\u003cfont color\u003d\"#ff00ff\"\u003e\"unmediated\"\u003c/font\u003e] ? \u003cfont color\u003d\"#ff00ff\"\u003e\"silent\"\u003c/font\u003e : \u003cfont color\u003d\"#ff00ff\"\u003e\"optional\"\u003c/font\u003e;\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereturn\u003c/font\u003e origNavigatorCredentialsGet(options);\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction-of-navigator.credentials.create\" /\u003eIntroduction of \u003cfont face\u003d\"courier new, monospace\"\u003enavigator.credentials.create\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eIn addition to \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eget\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003estore\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e and \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003erequireUserMediation\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003enavigator.credentials\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e now supports a fourth method called \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ecreate\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. It can be used to asynchronously create \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e objects. Currently it expects an \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eoption\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e dictionary with a single key which can be either \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“password”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e or \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“federated”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. In case of \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“password”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e the value will be used to instantiate a \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ePasswordCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e object, while in case of \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e“federated”\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e the key’s value will be used to instantiate a \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eFederatedCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ecreate()\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e returns a \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ePromise\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, which resolves to a \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e object if successful and rejects otherwise. \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eHowever, it is still possible to create \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eCredentials\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e using the \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ePasswordCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e or \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eFederatedCredential\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e constructor. This continues to be the preferred way for synchronous creation. \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch3 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-Polyfill1\" /\u003ePolyfill\u003c/h3\u003e\u003cdiv\u003eIn order to make use of the new \u003cfont face\u003d\"courier new, monospace\"\u003ePromise\u003c/font\u003e based creation method the following polyfill is needed in old browsers that do not support it natively:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (!(\u003cfont color\u003d\"#ff00ff\"\u003e\"create\"\u003c/font\u003e \u003cfont color\u003d\"#9900ff\"\u003ein\u003c/font\u003e navigator.credentials)) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e navigator.credentials.create \u003d \u003cfont color\u003d\"#0000ff\"\u003efunction\u003c/font\u003e(options) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereturn\u003c/font\u003e \u003cfont color\u003d\"#9900ff\"\u003enew\u003c/font\u003e Promise(\u003cfont color\u003d\"#0000ff\"\u003efunction\u003c/font\u003e(resolve, reject) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (Object.keys(options).length !\u003d\u003d 1) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereject\u003c/font\u003e(\u003cfont color\u003d\"#ff00ff\"\u003e\"NotSupportedError: Only 'password' and 'federated' \"\u003c/font\u003e +\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#ff00ff\"\u003e\"credential types are currently supported.\"\u003c/font\u003e);\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (\u003cfont color\u003d\"#ff00ff\"\u003e\"password\"\u003c/font\u003e \u003cfont color\u003d\"#9900ff\"\u003ein\u003c/font\u003e options) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003etry\u003c/font\u003e {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eresolve\u003c/font\u003e(\u003cfont color\u003d\"#9900ff\"\u003enew\u003c/font\u003e PasswordCredential(options[\u003cfont color\u003d\"#ff00ff\"\u003e\"password\"\u003c/font\u003e]));\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e } \u003cfont color\u003d\"#9900ff\"\u003ecatch\u003c/font\u003e (e) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereject\u003c/font\u003e(e);\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (\u003cfont color\u003d\"#ff00ff\"\u003e\"federated\"\u003c/font\u003e \u003cfont color\u003d\"#9900ff\"\u003ein\u003c/font\u003e options) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003etry\u003c/font\u003e {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eresolve\u003c/font\u003e(\u003cfont color\u003d\"#9900ff\"\u003enew\u003c/font\u003e FederatedCredential(options[\u003cfont color\u003d\"#ff00ff\"\u003e\"federated\"\u003c/font\u003e]));\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e } \u003cfont color\u003d\"#9900ff\"\u003ecatch\u003c/font\u003e (e) {\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereject\u003c/font\u003e(e);\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003ereject\u003c/font\u003e(\u003cfont color\u003d\"#ff00ff\"\u003e\"NotSupportedError: Only 'password' and 'federated' credential \"\u003c/font\u003e +\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#ff00ff\"\u003e\"types are currently supported.\"\u003c/font\u003e);\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e });\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e };\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e}\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Renaming-of-requireUserMediation-to-preventSilentAccess\" /\u003eRenaming of \u003cfont face\u003d\"courier new, monospace\"\u003erequireUserMediation\u003c/font\u003e to \u003cfont face\u003d\"courier new, monospace\"\u003epreventSilentAccess\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eIn order to address concerns that \u003cfont face\u003d\"courier new, monospace\"\u003enavigator.credentials.requireUserMediation\u003c/font\u003e can be confusing depending on the context it has been renamed to \u003cfont face\u003d\"courier new, monospace\"\u003enavigator.credentials.preventSilentAccess\u003c/font\u003e. However, there is no change in functionality.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-Polyfill2\" /\u003ePolyfill\u003c/h3\u003e\u003cdiv\u003eGiven that this is simply a rename the polyfill for old browsers is very short:\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (!(\u003cfont color\u003d\"#ff00ff\"\u003e\"preventSilentAccess\"\u003c/font\u003e \u003cfont color\u003d\"#9900ff\"\u003ein\u003c/font\u003e navigator.credentials)) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e navigator.credentials.preventSilentAccess \u003d\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e navigator.credentials.requireUserMediation;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Exposing-of-passwords-to-JavaScript-and-deprecation-of-the-custom-fetch-infrastructure\" /\u003eExposing of passwords to JavaScript and deprecation of the custom fetch infrastructure\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003ePerhaps the biggest change is that \u003cfont face\u003d\"courier new, monospace\"\u003ePasswordCredential.password\u003c/font\u003e is now directly accessible from JavaScript. The reason for this change is that the current security model of the Credential Management API is not as effective as desired (see e.g. \u003ca href\u003d\"https://github.com/w3c/webappsec-credential-management/issues/58\" rel\u003d\"nofollow\"\u003ehere\u003c/a\u003e) and the current fetch based infrastructure has reported usability issues (e.g. it's impossible to send JSON or apply a hash to the password before sending). While exposing passwords in JavaScript does not improve the security situation, it does not significantly worsen it and it also improves greatly the usability of the API. \u003c/div\u003e\r\n\u003cdiv\u003e \u003c/div\u003e\r\n\u003cdiv\u003eDeprecation of the custom fetch infrastructure entails that it is no longer needed to pass a \u003cfont face\u003d\"courier new, monospace\"\u003ePasswordCredential\u003c/font\u003e object to fetch’s \u003cfont face\u003d\"courier new, monospace\"\u003eRequestInit\u003c/font\u003e object and that \u003cfont face\u003d\"courier new, monospace\"\u003ePasswordCredential\u003c/font\u003e attributes \u003cfont face\u003d\"courier new, monospace\"\u003eidName\u003c/font\u003e, \u003cfont face\u003d\"courier new, monospace\"\u003epasswordName\u003c/font\u003e and \u003cfont face\u003d\"courier new, monospace\"\u003eadditionalData\u003c/font\u003e will be deprecated and removed later this year.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-Polyfill3\" /\u003ePolyfill\u003c/h3\u003e\u003cdiv\u003eIf possible, new code should simply access the new \u003cfont face\u003d\"courier new, monospace\"\u003epassword\u003c/font\u003e property instead of relying on the deprecated \u003cfont face\u003d\"courier new, monospace\"\u003efetch\u003c/font\u003e infrastructure.\u003c/div\u003e\u003cdiv\u003eIf this is not possible, existing code should be migrated in the following way. Given the following legacy code that passes a \u003cfont face\u003d\"courier new, monospace\"\u003eCredential\u003c/font\u003e object to \u003cfont face\u003d\"courier new, monospace\"\u003efetch:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace;background-color:transparent;font-size:10pt\"\u003ec.idName \u003d \u003cfont color\u003d\"#ff00ff\"\u003e\"id\"\u003c/font\u003e;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ec.passwordName \u003d \u003cfont color\u003d\"#ff00ff\"\u003e\"password\"\u003c/font\u003e;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ec.additionalData \u003d formData;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#9900ff\"\u003efetch\u003c/font\u003e(url, { credentials: c, method: \u003cfont color\u003d\"#ff00ff\"\u003e\"POST\"\u003c/font\u003e });\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe same can now be achieved using the following updated code, setting the necessary attributes in the \u003cfont face\u003d\"courier new, monospace\"\u003eformData\u003c/font\u003e body directly:\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eformData.set(\u003cfont color\u003d\"#ff00ff\"\u003e\"id\"\u003c/font\u003e, c.id);\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eformData.set(\u003cfont color\u003d\"#ff00ff\"\u003e\"password\"\u003c/font\u003e, c.password);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#9900ff\"\u003efetch\u003c/font\u003e(url, { body: formData, method: \u003cfont color\u003d\"#ff00ff\"\u003e\"POST\"\u003c/font\u003e });\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA polyfill that patches fetch to do this automatically is provided below and provides compatibility between old and new browsers:\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#0000ff\"\u003evar\u003c/font\u003e origFetch \u003d fetch;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003efetch \u003d \u003cfont color\u003d\"#0000ff\"\u003efunction\u003c/font\u003e(input, init) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (init \u0026amp;\u0026amp; init[\u003cfont color\u003d\"#ff00ff\"\u003e\"credentials\"\u003c/font\u003e] \u003cfont color\u003d\"#9900ff\"\u003einstanceof\u003c/font\u003e Credential) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#0000ff\"\u003evar\u003c/font\u003e credential \u003d init[\u003cfont color\u003d\"#ff00ff\"\u003e\"credentials\"\u003c/font\u003e];\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#9900ff\"\u003eif\u003c/font\u003e (\u003cfont color\u003d\"#ff00ff\"\u003e\"password\"\u003c/font\u003e in credential) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#0000ff\"\u003evar\u003c/font\u003e body \u003d credential.additionalData || {};\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e body[credential.idName] \u003d credential.id;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e body[credential.passwordName] \u003d credential.password;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e init[\u003cfont color\u003d\"#ff00ff\"\u003e\"body\"\u003c/font\u003e] \u003d body;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e init[\u003cfont color\u003d\"#ff00ff\"\u003e\"credentials\"\u003c/font\u003e] \u003d \u003cfont color\u003d\"#ff00ff\"\u003e\"include\"\u003c/font\u003e;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e origFetch(input, init);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/recent-changes-credential-management-api"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6843779592643169675"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6843779592643169675"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6843779592643169675"}],"author":[{"name":{"$t":"Jan Wilken Dörrie"},"email":{"$t":"jdoerrie@chromium.org"}}],"sites$pageName":{"$t":"recent-changes-credential-management-api"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6360596036256815927"},"published":{"$t":"2012-02-14T20:28:35.751Z"},"updated":{"$t":"2017-05-22T09:36:03.178Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2014-09-12T23:52:11.626Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Password Generation"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eOverview\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003ePasswords are not a very good form of authentication. They are easy to use but they are trivial to steal, either through phishing, malware, or a malicious/incompetent site owner. Furthermore, since people are so apt to reuse passwords losing one password leaks a substantial amount of your internet identity.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eChrome's long term solution to this problem is browser sign in plus OpenID. While implementing browser sign in is something that we can control, getting most sites on the internet to use OpenID will take a while. In the meantime it would be nice to have a way to achieve the\u003c/font\u003e \u003cspan style\u003d\"font-size:small\"\u003esame affect of having the browser control authentication. Currently you can mostly achieve this goal through Password Manager and Browser Sync, but users still know their passwords so they are still susceptible to phishing. By having Chrome generate passwords for users, we can remove this problem. In addition to removing the threat of phishing, automatically generating password is a good way to promote password manager use, which should be more secure and seamless than manual password management.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eDesign\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003eGenerating and Updating Passwords\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eDetecting when we are on a page that is meant for account sign up will be most of the technical challenge. This will be accomplished by a combination of local heuristics and integration with Autofill. In particular, the password manager will upload information to Autofill servers when a user signs in using a saved password on a form different from the one it was saved on. This gives a strong signal that the original form was used for account creation. This data is then aggregated to determine if the form is or isn't used for account creation. Those that are will be labeled as such by Autofill. If a signal is received from Autofill when the form is rendered, we mark the password field. When the users focuses this field, we show an Autofill like dropdown with a password suggestion.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/password-generation/GenerationUI.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1394745053088/developers/design-documents/password-generation/GenerationUI.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eThe generated password is generic enough that it works on most sites as is, but not all sites have the same requirements. Eventually we will use additional signals to craft the generated password we use, but for now we ease editing by showing the password if the user focuses the field and also sync any changes made to the confirm password field (if one exists).\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/password-generation/EditingUI.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1394746838779/developers/design-documents/password-generation/EditingUI.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:small\"\u003eThe user doesn't need to explicitly save a password that is generated as it happens automatically, and they should go through the normal password management experience from that point on.\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eRetrieving Passwords\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:small\"\u003eWhile generally it's good that users don't know their passwords, there are times when they will need them such as when they aren't able to use Chrome. For these cases, we will have a secure password storage web site where users can sign in and view (and possibly export?) their passwords. Since it should be relatively rare that users need this, and since this information is valuable, we are debating adding additional safety checks here, such as a prompt to enable StrongAuth. TODO(gcasto): Add link once this site is live.\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eImplementation\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003eRenderer\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003ePasswordGenerationAgent\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e \u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eis responsible for both detecting account creation password fields and properly filling and updating the passwords depending on the users interaction with the UI.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003eBrowser\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003ePasswordGenerationManager\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e takes messages from the renderer and makes an OS specific dropdown. This UI use a \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003ePasswordGenerator\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e to create a reasonable password for this site (tries to take in account maxlength attribute, pattern attribute, etc.). If the password is accepted, it is sent back to the renderer.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eCaveats\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003eUsers must have password sync enabled\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eSince users are not going to know their passwords, we need to be able to retrieve it for them no matter which computer they are using.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eNot all websites can be protected\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eThis feature only works for sites that work with both the password manager and Autofill. Currently this means sites that do signup with only two input fields (e.g. Netflix) aren't covered since Autofill doesn't upload in this case. It also means that sites that don't work with the password manager (e.g. sites that login without navigation) \u003cspan style\u003d\"background-color:transparent\"\u003earen't covered.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eUsers are only protected for new passwords\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eWe will not force users to use this feature, we simply suggest it when they sign up. Eventually we will want to prompt on change password forms as well, though the password manager currently doesn't have this capability.\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-size:medium\"\u003eFeature makes Google a higher value hijacking target\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eGoogle is already a high value target so this shouldn't changes much. Moreover it's easier for us to make logging into Google more secure via StrongAUTH than have every site on the internet secure itself. At some point in the future it might also be possible for us to automatically change all of a users passwords when we realize that their account is hijacked.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/password-generation"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6360596036256815927"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6360596036256815927"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6360596036256815927"}],"author":[{"name":{"$t":"Garrett Casto"},"email":{"$t":"gcasto@chromium.org"}}],"sites$pageName":{"$t":"password-generation"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8574092850704824236"},"published":{"$t":"2016-12-29T18:24:21.869Z"},"updated":{"$t":"2017-05-15T20:39:23.902Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-05-15T20:39:22.305Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Requesting a Component or Label"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Requesting-a-Component-or-Label\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eRequesting a Component or Label\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Component-versus-Label\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eComponent versus Label\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Component-Guidelines\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eComponent Guidelines\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Label-Guidelines\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eLabel Guidelines\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Description-Best-Practices-for-components-and-labels-:\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eDescription Best Practices (for components and labels):\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Requesting-a-Component-or-Label\" /\u003eRequesting a Component or Label\u003c/h2\u003eProject members can request the creation of new components or labels by simply filing an issue:\u003cdiv\u003e\u003cul style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u003cli\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?template\u003dComponent%20Request\" style\u003d\"color:rgb(17,85,204)\"\u003eComponent Request\u003c/a\u003e (Template)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?template\u003dLabel%20Request\" style\u003d\"color:rgb(17,85,204)\"\u003eLabel Request\u003c/a\u003e (Template)\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Component-versus-Label\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eComponent versus Label\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eComponents are meant to track work on a specific feature/ function.\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eLabels generally are meant to track effort that cuts across multiple components (e.g. Proj(ects), Hotlist(s), etc...)\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Component-Guidelines\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eComponent Guidelines\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eGuideline 1 (Clarity): Component name should be descriptive beyond the core project team (i.e. please avoid using non-industry standard abbreviations, code words,project names, etc...)\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eGuideline 2 (Permanence): Component names should describe features/functions and not team names, code locations, etc..., which are more subject to change and make the hierarchy less predictable for people triaging issues.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGuideline 3 (Specific): Components are meant to explicitly track functional work areas. If you are trying to track a Proj(ect) or an on-going effort (e.g. Hotlist-Conops), please instead request a label for a (Proj- or Hotlist-)\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGuideline 4 (Discoverable/ Predictable): Components should be parented where people would logically expect to find them (i.e. follow product decomposition when naming versus team decomposition).\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Label-Guidelines\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eLabel Guidelines\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGuideline 1: Unless a hierarchy of labels is needed, please avoid creating new root parents.\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGuideline 2: Proj(ects) labels should be used for efforts that have a clear start/ end\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eGuideline 3: Hotlist labels should be used for tracking on-going efforts across multiple components (e.g. Hotlist-GoodFirstBug)\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Description-Best-Practices-for-components-and-labels-:\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eDescription Best Practices (for components and labels):\u003c/font\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eMonorail supports scanning the descriptions of components and labels during auto-complete. This has some important implications.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e(Best practice) Adding abbreviations (e.g. JS, GC, I18N, L10N, WASM, etc...) into the description of your components will give you and your users a nice shorthand.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e(Best practice) If there are synonyms not currently in your description, please consider adding them.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e(Best practice) Avoid using negative descriptions (e.g. \"Not foo\") as they will appear in auto-complete for the subject being avoided (e.g. \"foo\").\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/requesting-a-component-or-label"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8574092850704824236"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8574092850704824236"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8574092850704824236"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"requesting-a-component-or-label"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1896348175409712615"},"published":{"$t":"2016-12-29T19:48:50.145Z"},"updated":{"$t":"2017-05-15T20:34:33.217Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-04T22:01:52.695Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tips and Tricks"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip-1:-It-s-important-to-learn-your-query-operators-:-and-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTip 1: It's important to learn your query operators \":\" and \"\u003d\" \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip-2:-Hit-the-key-to-see-a-list-of-keyboard-shortcuts.\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eTip 2: Hit the \"?\" key to see a list of keyboard shortcuts.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Spoiler-alert:-Issue-list:-J-and-K-for-previous-and-next-issue-X-to-check-a-checkbox.Issue-detail-page:-J-and-K-for-previous-and-next-issue-U-to-go-up-to-list-R-to-select-the-comment-field-on-the-issue-detail-page.Anywhere:-to-select-the-search-box.\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eSpoiler alert: Issue list: J and K for previous and next issue, X to check a checkbox.Issue detail page: J and K for previous and next issue, U to go up to list, R to select the comment field on the issue detail page.Anywhere: / to select the search box.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip-3:-To-get-a-clean-link-to-an-issue-click-on-the-issue-number-in-the-header.\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eTip 3: To get a clean link to an issue, click on the issue number in the header.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-That-gives-you-a-simple-URL-that-you-can-share-with-others.\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eThat gives you a simple URL that you can share with others.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip-4:-Add-monorail-issue-search-as-a-Search-Engine-in-the-Chrome-Omnibar.\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eTip 4: Add monorail issue search as a Search Engine in the Chrome Omnibar.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Just-pop-up-a-menu-on-your-chrome-browsers-location-bar-and-choose-Edit-Search-Engines...-.-E.g.-I-have-the-shortcut-mm-search-for-issues-in-p-monorail.-Typing-mm-12345-takes-me-directly-to-that-issue.-You-can-also-treat-the-issue-entry-page-as-a-search-en\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eJust pop up a menu on your chrome browsers location bar and choose \"Edit Search Engines...\". E.g., I have the shortcut \"mm\" search for issues in /p/monorail. Typing \"mm 12345\" takes me directly to that issue. You can also treat the issue entry page as a search engine, e.g., I have \"mnew\" mapped to \"https://bugs.chromium.org/p/monorail/issues/entry?summary\u003d%s\"\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tip-1:-It-s-important-to-learn-your-query-operators-:-and-\" /\u003eTip 1: It's important to learn your query operators \":\" and \"\u003d\" \u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eComponents and labels can both be searched for using either \":\" or \"\u003d\" operators. The \"\u003d\" operator looks for exact matches. The \":\" operator for components looks for the specified component or any subcomponent. The \":\" for labels (and most of fields) looks for words anywhere in the string.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMastering these queries will allow you to find all issues under a parent component.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eExample 1.1: Querying all Blink issues (\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:12.8px\"\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dcomponent%3ABlink\"\u003ecomponent:Blink\u003c/a\u003e), from Blink to \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:12.8px\"\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003eBlink\u0026gt;WebRTC\u0026gt;Audio etc...\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px\"\u003eExample 1.1: Querying only issues explicitly w/ the Blink label (\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dcomponent%3DBlink\"\u003ecomponent\u003dBlink\u003c/a\u003e)\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tip-2:-Hit-the-key-to-see-a-list-of-keyboard-shortcuts.\" /\u003eTip 2: Hit the \"?\" key to see a list of keyboard shortcuts.\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Spoiler-alert:-Issue-list:-J-and-K-for-previous-and-next-issue-X-to-check-a-checkbox.Issue-detail-page:-J-and-K-for-previous-and-next-issue-U-to-go-up-to-list-R-to-select-the-comment-field-on-the-issue-detail-page.Anywhere:-to-select-the-search-box.\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px;font-weight:normal\"\u003eSpoiler alert: \u003cbr /\u003eIssue list: J and K for previous and next issue, X to check a checkbox.\u003cbr /\u003eIssue detail page: J and K for previous and next issue, U to go up to list, R to select the comment field on the issue detail page.\u003cbr /\u003eAnywhere: / to select the search box.\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tip-3:-To-get-a-clean-link-to-an-issue-click-on-the-issue-number-in-the-header.\" /\u003e\u003cfont size\u003d\"4\"\u003eTip 3: To get a clean link to an issue, click on the issue number in the header.\u003c/font\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-That-gives-you-a-simple-URL-that-you-can-share-with-others.\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px;font-weight:normal\"\u003eThat gives you a simple URL that you can share with others.\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003ch2 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cbr /\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tip-4:-Add-monorail-issue-search-as-a-Search-Engine-in-the-Chrome-Omnibar.\" /\u003e\u003cfont size\u003d\"4\"\u003eTip 4: Add monorail issue search as a Search Engine in the Chrome Omnibar.\u003c/font\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Just-pop-up-a-menu-on-your-chrome-browsers-location-bar-and-choose-Edit-Search-Engines...-.-E.g.-I-have-the-shortcut-mm-search-for-issues-in-p-monorail.-Typing-mm-12345-takes-me-directly-to-that-issue.-You-can-also-treat-the-issue-entry-page-as-a-search-en\" /\u003e\u003cfont size\u003d\"2\" style\u003d\"font-weight:normal\"\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003eJust pop up a menu on your chrome browsers location bar and choose \"Edit Search Engines...\". E.g., I have the shortcut \"mm\" search for issues in /p/monorail. Typing \"mm 12345\" takes me directly to that issue. You can also treat the issue entry page as a search engine, e.g., I have \"mnew\" mapped to \"\u003c/font\u003ehttps://bugs.chromium.org/p/monorail/issues/entry?summary\u003d%s\"\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/tips-and-tricks"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1896348175409712615"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1896348175409712615"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1896348175409712615"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"tips-and-tricks"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"WSl7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8775682338863567846"},"published":{"$t":"2008-08-29T03:46:20.875Z"},"updated":{"$t":"2017-05-11T12:38:57.557Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-05-11T12:38:55.982Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Threading"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/threading_and_tasks.md\"\u003eThis page has moved to the source code docs.\u003c/a\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"Overview\"\u003e \u003c/a\u003e\u003c/h2\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/threading"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8775682338863567846"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8775682338863567846"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8775682338863567846"}],"author":[{"name":{"$t":"Kathy Walrath"},"email":{"$t":"kathyw@google.com"}}],"sites$pageName":{"$t":"threading"},"sites$revision":{"$t":"50"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2598276870052620140"},"published":{"$t":"2016-12-01T11:05:34.485Z"},"updated":{"$t":"2017-05-03T13:34:25.320Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-05T10:19:07.157Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"\"Intent to {Implement,Ship}\" Security Triage"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003eBlink's \u003ca href\u003d\"https://www.chromium.org/blink#TOC-Web-Platform-Changes:-Process\"\u003elaunch process\u003c/a\u003e ensures that interesting features show up as \"Intent\" threads on the \u003ca href\u003d\"https://groups.google.com/a/chromium.org/group/blink-dev/topics\"\u003eblink-dev@chromium.org\u003c/a\u003e mailing list. These threads provide a forum for discussion of new features, and go/no-go decisions from API OWNERS, and are a pretty comprehensive view of the feature set that we're planning on providing to developers.\u003c/p\u003e\r\n\r\n\u003cp\u003eFeature owners generally want the security team to sign off on features before shipping them to the web, and benefit from a contact they can poke with security questions. To that end, it behooves us to proactively skim through these threads to give feedback early, when it's easily actionable. That's where you come in, you wonderful security-minded person, you:\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Triage-Workflow\" /\u003eTriage Workflow\u003c/h2\u003e\r\n\u003col\u003e\r\n \u003cli\u003e\r\n \u003cp\u003eVisit \u003ca href\u003d\"https://bit.ly/blinkintents\" rel\u003d\"nofollow\"\u003ehttps://bit.ly/blinkintents\u003c/a\u003e and find the as-yet untriaged \"Intent\" threads.\u003c/p\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n \u003cp\u003eRead through each feature proposed in an \"Intent to Implement\" or \"Intent to Implement and Ship\" thread, with an eye for security concerns or interesting side effects that the feature's author might not have considered.\u003c/p\u003e\r\n \u003cp\u003e\u003ci\u003eNote: we're assuming here that anything at the \"Intent to Ship\" stage has gone through wide review, and that deprecation is generally security-positive. If those turn out not to be reasonable assumptions, we can reevaluate what threads we care about.\u003c/i\u003e\u003c/p\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n \u003cp\u003eIf you end up with questions, post them to the thread. In particular, it's a good idea to encourage developers to include an explicit \"Security Considerations\" section in their specification and to read through things like the TAG's \u003ca href\u003d\"https://w3ctag.github.io/security-questionnaire/\" rel\u003d\"nofollow\"\u003eself-review questionnaire\u003c/a\u003e (bonus points for filing spec bugs if there's a clear way to do so).\u003c/p\u003e\r\n \u003cp\u003eIf substantial questions are raised, flagging the feature for wider review before launch is reasonable. This could range from a simple comment on the launch bug up through preemptively flipping the Launch-Security flag to \"No\", depending on how the conversation goes.\u003c/p\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n \u003cp\u003eIf you determine that a particular feature has no security implications at all, head over to the launch bug and flip the Launch-Security flag to NA, along with a comment to that effect.\u003c/p\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n \u003cp\u003eAt the end of your triage shift, send a report to \u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/security-dev\"\u003esecurity-dev@chromium.org\u003c/a\u003e with a short description of what you looked at, and how it went (the \u003ca href\u003d\"https://groups.google.com/a/chromium.org/d/msg/net-dev/zhd-eJLjGi0/9Z-83U6vCAAJ\"\u003enet-dev@ triage thread\u003c/a\u003e is a great model for this).\u003c/p\u003e\r\n \u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Hello-feature-owner-\" /\u003eHello, feature owner!\u003c/h2\u003e\r\n\u003cp\u003eThis triage rotation is not meant as an approval step. Lack of comments from the security team on an \"Intent\" thread should not be interpreted as blanket approval. It's meant simply as a mechanism to get more eyes on features earlier in the process, and will hopefully speed up the process of getting those flags flipped on your important launches.\u003c/p\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/intent-security-triage"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2598276870052620140"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2598276870052620140"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2598276870052620140"}],"author":[{"name":{"$t":"Mike West"},"email":{"$t":"mkwst@chromium.org"}}],"sites$pageName":{"$t":"intent-security-triage"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"XCl7JmA4\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2452878017092800303"},"published":{"$t":"2009-12-29T20:48:57.264Z"},"updated":{"$t":"2017-05-01T18:57:03.203Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-05-01T18:56:59.477Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Thread and Task Profiling and Tracking"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003eIntroduction\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eWithin Chromium, tasks are regularly dispatched between various threads, by \"posting a task,\" or between processes, by receiving an IPC directive. This code structure can make it difficult for a standard instruction profiler to understandably attribute execution costs. It also makes it difficult to follow the flow of code in a debugger.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eAt the \u003cfont face\u003d\"'courier new', monospace\"\u003eabout:profiler\u003c/font\u003e internal URL, Chromium provides a profiling and debugging infrastructure: It provides answers to questions such as: What tasks are taking a \"long\" time? What tasks are called \"too often?\" What tasks are suffering \"significant\" queueing delay? How busy is each thread? etc.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThis document describes some of the features supported by the \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eabout:profiler \u003c/span\u003einfrastructure.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cb\u003eOverview\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe infrastructure described has three basic uses: \u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eperformance profiling (to identify potential performance and jank optimizations);\u003c/li\u003e\r\n\u003cli\u003elearning about the codebase (see what tasks run, and when); \u003c/li\u003e\r\n\u003cli\u003edebugging (checking to see task are called the correct number of times). \u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003ePosted-tasks and IPC tasks are tracked, along with their performance characteristics, across the life-cycle of each task. Information is maintained about where each task was constructed/posted (function name, file and line number), along with the thread that was active when the task created. After each task has been executed, information about the run of the task is tallied. Information includes where it executed (thread, process, etc.), as well as counts and durations (time, queueing time, etc.) All that information is compactly accumulated in real time, while Chromium is running.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eThe accumulated performance characteristics are all available during a any session. Additional reference snapshots can be taken at any time during the execution of the browser. The results, as well as deltas between snapshots, can be viewed, sorted, aggregated, and filtered, all within the \u003cfont face\u003d\"'courier new', monospace\"\u003eabout:profiler\u003c/font\u003e page.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eFor learning about the codebase, is is very educational to perform some browsing actions, and then look and see what collection of chromium tasks were fired on various threads. Rather than pouring over the codebase, it is often more educational to look at these lists of tasks. The \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool\"\u003eabout:tracing\u003c/a\u003e\u003c/font\u003e support is also extremely useful for more detailed investigation in this regard.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eCommon Profiling Activities When Trying to Identify Performance Issues\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eOverall Performance: Task Execution Counts\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe easiest way to improve performance is to do less work. If you wish to identify tasks that are \u003cfont color\u003d\"#0000ff\"\u003erunning \"too often,\"\u003c/font\u003e you should bring up the \u003cfont face\u003d\"'courier new', monospace\"\u003eabout:profiler\u003c/font\u003e page, which will by default sort all entry by the number of times each task was performed (its \"count\"). The page will have a header above a table that looks like:\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ctable style\u003d\"border-collapse:collapse;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\r\n\u003cthead style\u003d\"font-family:sans-serif\"\u003e\r\n\u003ctr style\u003d\"background-color:rgb(255,204,153);background-repeat:initial initial\"\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e36,224,621\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e13,772,110\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e98,449\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e29,947\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e16 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e17 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e2 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e19 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e682 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e702 unique\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eCount\u003cspan style\u003d\"color:red\"\u003e**\u003c/span\u003e\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eTotal run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eAvg run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eMax run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eAvg queue time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eMax queue time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eBirth thread\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eExec thread\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eProcess type\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003ePID\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eFunction name\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eSource location\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003c/thead\u003e\r\n\u003ctbody style\u003d\"font-family:sans-serif\"\u003e\r\n\u003ctr /\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe red asterisks in the column heading \"Count\" indicate that the results are sorted by that column. \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eThe row above the column headings provides an aggregate view of the table that appears below the he\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eKeep in mind that although high-frequency tasks (tasks with high \"Counts\") may have a short run times, the overhead for such tasks is not included in their run times. Overhead includes construction, posting to a queue (via locks), getting time slices that other tasks could have enjoyed, cleaning up after a task is executed, etc. As a result, reduction in the number of tasks, for \u003cb\u003e\u003ci\u003every \u003c/i\u003e\u003c/b\u003ehigh frequency tasks may be very beneficial to performance.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eCPU Utilization: Where Is The Time Spent?\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eIf you wish to look for\u003cfont color\u003d\"#0000ff\"\u003e hot spots\u003c/font\u003e, or tasks that are using up a lot of the CPU time, click on the \"Total Run Time\" column heading to sort on that column. All times shown are in milliseconds.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe sorted table will highlight tasks which have total execution time that is large. That statistic means that the product of the number of executions, and the execution per run, was high. If that task can be made more efficient, it may have a positive impact on overall CPU utilization. \u003cfont color\u003d\"#ff0000\"\u003e Caveat: by default, Execution Time is measured with a wall clock\u003c/font\u003e, not based on activity of the CPU on the thread. Beware of tasks that block, such as waiting for a DNS resolution.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eMemory usage and Churn\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAs of M58, if chrome is launched with the flag \"\u003cspan style\u003d\"background-color:transparent;color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003e--enable-heap-profiling\u003dtask-\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003eprofiler\", allocation metrics are captured and aggregated to tasks. This adds a few new colums to the table.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;color:rgb(33,33,33);font-family:sans-serif;font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ctable style\u003d\"border-collapse:collapse;border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;font-family:Segoe UI,Tahoma,sans-serif;font-size:12.8px\"\u003e\u003cthead\u003e\u003ctr style\u003d\"background:rgb(255,204,153)\"\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e7,888,368\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e1,084,910\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e0\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e4,635\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e44\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e600,000\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e30\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e30\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e218\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e76,455,816\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e46 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e45 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e4 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e27 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e1544 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e1833 unique\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eCount\u003cspan style\u003d\"color:red\"\u003e**\u003c/span\u003e\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eTotal run time\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg run time\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eMax run time\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg queue time\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eMax queue time\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Allocations\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Frees\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Net Bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eMax allocated (outstanding) bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eBirth thread\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eExec thread\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eProcess type\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003ePID\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eFunction name\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eSource location\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr /\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOf note here are the \"Avg Allocations/Avg Frees\", which relate the average number of allocations/frees per task invocation. \"Avg Net Bytes\" reports the average memory consumption of that individual task. Note that this can be a positive or a negative number, as one task may allocate memory that's freed by another, in which case the former is net positive, while the latter is net negative. The \"Max allocated (outstanding) bytes\" reports the high watermark of bytes allocated during any run of the task.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA few additional columns can be enabled by clicking on the [columns] link.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ctable style\u003d\"border-collapse:collapse;border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e\u003cthead style\u003d\"font-family:Segoe UI,Tahoma,sans-serif;font-size:12.8px\"\u003e\u003ctr style\u003d\"background:rgb(255,204,153)\"\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e30\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e30\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e218\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e76,455,816\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e237,354,786\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e239,888,572\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e78,462,758,217\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e76,746,509,241\u003c/td\u003e\u003ctd align\u003d\"right\" style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px\"\u003e1,951,755,449\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Allocations\u003cspan style\u003d\"color:red\"\u003e**\u003c/span\u003e\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Frees\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAvg Net Bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eMax allocated (outstanding) bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAllocation count\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eFree Count\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eAllocated bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eFreed bytes\u003c/th\u003e\u003cth style\u003d\"border:1px solid rgb(119,119,119);padding-left:4px;padding-right:4px;background:rgb(224,236,255)\"\u003eOverhead bytes\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody style\u003d\"font-family:Segoe UI,Tahoma,sans-serif;font-size:12.8px\"\u003e\u003ctr /\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe \"Allocation Count/Free Count\" report the number of alloc/free operations across all task invocations, and the \"Allocated Bytes/Freed bytes\" likewise report the number of bytes allocated/freed across all invocations.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe \"Overhead bytes\" column, provided your allocator supports it, reports a lower-bound estimate of the number of overhead bytes that go to heap metadata and slack space in allocated blocks (due to allocation granularity). The fraction \"Overhead bytes/Allocated bytes\" is a decent guesstimate for how efficiently the task is using heap allocations - fewer, larger allocations have lower overhead.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eMajor Jank or Delay In Responsiveness\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eWhen the browser is not responsive, the most common cause is that a task is running too long, and has blocked the ability of some critical thread to respond. Most obviously, this can happen on the CrBrowserMain (i.e., the UI thread in the browser process). It is also common to see this caused by a slow task on the Chrome_IOThread (i.e., the thread used for IPC communications with the renderer). At times, some threads send messages to other threads to get work results, and may be waiting (without officially \"blocking\") for a posted response, so almost any blocked thread *might* be able to cause jank, but the Chrome_FileThread (i.e., the thread that reads and writes from disk) is a most common culprit.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eTo see what tasks have taken an unusually long time to execute, click to sort on the \"Max Run Time\" column. \u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eIt is often helpful to view the results on various processes separately, as Jank tends to be caused by delays in the Browser process. To separate out the results, by process, find the drop-down box labeled \"Group By\" at the top of the page. Select \"Process Type\" to cause the browser process to be isolated in its own table. Once you select that, a second drop down will appear to the immediate right of the first. You should then select \"Exec Thread\" in that pull-down. The top of the page will then look like:\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:sans-serif\"\u003eGroup by: \u003c/b\u003e\u003cspan style\u003d\"font-family:sans-serif\"\u003e\r\n\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\r\n\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\r\n\u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;display:inline!important;float:none\"\u003e \u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eSeparate tables will now be visible to make it more visible, for each thread, what tasks is taking a \"long time.\" You'll also notice that since each table only list a single process type and a single execution thread, that the corresponding columns are no longer shown in each table.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eAfter you have identified a thread that appears to have abnormally slow processes (that might cause jank), it is often helpful to see what tasks were delayed (an that thread!) by such excesses. \u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eTo see what tasks have been forced to wait, click to sort on the Max Queue Time. Assuming the observed execution time was long, you'll tyically see a number of tasks that have a commensurate queuing delay.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eQuickly Drill Down\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eIf you know what you wan to look at (example: a specific file; a specific thead; etc), you can instantly filter all your results to only show rows that contain an arbitrary string. The text box at the top-right of the \u003cfont face\u003d\"'courier new', monospace\"\u003eabout:profiler\u003c/font\u003e page provides automatic case-insensitive filtering.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e For example, if you wanted to only see results that contain the word \"browser\" (perhaps, items running on the \"browser\" thread), simply enter the text \"browser\" (without the quotes) into the box at the top right. Similary, the box could be used to illuminate only lines that contain \"sync,\" or lines that contain only \"AnimationContainer::SetMinTimerInterval\".\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-size:large\"\u003eUnderstanding Profiler Results from\u003c/b\u003e\u003cspan style\u003d\"font-size:large\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u003cfont size\u003d\"4\"\u003eabout:profiler\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eWhen you visit the URL \u003cfont face\u003d\"'courier new', monospace\"\u003eabout:profiler\u003c/font\u003e, you'll get a set of lines which might begin with the following (entry and select boxes don't seem to appear in this documentation):\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ctable style\u003d\"font-family:sans-serif\" width\u003d\"100%\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e\u003cb\u003eGroup by: \u003c/b\u003e\u003cspan\u003e\r\n\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\r\n\u003c/span\u003e \u003cb\u003eSort by: \u003c/b\u003e\u003cspan\u003e\r\n\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coptgroup /\u003e\r\n\u003coption value\u003d\"1\"\u003eCount\u003c/option\u003e\r\n\u003coption value\u003d\"2\"\u003eTotal run time\u003c/option\u003e\r\n\u003coption value\u003d\"3\"\u003eAvg run time\u003c/option\u003e\r\n\u003coption value\u003d\"4\"\u003eMax run time\u003c/option\u003e\r\n\u003coption value\u003d\"5\"\u003eTotal queue time\u003c/option\u003e\r\n\u003coption value\u003d\"6\"\u003eAvg queue time\u003c/option\u003e\r\n\u003coption value\u003d\"7\"\u003eMax queue time\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\r\n\u003coptgroup /\u003e\r\n\u003coption value\u003d\"-1\"\u003eCount (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-2\"\u003eTotal run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-3\"\u003eAvg run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-4\"\u003eMax run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-5\"\u003eTotal queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-6\"\u003eAvg queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-7\"\u003eMax queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-8\"\u003eBirth thread (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-9\"\u003eExec thread (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-10\"\u003eProcess type (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-11\"\u003ePID (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-12\"\u003eFunction name (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-13\"\u003eSource location (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-14\"\u003eFile name (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-15\"\u003eLine number (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"\"\u003e---\u003c/option\u003e\r\n\u003coptgroup /\u003e\r\n\u003coption value\u003d\"1\"\u003eCount\u003c/option\u003e\r\n\u003coption value\u003d\"2\"\u003eTotal run time\u003c/option\u003e\r\n\u003coption value\u003d\"3\"\u003eAvg run time\u003c/option\u003e\r\n\u003coption value\u003d\"4\"\u003eMax run time\u003c/option\u003e\r\n\u003coption value\u003d\"5\"\u003eTotal queue time\u003c/option\u003e\r\n\u003coption value\u003d\"6\"\u003eAvg queue time\u003c/option\u003e\r\n\u003coption value\u003d\"7\"\u003eMax queue time\u003c/option\u003e\r\n\u003coption value\u003d\"8\"\u003eBirth thread\u003c/option\u003e\r\n\u003coption value\u003d\"9\"\u003eExec thread\u003c/option\u003e\r\n\u003coption value\u003d\"10\"\u003eProcess type\u003c/option\u003e\r\n\u003coption value\u003d\"11\"\u003ePID\u003c/option\u003e\r\n\u003coption value\u003d\"12\"\u003eFunction name\u003c/option\u003e\r\n\u003coption value\u003d\"13\"\u003eSource location\u003c/option\u003e\r\n\u003coption value\u003d\"14\"\u003eFile name\u003c/option\u003e\r\n\u003coption value\u003d\"15\"\u003eLine number\u003c/option\u003e\r\n\u003coptgroup /\u003e\r\n\u003coption value\u003d\"-1\"\u003eCount (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-2\"\u003eTotal run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-3\"\u003eAvg run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-4\"\u003eMax run time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-5\"\u003eTotal queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-6\"\u003eAvg queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-7\"\u003eMax queue time (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-8\"\u003eBirth thread (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-9\"\u003eExec thread (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-10\"\u003eProcess type (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-11\"\u003ePID (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-12\"\u003eFunction name (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-13\"\u003eSource location (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-14\"\u003eFile name (DESC)\u003c/option\u003e\r\n\u003coption value\u003d\"-15\"\u003eLine number (DESC)\u003c/option\u003e\r\n\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"color:blue;text-decoration:underline\"\u003e[snapshots]\u003c/span\u003e \u003cspan style\u003d\"color:blue;text-decoration:underline\"\u003e[columns]\u003c/span\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003chr style\u003d\"font-family:sans-serif\" /\u003e\r\n\u003cdiv style\u003d\"font-family:sans-serif\"\u003e\r\n\u003cdiv style\u003d\"margin-top:2ex;margin-bottom:2ex\"\u003e\r\n\u003ctable style\u003d\"border-collapse:collapse;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\r\n\u003cthead\u003e\r\n\u003ctr style\u003d\"background-color:rgb(255,204,153);background-repeat:initial initial\"\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e19,402\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e187,008\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e10\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e9,338\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e217\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e9,932\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e15 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e17 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e2 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e18 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e415 unique\u003c/td\u003e\r\n\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e430 unique\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eCount\u003cspan style\u003d\"color:red\"\u003e**\u003c/span\u003e\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eTotal run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eAvg run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eMax run time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eAvg queue time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eMax queue time\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eBirth thread\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eExec thread\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eProcess type\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003ePID\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eFunction name\u003c/th\u003e\r\n\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255);background-repeat:initial initial\"\u003eSource location\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003c/thead\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e990\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e249\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e28\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e7\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e363\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_CacheThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003edisk_cache::InFlightIO::OnIOComplete\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cdisk_cache%5Cin_flight_io.cc\u0026amp;line\u003d62\" target\u003d\"_blank\"\u003ein_flight_io.cc [62]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e990\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e4,675\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e5\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e255\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e23\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e276\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_CacheThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003edisk_cache::InFlightBackendIO::PostOperation\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cdisk_cache%5Cin_flight_backend_io.cc\u0026amp;line\u003d472\" target\u003d\"_blank\"\u003ein_flight_backend_io.cc [472]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e961\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e249\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e203\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e14\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003enet::SpdySession::ReadSocket\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cspdy%5Cspdy_session.cc\u0026amp;line\u003d773\" target\u003d\"_blank\"\u003espdy_session.cc [773]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e831\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e4\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e18\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e282\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eCrBrowserMain\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eIPC::ChannelProxy::Send\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cipc_channel_proxy.cc\u0026amp;line\u003d357\" target\u003d\"_blank\"\u003eipc_channel_proxy.cc [357]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e561\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e42\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e278\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eCrBrowserMain\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eIPC::ChannelProxy::Context::AddFilter\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cipc_channel_proxy.cc\u0026amp;line\u003d236\" target\u003d\"_blank\"\u003eipc_channel_proxy.cc [236]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e470\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3,480\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e7\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1,286\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e986\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e2,960\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eCrBrowserMain\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eIPC::ChannelProxy::Context::OnMessageReceivedNoFilter\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cipc_channel_proxy.cc\u0026amp;line\u003d116\" target\u003d\"_blank\"\u003eipc_channel_proxy.cc [116]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e405\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e297\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e30\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e6\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e363\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eWorkerThread-*\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003ebase::win::ObjectWatcher::DoneWaiting\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cwin%5Cobject_watcher.cc\u0026amp;line\u003d130\" target\u003d\"_blank\"\u003eobject_watcher.cc [130]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e404\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e_IpcMessageHandlerClass::OnDataReceivedACK\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cbrowser%5Crenderer_host%5Cresource_dispatcher_host.cc\u0026amp;line\u003d408\" target\u003d\"_blank\"\u003eresource_dispatcher_host.cc [408]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e379\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e43\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e2\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e703\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e2,684\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eCrBrowserMain\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e`anonymous-namespace'::ChromeCookieMonsterDelegate::OnCookieChanged\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cbrowser%5Cprofiles%5Cprofile_io_data.cc\u0026amp;line\u003d95\" target\u003d\"_blank\"\u003eprofile_io_data.cc [95]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e362\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e1,275\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e2,962\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eCrBrowserMain\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eTaskManagerModel::NotifyBytesRead\u003c/td\u003e\r\n\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cbrowser%5Ctask_manager%5Ctask_manager.cc\u0026amp;line\u003d971\" target\u003d\"_blank\"\u003etask_manager.cc [971]\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr style\u003d\"background-color:rgb(238,238,238);background-repeat:initial initial\"\u003e\r\n\u003ctd colspan\u003d\"12\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e1194 rows\u003cspan style\u003d\"color:red\"\u003e (1184 hidden) \u003c/span\u003eShow noneShow moreShow all\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cspan style\u003d\"color:blue;text-decoration:underline;font-family:sans-serif\"\u003e[Reset tracking data]\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eBefore describing the top line, it is significant to clarify what each of the columns presented in any table are. The columns are:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eCount:: The number of times this task was observed to have run. If the execution thread is \"Still running,\" then it has not completed, and the actual execution thread is unknown (it might not even have started!).\u003c/li\u003e\r\n\u003cli\u003eTotal run time: The sum of the run times for all tasks listed on this row.\u003c/li\u003e\r\n\u003cli\u003eAvg run time: The quotient of the Total run time column divided the Count column.\u003c/li\u003e\r\n\u003cli\u003eMax run time: The largest single Run time for the task in this row.\u003c/li\u003e\r\n\u003cli\u003eAvg queue time: The average, over all runs of this task, of the queuing delay the task encountered. If this was an ordinary task, the queuing delay is measured from the birth (construction) of the task, until the task began. If this was a PostDelayedTask, then the delay is measured from when the task was asked to run, until it actually ran. For IPC tasks, the queuin delay is always listed as zero (TBD: make this measure interprocess latency).\u003c/li\u003e\r\n\u003cli\u003eMax queue time: The largest singular queuing delay observed for this row.\u003c/li\u003e\r\n\u003cli\u003eBirth thread: The thread on which this task was constucted.\u003c/li\u003e\r\n\u003cli\u003eExec Thread: The thread on which this task ran.\u003c/li\u003e\r\n\u003cli\u003eProcess type: An enumerated list of process types, currently including \"Browser\" and \"Tab\" (meaning Renderer). It will soon include GPU, Plugin, etc.).\u003c/li\u003e\r\n\u003cli\u003ePID: The operating system Process ID associated with the process. This can be used to (for example) distinguish various renderer processes.\u003c/li\u003e\r\n\u003cli\u003eFunction Name: Usually the name of function where the task was constructed (not actually the top level function name for the task in this row). If this is an IP task, then it is the name of the IPC routine that handled the incoming request. On some compilers, this will templete parameters (if applicable), while on other compilers (gcc?), it will only include the name of the templete. In such cases, there may be indistinguishable rows in the profile.\u003c/li\u003e\r\n\u003cli\u003eSource location: The file and line number for the function where this task was created. Clicking on the link in this column will open a new window, displaynig the actual source code specified.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eTop Line Elements\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe first line provides pull down boxes to organize and filter what appears in the table(s). There are currently 4 parts on this headline, such as the following (pulldown and text entry boxes do not appear in this documentation :-( ):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ctable style\u003d\"font-family:sans-serif\" width\u003d\"100%\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cb\u003e Group by: \u003c/b\u003e \u003cb\u003eSort by: \u003c/b\u003e\u003c/td\u003e\u003ctd style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"color:blue;text-decoration:underline\"\u003e[snapshots]\u003c/span\u003e \u003cspan style\u003d\"color:blue;text-decoration:underline\"\u003e[columns]\u003c/span\u003e \u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e. The parts are:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003ePulldown box (labeled \u003cb\u003eGroup by\u003c/b\u003e) to select presentation of multiple tables, rather than one table. If an option is selected (such \"Exec\" thread) then a separate table is presented for each distinct value of the selected option. When an option is selected, then an additional pulldown is provided, to select funther partitioning of the tables.\u003c/li\u003e\r\n\u003cli\u003ePulldown box (labeled \u003cb\u003eSort by\u003c/b\u003e) to select the sort order. Generally, is it easier to click on the column headings to change the sort order, but these pulldown can be used when several levels of sorting are requested. For instance, you can select a primare sort on Count, and a secondary sort on Total Execution time.\u003c/li\u003e\r\n\u003cli\u003eA link to enable/disable Snapshot mode. When this mode is enabled, additional snapshots of data can be obtained, and a delta between any two snapshots can be selected for examination.\u003c/li\u003e\r\n\u003cli\u003eA link to show a more complete list of columns and options. You can select this, and then alter whether some columns are shown or not (to make the tables less wide??), or to merge similar rows (example: Merge all similar rows in the same browser type by not distingushing based on PID). By default, merging of Worker Threads and PAC (Proxy Auto Config) threads is performed, based on the the \"merge similar threads\" checkbox.\u003c/li\u003e\r\n\u003cli\u003eAn instant filter box. Any text typed into this box will be matched (case insensitive) against all the information known about the row (i.e., threads, function, location, etc). Only matching rows will be shown in the table(s).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eTable Elements\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eEach table consists of 4 groups of rows. In addition, if multiple tables are presented, after a \"Group by\" pulldown is selected, there may be a title for the table. The title for table indicates what rows have been selected for presentation in the table. For example, a selection to Group by \"Exec thread\" was selected, then one possible title is \"Exec thread \u003d CrBrowserMain\".\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe following are the 4 groups of rows in each table (with sample lines taken from the table shown above):\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003ctable style\u003d\"border-collapse:collapse;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003cthead\u003e\u003ctr style\u003d\"font-family:sans-serif;background-color:rgb(255,204,153)\"\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e19,402\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e187,008\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e10\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e9,338\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e217\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e9,932\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e15 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e17 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e2 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e18 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e415 unique\u003c/td\u003e\u003ctd align\u003d\"center\" style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e430 unique\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"font-family:sans-serif\" /\u003e\u003c/thead\u003e\u003c/table\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e1. Summary row: This singular row presents the aggregate results for all rows present in the table. For example, it' Count column contains sums the Count column in each row, while its Max exec time columns contains the maixum of all Mac exec time columns in each row.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003ctable style\u003d\"font-family:sans-serif;border-collapse:collapse;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003cthead\u003e\u003ctr\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eCount\u003cspan style\u003d\"color:red\"\u003e**\u003c/span\u003e\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eTotal run time\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eAvg run time\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eMax run time\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eAvg queue time\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eMax queue time\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eBirth thread\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eExec thread\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eProcess type\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003ePID\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eFunction name\u003c/th\u003e\u003cth style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;background-color:rgb(224,236,255)\"\u003eSource location\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr /\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e2. Header Row: This singular row contains the column headings for the table. Headings are only shown for columns that are presented in the table, and tihs list my be varied by selecting various elemens of the Top Line described earlier. Clicking on any elemet of this row will cause the table to be sorted based on that row. A second click will cause a reverse sort.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003ctable style\u003d\"font-family:sans-serif;border-collapse:collapse;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e990\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e249\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e0\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e28\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e7\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e363\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_CacheThread\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eChrome_IOThread\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003eBrowser\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px;text-align:left\"\u003e3036\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003edisk_cache::InFlightIO::OnIOComplete\u003c/td\u003e\u003ctd style\u003d\"border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(119,119,119);border-right-color:rgb(119,119,119);border-bottom-color:rgb(119,119,119);border-left-color:rgb(119,119,119);padding-right:4px;padding-left:4px\"\u003e\u003ca href\u003d\"http://chromesrc.appspot.com/?path\u003d.%5Cdisk_cache%5Cin_flight_io.cc\u0026amp;line\u003d62\" target\u003d\"_blank\"\u003ein_flight_io.cc [62]\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cbr /\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e3. Data Rows: This section may contain 0 or more rows of data, each corresponding to a collection of runs of tasks. The final cell is clickable, and provides quick access to a recent copy of the source code, at the point of interest.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cspan style\u003d\"font-family:sans-serif;background-color:rgb(238,238,238)\"\u003e1194 rows\u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;background-color:rgb(238,238,238);color:red\"\u003e (1184 hidden) \u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;background-color:rgb(238,238,238)\"\u003eShow none Show more Show all\u003c/span\u003e \u003cbr /\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e4..Display Control Row: This singular final row can be used to select, a view of additional or fewer rows of the Data Row section. It contains buttons to request viewing of additional lines, or to reduce viewed lines. It also shows how many lines a table has. By default, only the first 30 rows of a single table are visible. When multiple tables are presented, then a smaller initial number of rows are present. \u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003col\u003e\r\n\u003c/ol\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"2\"\u003eFinal Link: Reset Tracking data\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eAt the very bottom of the about:profile page is a link for Reseting Tracking data. This link sulfaces a useful hack until snapshot functionality can provide the maximum value between two snapshots. The link can be used to force all data entries in all rows of the browser to zero. The next snapshot (or page reload) will show all new data, an dwill, as a result, show the max value since the last reset. The reset is done using various hackery, and minor miscounts are possible. As a result, this is really a hack. Once the snapshot facility better supports max, this link will be removed from the UI.\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003eFAQ\r\n\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003eHow is this implemented?\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eIf you're a Google employee, check out \u003ca href\u003d\"https://goto.google.com/chrome-profiler-internals-techtalk-video\" target\u003d\"_blank\"\u003ethis techtalk\u003c/a\u003e. Otherwise \u003ca href\u003d\"https://cs.chromium.org/search/?q\u003dtracked_objects\" target\u003d\"_blank\"\u003echeck out the code\u003c/a\u003e. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:large\"\u003eI'd like to see just the tasks that appear between two distinct points in time. How do I avoid seeing all the other data?\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eOn the top line, select the Snapshot link. When that is selected you will see the data and time of each data collection effort. Instead of hitting reload, you can click the snapshot button, and acquire another image of the profiler state of the browser. If you click on any two lines, then you will see the changes that have taken place between those two snapshots. When you click on only one line, then you'll see the data from startup through that point in time.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003enote: Max is not currently supported in the delta between two points. That feature will be supported RSN.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cb\u003eHow much does this profiling and analysis impact performance?\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThere is very little measurable performance impact. If you'd like to disable the tracking, use the command line switch \u003cfont face\u003d\"'courier new', monospace\"\u003e--enable-tracking\u003d0\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe implementation attempts to gather all this information across all threads with asymptotically zero locking, zero atomic operations, and a very small amount of memory (that does not grow after all birth locations and associated destruction threads have been observed at least once). The details of how this achieved is provided in a long comment atop the file \u003cfont face\u003d\"'courier new', monospace\"\u003esrc/base/tracked_objects.h,\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e as well as a forth-coming video and associated slide presentation.\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cb\u003eBasic Debugging Assistance: How did *this* task get posted?\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eWhen a breakpoint is hit in a debugger on a given thread, the stack often starts with a message loop running a task, and there is very little information about what part of the codebase truly caused that task to be run. When a newbie developer is trying to follow the flow of events in Chromium, it is often difficult to understand the connection between (for example) the IO Thread, the File Thread, and the Main UI Thread. The infrastructure for task tracking provides basic information to see through these posted task transitions.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eAssuming you've reached a breakpoint of interest, but the top of the call stack shows a message loop, and the calling of a Run() method, then you are perfectly set up to see the source of any task. Most debuggers will traverse to the following base class of interest seamlessly, but here is the more complete description of where to look to find the answer (a specific file and line number).\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eFind the level of the stack that has the Run() method (typically in the \u003cfont face\u003d\"'courier new', monospace\"\u003emessage_loop.cc\u003c/font\u003e file), and look at the Task instance that is calling Run().\u003c/li\u003e\r\n\u003cli\u003eThe Task instance has a base class \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/base/tracking_info.h\u0026amp;q\u003dTrackingInfo\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\"\u003eTrackingInfo\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eThe TrackingInfo base class has an member birth_tally of type \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/base/tracked_objects.h\u0026amp;q\u003dBirths\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\u0026amp;l\u003d234\"\u003eBirths\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eThat Births instance in turn has a base class BirthOnThread, which has a member location_ of type Location.\u003c/li\u003e\r\n\u003cli\u003eFinally, the Location instance will contain the function_name_, the file_name_, and the line_number_ indicating where the task was posted (typically just after construction).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003chr /\u003e\r\n\u003cdiv\u003ePlease address comments and suggestions to Jim Roskind a.k.a., jar at chromium.org.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/threaded-task-tracking"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2452878017092800303"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2452878017092800303"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2452878017092800303"}],"author":[{"name":{"$t":"Jim Roskind"},"email":{"$t":"jar@chromium.org"}}],"sites$pageName":{"$t":"threaded-task-tracking"},"sites$revision":{"$t":"45"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4126225379132188397"},"published":{"$t":"2017-04-27T14:44:12.946Z"},"updated":{"$t":"2017-04-27T14:44:12.980Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-27T14:44:12.946Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Daily Actives - Update Apr 27.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4126225379132188397"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20Apr%2027.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4126225379132188397"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4126225379132188397"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4126225379132188397"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4126225379132188397"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3411047560326720160"},"published":{"$t":"2017-04-27T14:43:30.444Z"},"updated":{"$t":"2017-04-27T14:43:30.476Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-27T14:43:30.444Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Volume - Update Apr 27.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3411047560326720160"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20Apr%2027.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3411047560326720160"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3411047560326720160"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3411047560326720160"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3411047560326720160"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3363558553379433368"},"published":{"$t":"2017-04-26T18:19:15.156Z"},"updated":{"$t":"2017-04-26T18:19:15.313Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-26T18:19:15.156Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen Shot 2017-04-26 at 11.18.49 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3363558553379433368"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/Screen%20Shot%202017-04-26%20at%2011.18.49%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3363558553379433368"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3363558553379433368"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3363558553379433368"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3363558553379433368"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7480717961558333848"},"published":{"$t":"2017-04-26T18:15:40.873Z"},"updated":{"$t":"2017-04-26T18:16:52.044Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-26T18:16:51.949Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"netexport.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7480717961558333848"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/netexport.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7480717961558333848"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7480717961558333848"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7480717961558333848"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7480717961558333848"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5454764286304897034"},"published":{"$t":"2015-05-06T18:59:21.846Z"},"updated":{"$t":"2017-04-24T20:46:38.397Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-28T19:38:07.380Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"How to contribute to GRIT"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003ePlease feel free to contribute patches to GRIT. If you have a new project using GRIT, please let us know by sending a message to the developer group (\u003ca href\u003d\"http://groups.google.com/group/grit-developer\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,0,204)\"\u003ehttp://groups.google.com/group/grit-developer\u003c/a\u003e), and join the user group (\u003ca href\u003d\"http://groups.google.com/group/grit-users\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,0,204)\"\u003ehttp://groups.google.com/group/grit-users\u003c/a\u003e). Also, note the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan\"\u003eregression test plan\u003c/a\u003e that describes how we ensure GRIT stays compatible with your project.\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003eThose who send the occasional patch should ask one of the project committers (one of {benrg, brettw, flackr, gfeher, joaodasilva, joi, mal, markusheintz, mnissler, newt, pastarmovj, sergeyu, thakis, thestig, tony}@chromium.org) to land their patch for them after review. Please read the following section on preparing patches for review.\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003e\u003cspan style\u003d\"font-size:large;line-height:normal;background-color:initial\"\u003ePreparing Patches\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003eYou should read the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium/grit/grit-users-guide\"\u003euser's guide\u003c/a\u003e and the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium/grit/grit-design-overview\"\u003edesign overview\u003c/a\u003e for background on the intended usage and design of GRIT. For more details or for help with how to design your patch, ask one of the project committers.\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003eWe use the Chromium depot_tools to upload patches to the Rietveld review tool. Please \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/install-depot-tools\"\u003einstall the tools\u003c/a\u003e and then use \u003ctt style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016000747681px;max-width:66em\"\u003egit cl upload\u003c/tt\u003e to upload a patch before you send it for review.\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003eBefore sending patches for review, make sure \u003ctt style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016000747681px;max-width:66em\"\u003egrit.py unit\u003c/tt\u003e runs without warnings.\u003c/p\u003e\u003cp style\u003d\"line-height:1.25em;max-width:64em;font-family:arial,sans-serif;font-size:13.1199998855591px\"\u003eFor large patches, it is advisable to discuss with committers on the project first, either by mailing a specific committer you think knows the code you are changing, or by mailing the developer list. It is also advisable to test large patches with Chromium before sending it for review, as it is the largest known open-source project using GRIT, so it exercises many features. To do this:\u003c/p\u003e\u003cul style\u003d\"padding-left:25px;max-width:62em;font-size:13.12px\"\u003e\u003cli style\u003d\"font-family:arial,sans-serif;margin-bottom:0.3em\"\u003eFollow the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos\"\u003eChromium instructions for setting up a checkout\u003c/a\u003e, and make sure you are able to fetch and build the Chromium code.\u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.3em\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eGo to the local GRIT checkout at \u003cspan style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016px\"\u003esrc/tools/grit\u003c/span\u003e and move to a new branch (e.g.\u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cspan style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016px\"\u003egit co -b my_grit_wip_branch\u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e)\u003c/font\u003e\u003c/li\u003e\u003cli style\u003d\"font-family:arial,sans-serif;margin-bottom:0.3em\"\u003eGet the latest version of the repo by running \u003cspan style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016px\"\u003egit pull master\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-family:arial,sans-serif;margin-bottom:0.3em\"\u003eYou can now add your changes, build \u003cspan style\u003d\"font-size:13.12px\"\u003eChromium, check that the build succeeds, check that \u003c/span\u003e\u003ctt style\u003d\"font-family:Monaco,DejaVu Sans Mono,Bitstream Vera Sans Mono,Lucida Console,monospace;font-size:12.2016px;max-width:66em\"\u003egclient runhooks\u003c/tt\u003e\u003cspan style\u003d\"font-size:13.12px\"\u003e succeeds, etc.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5837297656848244278"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5454764286304897034"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5454764286304897034"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5454764286304897034"}],"author":[{"name":{"$t":"Jói Sigurðsson"},"email":{"$t":"joi@chromium.org"}}],"sites$pageName":{"$t":"how-to-contribute-to-grit"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5229677869288282048"},"published":{"$t":"2017-01-19T19:28:55.510Z"},"updated":{"$t":"2017-04-21T12:55:17.520Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-19T19:29:16.661Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2015 OKRs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-2015-Q4-0.54\" /\u003e2015 Q4 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.54\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-input-latency-and-smoothness-0.40\" /\u003eImprove input latency and smoothness \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ensure-mean_input_event_latency-time-remains-under-12ms-on-N5-One-for-90-of-key_mobile_sites_smooth-at-least-90-of-the-time-P2-1.00Get-EventListenerOptions-into-official-DOM-event-spec-P1-0.70Implement-and-ship-EventListenerOptions-to-support-registering-p\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnsure mean_input_event_latency time remains under 12ms on N5/One for 90% of key_mobile_sites_smooth at least 90% of the time \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet EventListenerOptions into official DOM event spec \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement and ship EventListenerOptions to support registering passive event listeners. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip UX (hung renderer dialog) for unresponsive sites on Android \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eVSync-aligned touch input working with unified BeginFrame on Aura \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce smoothness.pathological_mobile_sites.first_gesture_scroll_update on the Nexus 5 by 20% \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImpl side hit-testing against property-tree and display lists. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-real-world-input-performance-0.40\" /\u003eImprove understanding of real-world input performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Expose-hardware-input-timestamps-to-the-web-P1-0.95Implement-experimental-input-latency-web-API-in-M49-P1-0.00Expose-scroll-latency-in-DevTools-somehow-P1-0.30Concrete-scroll-latency-API-presented-to-web-perf-WG-at-TPAC-P1-0.10All-touch-latency-UMA-regress\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eExpose hardware input timestamps to the web \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.95\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement experimental input latency web API in M49 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExpose scroll latency in DevTools somehow \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConcrete scroll latency API presented to web-perf WG at TPAC \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAll touch latency UMA regressions have appropriate owners within 3 weeks. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd UMA metrics for determining potential benefit of passive event listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd touch latency metric measuring until estimated vsync time. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eBetter measure blink hit-test performance \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUse input-related perf insights data to drive performance investigations, 12 associated Hotlist-Jank bugs \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.561\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.56\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fix-at-least-150-Hotlist-Input-Dev-bugs-P1-0.60Implement-root-layer-replacement-mechanism-for-fullscreen-and-non-body-root-scrollers-P1-0.30Ship-more-rational-mode-of-top-control-resizes-P1-0.60Triage-any-new-Blink-Input-Blink-Scroll-bug-within-7-days-P1-1\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFix at least 150 Hotlist-Input-Dev bugs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement root-layer-replacement mechanism for fullscreen and non-body root scrollers \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip more rational mode of top control resizes \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage any new Blink-Input, Blink-Scroll bug within 7 days \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSpec and land API to control Chrome pull-to-refresh nav gesture behind a flag \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive adoption of history Scroll Restoration API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement unified OSK viewport behavior between Android and CrOS for M49 behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[STRETCH] Allow \"non-scrolling\" apps to interact well with top controls (behind a flag) \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[STRETCH] Implement new input modality media queries \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[STRETCH] Implement position: device-fixed behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-interoperability-between-major-browser-engines-0.55\" /\u003eImprove interoperability between major browser engines \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.55\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-automated-input-testing-on-Chrome-for-W3C-web-platform-tests-P1-0.50Ship-spec-correct-body-scroll-API-behavior-P1-0.20Make-all-position-related-APIs-relative-to-Layout-Viewport-P1-1.00Make-Chromium-reliably-send-MouseLeave-events-to-blink-P1-0.60Shi\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnable automated input testing on Chrome for W3C web-platform-tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip spec-correct body scroll API behavior \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake all position-related APIs relative to Layout Viewport \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake Chromium reliably send MouseLeave events to blink \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip KeyboardEvent.key in M48 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIdentify and fix 3 interop bugs with mouse events. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage all Hotlist-Interop bugs and find appropriate owners every week \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFix international keyboard events \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip HTMLSelect.open API \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-rich-scroll-effects-0.45\" /\u003eEnable rich scroll effects \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.45\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Prototype-snap-points-implementation-in-M47-P1-0.40Enable-scroll-customization-on-UIWorker-thread-P1-0.50Ship-scroll-latching-for-touchpad-behind-a-flag-for-one-platform-P4-0.10Smooth-scrolling-for-wheel-and-keyboard-scrolls-in-Win-Linux-enabled-on-trunk-P\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003ePrototype snap-points implementation in M47 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable scroll customization on UIWorker thread \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip scroll latching for touchpad behind a flag for one platform \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSmooth scrolling for wheel and keyboard scrolls in Win/Linux enabled on trunk \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Ship scroll latching for touchpad on all platforms \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePrototype sticky implementation in M48 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Continue-PointerEvent-API-implementation-0.73\" /\u003eContinue PointerEvent API implementation \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.73\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fire-pointer-events-for-all-mouse-events-P1-1.00Add-chorded-button-transformation-to-mouse--pointer-event-generation-logic-P1-1.00Update-MouseEvent-and-so-PointerEvent-to-support-fractional-co-ordinates-P3-0.20Extend-WebMouseEvent-to-become-a-pointer-event\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFire pointer events for all mouse events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd chorded button transformation to mouse-\u0026gt;pointer event generation logic \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate MouseEvent (and so PointerEvent) to support fractional co-ordinates \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExtend WebMouseEvent to become a pointer event API \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement pointer-id ranges for all pointer types \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake PointerEvents work for stylus in CrOS \u0026amp; Android. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eForce pointercancel firing with mouse off the page. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd pointer event handler tracking \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Explore design choices for explicit pointer capture support \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Evolve-touch-platform-UI-0.56\" /\u003eEvolve touch platform UI \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.56\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-unified-touch-text-selection-for-native-Aura-UI-P1-0.10Make-check-boxes-and-radio-buttons-touch-friendly-without-depending-on-touch-adjustment-P1-0.60Support-trackpad-pinch-zoom-on-CrOS-P2-0.80Show-touch-selection-handles-when-scrolling-on-CrOS-P3-0.0\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eShip unified touch text selection for native Aura UI \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake check boxes and radio buttons touch friendly without depending on touch adjustment \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSupport trackpad pinch-zoom on CrOS \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShow touch selection handles when scrolling on CrOS \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eClose 10 text selection bugs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-UI-Events-spec-and-tests-0.69\" /\u003eImprove UI Events spec and tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.69\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Migrate-UIEvent-and-old-Dom3Event-issues-from-Bugzilla-to-github-P1-1.00Reduce-spec-issue-count-down-to-less-than-10-P1-0.40Implement-basic-keyboard-and-mouse-event-tests-in-UIEvent-repo-P1-1.00Merge-UIEvent-tests-into-main-W3C-tests-P2-0.00\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eMigrate UIEvent (and old Dom3Event) issues from Bugzilla to github \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce spec issue count down to less than 10 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement basic keyboard and mouse event tests in UIEvent repo \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMerge UIEvent tests into main W3C tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-code-health-\" /\u003eImprove code health \u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Stretch-Plan-for-reducing-at-least-one-abstraction-layer-from-input-events-P4-0.10\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e[Stretch] Plan for reducing at least one abstraction layer from input events \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-2015-Q3-0.63\" /\u003e2015 Q3 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.63\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-input-latency-and-smoothness-0.55\" /\u003eImprove input latency and smoothness \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.55\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ensure-mean_input_event_latency-time-is-under-12ms-on-Nexus-4-for-90-of-key_mobile_sites-at-least-90-of-the-time-P1-0.80Get-consensus-on-non-blocking-event-listener-API-P1-0.70Implement-non-blocking-event-listener-API-behind-a-flag-in-M46-P1-0.10Approved-U\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnsure mean_input_event_latency time is under 12ms on Nexus 4 for 90% of key_mobile_sites at least 90% of the time \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet consensus on non-blocking event listener API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement non-blocking event listener API behind a flag in M46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eApproved UX design for unresponsive sites \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip hit-test-cache eliminating redundant hit tests in GestureTap and PEP shadow DOM \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive investigation of regressions in touch latency UMA data \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFile 30 concrete Hotlist-Jank bugs (eg. from \"perf parties\") \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConcrete plan for forced non-blocking event listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eBetter measure and improve blink hit-test performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce smoothness.pathological_mobile_sites.first_gesture_scroll_update on the Nexus 4 by 25% \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Ship experiment for validity-rect based hit-test caching \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExpose hardware input timestamps to the web \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.85\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConcrete plan for input latency API on the web \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-interoperability-between-major-browser-engines-0.63\" /\u003eImprove interoperability between major browser engines \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.63\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-automated-input-testing-on-Chrome-for-W3C-web-platform-tests-P1-0.70Ship-Event.isTrusted-P1-1.00Ship-viewport-scroll-behavior-matching-IE-in-M46-P1-0.90Ship-spec-correct-body-scroll-API-behavior-in-M46-P1-0.40Share-interoperability-tracking-plan-wit\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnable automated input testing on Chrome for W3C web-platform-tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip Event.isTrusted \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip viewport scroll behavior matching IE in M46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip spec-correct body scroll API behavior in M46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShare interoperability tracking plan with blink-dev and other vendors \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage all Hotlist-Interop bugs and find appropriate owners every week \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip interoperable mouse-drag behavior across iframes \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake Chromium reliably send MouseLeave events to blink \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip KeyboardEvent.code in M47 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFinish implementing KeyboardEvent.key behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.75\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.68\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.68\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fix-at-least-100-Hotlist-Input-Dev-bugs-P1-1.00Ship-history-scroll-state-customization-API-in-m46-P1-1.00Ship-InputDevice-and-sourceDevice-API-in-M46-P1-0.90Implement-top-control-hiding-for-full-page-scrollable-divs-behind-a-flag-P1-0.20Reduce-untriaged-Cr\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFix at least 100 Hotlist-Input-Dev bugs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip history scroll state customization API in m46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip InputDevice and sourceDevice API in M46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement top-control hiding for full-page scrollable divs behind a flag \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce untriaged Cr-Blink-Input and Cr-Blink-Scroll bugs to ~0 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFile and investigate concrete bugs for accessibility issues around full-page scrollable divs \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003c/div\u003e\u003cdiv\u003eAllow \"non-scrolling\" apps to interact well with top controls (behind a flag) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFull-featured mouse support on Android (text selection, context menu's, etc...) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003c/div\u003e\u003cdiv\u003eSTRETCH: Dynamic support for interaction media queries \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Implement unified OSK viewport behavior between Android and CrOS for M46 behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Evolve-touch-platform-UI-0.79\" /\u003eEvolve touch platform UI \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.79\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-remaining-M-input-features-stylus-zoom-floating-toolbars-perf-test-for-smart-select-P1-1.00Ship-unified-touch-text-selection-in-M46-for-web-contents-in-Aura-P1-1.00Ship-unified-touch-text-selection-for-native-Aura-UI-P3-0.10Make-check-boxes-and-radio-\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eShip remaining M input features (stylus zoom, floating toolbars, perf test for smart select) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified touch text selection in M46 for web contents in Aura \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified touch text selection for native Aura UI \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake check boxes and radio buttons touch friendly without depending on touch adjustment \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.75\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e(STRETCH) Fix cross-site navigation GestureNav issue \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSupport trackpad pinch-zoom on CrOS \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e(STRETCH) Show touch selection handles when scrolling on CrOS \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Continue-PointerEvent-API-implementation-0.67\" /\u003eContinue PointerEvent API implementation \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.67\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Measure-multi-touch-pointer-event-dispatch-overhead-P1-0.90Fire-pointer-events-for-all-mouse-events-P1-0.65Update-MouseEvent-and-so-PointerEvent-to-support-fractional-co-ordinates-P2-0.20Add-chorded-button-transformation-to-mouse--pointer-event-generation-\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eMeasure multi-touch pointer event dispatch overhead \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFire pointer events for all mouse events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate MouseEvent (and so PointerEvent) to support fractional co-ordinates \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd chorded button transformation to mouse-\u0026gt;pointer event generation logic \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eStart extending WebMouseEvent to become a pointer event API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd stylus support for Android \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.75\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFinish pointercancel support for touch \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-rich-scroll-effects-0.65\" /\u003eEnable rich scroll effects \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Prototype-snap-points-implementation-in-M46-P1-0.50Enable-scroll-customization-on-UIWorker-thread-P1-0.50Enable-main-thread-scroll-customization-driven-by-touch-input---behind-a-flag-P2-0.90Ship-scroll-latching-for-touch-in-M47-P2-1.00\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003ePrototype snap-points implementation in M46 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable scroll customization on UIWorker thread \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable main-thread scroll customization driven by touch input - behind a flag \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip scroll latching for touch in M47 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-2015-Q2-0.53\" /\u003e2015 Q2 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.53\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-focus-on-reducing-user-pain-around-input-on-the-web-0.60\" /\u003eImprove focus on reducing user pain around input on the web \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Reduce-untriaged-Cr-Blink-Input-and-Cr-Blink-Scroll-bugs-to-0-0.20Fix-at-least-80-Hotlist-Input-Dev-bugs-1.00\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eReduce untriaged Cr-Blink-Input and Cr-Blink-Scroll bugs to 0 \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFix at least 80 Hotlist-Input-Dev bugs \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-touch-web-platform-rationality-0.64\" /\u003eImprove touch web platform rationality \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.64\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-history-scroll-state-customization-API-in-m44-P1-0.60Implement-sourceDevice.firesTouchevents-for-MouseEvent-and-TouchEvent-behind-a-flag-in-M44-P1-0.85Ship-spec-correct-body-scroll-API-behavior-in-M45-P1-0.50Get-consensus-in-w3c-on-InputDevice-api-spe\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eShip history scroll state customization API in m44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement sourceDevice.firesTouchevents for MouseEvent and TouchEvent behind a flag in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.85\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip spec-correct body scroll API behavior in M45 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet consensus in w3c on InputDevice api spec \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable (and fix) mouseenter / mouseleave behavior for touch in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip async touchmove event coalescing in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFull-featured mouse support on Android (text selection, context menu's, etc..., potentially behind a flag) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFinish implementing UIEvent.sourceDevice for all scenarios in M45 (behind a flag) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable dynamic support for interaction media queries in X11 and Android in M45 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Ship InputDevice and sourceDevice API in M45 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Rationalize-viewport-behvior-0.50\" /\u003eRationalize viewport behvior \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Mature-Virtual-Viewport-0.80Ship-viewport-scroll-behavior-matching-IE-in-M44.-0.60Allow-non-scrolling-apps-to-interact-well-with-top-controls-behind-a-flag-0.00Implement-unified-OSK-viewport-behavior-between-Android-and-CrOS-for-M45-behind-a-flag-0.00\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eMature Virtual Viewport \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip viewport scroll behavior matching IE in M44. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAllow \"non-scrolling\" apps to interact well with top controls (behind a flag) \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement unified OSK viewport behavior between Android and CrOS for M45 behind a flag \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-input-latency-and-smoothness-0.65\" /\u003eImprove input latency and smoothness \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ensure-mean_input_event_latency-time-is-under-12ms-on-Nexus-4-for-80-of-key_mobile_sites-at-least-80-of-the-time-P1-0.80Avoid-sending-touchmove-s-to-Blink-when-unnecessary-with-associated-metrics-to-track-efficacy-P3-0.20Reduce-mean_input_event_latency-on-\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnsure mean_input_event_latency time is under 12ms on Nexus 4 for 80% of key_mobile_sites at least 80% of the time \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAvoid sending touchmove's to Blink when unnecessary, with associated metrics to track efficacy \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce mean_input_event_latency on Nexus 4 for sync_scroll.key_mobile_sites_smooth by 10%, with blame analysis for current pathological cases \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eVSync-aligned touch input behind a flag for Aura \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive investigation of regressions in touch latency UMA data \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip hit-test-cache in M45 eliminating redundant hit tests in GestureTap and PEP shadow DOM scenarios \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eStop sending mousemove events during scroll on desktop and add relevant perf tests in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.85\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-scroll-synchronized-effects-behind-a-flag-0.20\" /\u003eEnable scroll-synchronized effects (behind a flag) \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Approved-design-for-unified-scrolling-with-prototype-for-compositor-scrolling-P1-0.30Implement-scroll-snap-points-for-impl-thread-scrolling-behind-a-flag-in-M45-P1-0.30Consensus-within-chrome-team-on-initial-design-for-sync-scroll-jank-mitigation-P1-0.20sy\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eApproved design for unified scrolling, with prototype for compositor scrolling \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement scroll-snap-points for impl-thread scrolling behind a flag in M45 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConsensus within chrome team on initial design for sync-scroll jank mitigation \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003esync-scroll fully implemented (with jank mitigation on Android) behind a flag in M45 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip main-thread fractional scrolling in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-scroll-customization-main-thread-only-behind-a-flag-0.45\" /\u003eEnable scroll customization (main thread only, behind a flag) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.45\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-main-thread-scroll-customization-driven-by-touch-input---behind-a-flag-in-M44-0.50Enable-main-thread-scroll-customization-driven-by-JS-triggered-scrolls---ship-behind-a-flag-in-M45-0.00Publish-high-quality-demos-add-telemetry-perf-tests-0.40STRETCH:\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnable main-thread scroll customization driven by touch input - behind a flag in M44 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable main-thread scroll customization driven by JS triggered scrolls - ship behind a flag in M45 \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePublish high quality demos, add telemetry perf tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Enable scroll customization on UIWorker thread \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Enable scroll customization driven by all input modalities - ship behind a flag in M4? \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Begin-Implementing-pointer-events-API-0.60\" /\u003eBegin Implementing pointer events API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fire-pointer-events-for-all-touch-input-1.00Add-telemetry-tests-for-multi-touch-pointer-event-dispatch-0.00WG-consensus-on-concrete-plans-for-avoiding-hit-tests-0.00Support-sending-pointercancel-on-touch-scroll-pinch-0.70Add-devtools-support-for-pointer-ev\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFire pointer events for all touch input \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd telemetry tests for multi-touch pointer event dispatch \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eWG consensus on concrete plans for avoiding hit tests \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSupport sending pointercancel on touch scroll/pinch \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd devtools support for pointer event types \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSpec and implement new touch-action options behind a flag in M45 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e(STRETCH) Fire pointer events for all mouse events \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Evolve-touch-platform-UI-0.52\" /\u003eEvolve touch platform UI \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.52\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-Android-M-text-selection-features-smart-select-long-press-and-drag-floating-action-bar-P1-0.90Ship-unified-touch-text-selection-in-M44-for-web-contents-in-Aura-P1-0.60Ship-unified-touch-text-selection-in-M45-for-native-Aura-UI-P2-0.10Make-check-boxes-\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eShip Android M text selection features (smart select, long press and drag, floating action bar) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified touch text selection in M44 for web contents in Aura \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified touch text selection in M45 for native Aura UI \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake check boxes and radio buttons touch friendly without depending on touch adjustment \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e(STRETCH) Fix cross-site navigation GestureNav issue \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003c/div\u003e\u003cdiv\u003e(STRETCH) Support trackpad pinch-zoom on CrOS \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7561957394737716009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/input-dev/input-objectives/2015-okrs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5229677869288282048"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5229677869288282048"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5229677869288282048"}],"author":[{"name":{"$t":"Dave Tapuska"},"email":{"$t":"dtapuska@chromium.org"}}],"sites$pageName":{"$t":"2015-okrs"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8771571264856853467"},"published":{"$t":"2017-01-19T19:31:32.861Z"},"updated":{"$t":"2017-04-21T12:55:17.520Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-19T19:32:05.464Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2016 OKRs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-2016-Q4-0.57\" /\u003e2016 Q4 \u003cspan style\u003d\"background-color:transparent;font-size:10pt;font-weight:normal;color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.57\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-Input-Performance-0.46\" /\u003eImprove Input Performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.46\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Hold-the-line-on-input-performance-P1-0.70Intervene-on-the-user-s-behalf-to-improve-scrolling-performance-wp-interventions-P1-0.45Drive-adoption-of-passive-event-listeners-P2-0.20Improve-Wheel-Scroll-Performance-P2-0.40Improve-timing-of-Event-Signaling-P3-\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003eHold the line on input performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIntervene on the user’s behalf to improve scrolling performance #wp-interventions \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.45\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive adoption of passive event listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove Wheel Scroll Performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove timing of Event Signaling \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFind and Fix Low-Hanging Performance Issues \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-real-world-input-performance-0.21\" /\u003eImprove understanding of real-world input performance \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.21\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Prototype-Input-Progressive-Web-Metrics-P1-0.20Improve-automated-input-performance-testing-infrastructure-P2-0.00Use-RAPPOR-to-collect-realtime-input-performance-based-on-websites-P2-0.50Measure-Impact-of-Extensions-on-Input-Performance-P4-0.00\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003ePrototype Input Progressive Web Metrics \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove automated input performance testing infrastructure \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUse RAPPOR to collect realtime input performance based on websites \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMeasure Impact of Extensions on Input Performance \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.56\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.56\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Layout-inert-URL-bar-P1-1.00Provide-the-tools-for-it-to-be-easier-to-deal-with-keyboard-input-P1-0.50Ship-ViewportAPI-P4-0.00Ship-CSSOM-Smooth-Scroll-P2-0.30document.rootScroller-P2-0.50Implement-overscroll-action-API-P2-0.80Implement-ScrollCustomization-A\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003eLayout-inert URL bar \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eProvide the tools for it to be easier to deal with keyboard input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip ViewportAPI \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip CSSOM Smooth Scroll \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003edocument.rootScroller \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement overscroll-action API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement ScrollCustomization API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive the Adoption of history.scrollRestoration \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTouch Adjustment - Investigate and propose a solution \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-Interoperability-of-Input-Events-amongst-major-browser-engines-0.86\" /\u003eImprove Interoperability of Input Events amongst major browser engines \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.86\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-PointerEvents:-Successful-launch-in-M55-stable.-P1-1.00PointerEvents:-W3C-Spec-Tests-P2-1.00Test-and-address-interoperability-issues-in-the-UI-Event-Spec-P2-0.50Historical-Points-API-P3-0.60Successfuly-Ship-auxclick-in-M55-P3-1.00\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003ePointerEvents: Successful launch in M55 stable. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePointerEvents: W3C Spec \u0026amp; Tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTest and address interoperability issues in the UI Event Spec \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eHistorical Points API \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSuccessfuly Ship auxclick in M55 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Product-Excellence-0.72\" /\u003eProduct Excellence \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.72\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-Material-Design-overlay-scrollbars-P1-0.70Be-responsive-to-our-users-concerns-P1-0.90Ship-Scroll-anchoring-P1-1.00Enable-input-automation-of-individual-pointers-P1-0.70Using-WebDriver-for-automated-testing-with-input-P1-0.30Quantify-causes-of-Hung-Ren\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003eShip Material Design “overlay” scrollbars \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eBe responsive to our users concerns \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip Scroll anchoring \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable input automation of individual pointers \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUsing WebDriver for automated testing with input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eQuantify causes of Hung Renderer Crashes when it is completely idle \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIgnore clicks on recently-moved iframes (crbug.com/603193) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePointerEvents: Reduce bug backlog for mouse \u0026amp; touch \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.85\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePointerEvents: Improve stylus support \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified OSK viewport behavior between Android and CrOS \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-Input-Code-Health-0.29\" /\u003eImprove Input Code Health \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.29\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Remove-Artificial-Layering-in-the-Input-Pipeline-P2-0.60Consolidate-pointer-type-events-in-Chromium-P2-0.00Overhaul-Chrome-Autoscroll-P2-0.00Mojoifcation-Architecture-Salamander-P3-0.00Make-Keyboard-scroll-events-to-be-gesture-based-events-P4-0.00Use-Prope\" /\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:12px\"\u003e\u003cdiv\u003eRemove Artificial Layering in the Input Pipeline \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConsolidate pointer-type events in Chromium \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eOverhaul Chrome Autoscroll \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMojoifcation Architecture (Salamander) \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake Keyboard scroll events to be gesture based events \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eUse Proper Time Types for Events\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-2016-Q3-0.65\" /\u003e2016 Q3 \u003cspan style\u003d\"background-color:transparent;font-size:10pt;font-weight:normal;color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-input-performance-0.74\" /\u003eImprove input performance \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.74\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-No-regressions-in-key-metrics-that-last-more-than-a-single-milestone-P1-0.80Force-touchstart-event-listeners-to-be-passive-during-fling-by-M54-behind-finch-trial-P1-1.00Launch-root-scroller-intervention-behind-a-finch-trial-in-M54-P1-1.00Ratchet-up-root-sc\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eNo regressions in key metrics that last more than a single milestone \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eForce touchstart event listeners to be passive during fling by M54 (behind finch trial) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLaunch root scroller intervention behind a finch trial in M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRatchet up root scroller intervention to 100% before end of quarter \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd intervention forcing event listeners to be passive for unresponsive main thread (Finch trial in M54) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEliminate multiple queuing points for mouse and touch events and deliver most up to date information \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement RAF aligned input on the main thread as an runtime enabled feature \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDraft design doc for VSync aligned compositor input handling \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement VSync aligned input for compositor gesture scroll and pinch behind finch trial \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAnalyze VSync aligned compositor input performance metrics from finch trial data \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce the 99'th percentile of first gesture scroll update latency on Nexus 5 by 30% on the best finch trial \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFind owners for 5 issues discovered through current input latency perf report \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip scroll latching for touchpad behind a flag on all platforms \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-real-world-input-performance-0.63\" /\u003eImprove understanding of real-world input performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.63\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Author-document-precisely-describing-Progressive-Web-Metric-for-estimated-input-latency-P1-0.70Progressive-Web-Metric-for-estimated-input-latency-landed-in-at-least-1-form.-P2-0.80Share-data-on-the-realism-reproducibility-tradeoff-in-telemetry-input-tests.\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eAuthor document precisely describing Progressive Web Metric for estimated input latency \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eProgressive Web Metric for estimated input latency landed in at least 1 form. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShare data on the realism / reproducibility tradeoff in telemetry input tests. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRun all of the current touch event latency reports on Chrome Trace Processor \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement TBMv2 versions of touch input telemetry metrics \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet touchpad scroll latency regressions as actionable as touch scroll regressions \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eProgressive Web Metric for time to interactive landed in at least 1 form. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.45\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.45\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Complete-Root-Scrollers-implementation-behind-a-flag-in-M54-P1-0.80Create-compelling-demo-showing-benefit-of-RootScroller-API-and-publish-it-with-devrel-P3-0.50Ship-API-to-expose-visual-viewport-information-to-developers-in-M54-P1-0.60Investigate-touch-adj\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eComplete Root Scrollers implementation behind a flag in M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eCreate compelling demo showing benefit of RootScroller API and publish it with devrel \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip API to expose visual viewport information to developers in M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eInvestigate touch adjustment and find a solution to coordinate touch events and click event \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement position:device-fixed behind a flag for M55 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip non-layout affecting URL bar in M55 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDraft spec on method for developers to control which virtual keyboard is shown \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip API to control Chrome pull-to-refresh nav gesture behind a flag in M55 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[Stretch] Contribute history.scrollRestoration patch to Webkit \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-Interoperability-of-Input-Events-amongst-major-browser-engines-0.78\" /\u003eImprove Interoperability of Input Events amongst major browser engines \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.78\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Ship-non-primary-button-click-event-in-M54-P2-0.90Update-InputEvent-implementation-and-design-doc-based-on-the-currently-published-specification-by-M54-P2-0.80Continue-implementing-the-simple-rich-text-editor-using-ContentEditable-and-InputEvent-P2-0.80Rem\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eShip non-primary button click event in M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate InputEvent implementation and design doc based on the currently published specification by M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eContinue implementing the simple rich text editor using ContentEditable and InputEvent \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRemove keyIdentifier from Blink in M54 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRemove coordinates from TouchEvent [WebKit] \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Product-Excellence-0.76\" /\u003eProduct Excellence \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.76\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Maintain-Burndown-of-Hotlist-Input-Dev-by-closing-15-more-issues-than-were-incoming-rate-P1-0.90End-quarter-with-no-P0-P1-issues-that-we-started-the-quarter-with-P1-1.00Input-Dev-PE-FixIt-Week-in-August-P2-1.00Triage-all-new-Blink-Input-Blink-Scroll-issues\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eMaintain Burndown of Hotlist-Input-Dev by closing 15 more issues than were incoming rate \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnd quarter with no P0,P1 issues that we started the quarter with \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eInput-Dev PE FixIt Week in August \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage all new Blink\u0026gt;Input, Blink\u0026gt;Scroll issues within 7 days \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eScroll anchoring - shippable prototype and WICG spec with initial round of feedback \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConduct analysis and add necessary information to drive resolution to Renderer Hung Crashes \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove touchpad user experience on Windows devices \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified OSK viewport behavior between Android and CrOS for M55 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Improve-Input-Code-Health-0.55\" /\u003eImprove Input Code Health \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.55\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Combine-PlatformEvent-and-WebInputEvent-P2-0.30WebMouseEvent-becoming-a-pointer-event-API:-design-doc-on-an-incremental-impl-plan-land-initial-patches-P3-1.00Improve-TouchEventQueue-sync-with-renderer-P4-0.00Create-minimally-plumb-PlatformPointerEvent-P4-0\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eCombine PlatformEvent and WebInputEvent \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eWebMouseEvent becoming a pointer event API: design doc on an incremental impl plan, land initial patches \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove TouchEventQueue sync with renderer \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eCreate \u0026amp; minimally plumb PlatformPointerEvent \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefactor mouse code out of EventHandler \u0026amp; its submodules into MouseEventManager \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake PointerEvents the driver for mouse code in EventHandler \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUse better types for time for Events in blink \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-PointerEvent-API-is-ready-to-ship-0.91\" /\u003ePointerEvent API is ready to ship \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.91\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Analyze-compatibility-with-Edge-for-25-sites-using-pointer-events-1.00Run-a-Finch-trial-with-PointerEvents-enabled-P1-1.00Hackathon-MS-P1-1.00Share-implicit-pointer-capture-compat-data-and-our-proposed-plan-with-PEWG-P1-1.00Consensus-in-PEWG-on-the-precise\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eAnalyze compatibility with Edge for 25 sites using pointer events \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRun a Finch trial with PointerEvents enabled \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eHackathon@MS \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShare implicit pointer capture compat data and our proposed plan with PEWG \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConsensus in PEWG on the precise design Chrome should try shipping (covered by open PRs) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive committing fixes for 20 PEWG spec issues via participation in github and regular calls \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eResolve all P0 and P1 launch blocking bugs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eW3C PointerEvent Tests: Complete automation through script injection \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eW3C PointerEvent Tests: Run on all platforms with all pointer types, report the outcome to PEWG \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.99\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eW3C PointerEvent Tests: land 10 pull requests in github to improve test coverage/quality \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePointerEvents fully automatable without the use of event sender \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSupport fractional co-ordinates in PointerEvents, update Blink MouseEvent as needed \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eStylus low level events: all events received in Blink for Mac, Windows and CrOS \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eStylus properties: complete plumbing of tilt \u0026amp; pressure for Windows, CrOS, Android and Mac \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eCreate a doc on consistent stylus interactions \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSTRETCH: Turn pointer events on by default on trunk \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans\"\u003e\u003ca name\u003d\"TOC-Drive-adoption-of-passive-event-listeners-0.36\" /\u003eDrive adoption of passive event listeners \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.36\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans\"\u003e\u003ca name\u003d\"TOC-Reduce-fraction-of-touch-events-unnecessarily-blocking-scroll-from-43-to-35-P1-0.00Add-ability-to-discover-scroll-blocking-event-handlers-easy-in-devtools-P2-0.00\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cdiv\u003eReduce fraction of touch events unnecessarily blocking scroll from 43% to 35% \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd ability to discover scroll blocking event handlers easy in devtools \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-2016-Q2-0.66\" /\u003e2016 Q2 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.66\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-scroll-latency-and-smoothness-0.50\" /\u003eImprove scroll latency and smoothness \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-No-regressions-in-key-metrics-that-last-more-than-a-single-milestone-P1-1.00Reach-data-driven-consensus-on-plan-for-touch-scrolling-intervention-replacing-touch-ACK-timeout-P1-0.70Ship-initial-conservative-touch-scrolling-intervention-via-Finch-by-M53-P1-0\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eNo regressions in key metrics that last more than a single milestone \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReach (data-driven) consensus on plan for touch scrolling intervention (replacing touch ACK timeout) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip initial conservative touch scrolling intervention via Finch by M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake touchstart events during fling nonblocking by M53 (behind finch trial) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce the 99'th percentile of first gesture scroll update latency on Nexus 5 by 30% \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd DevTools Support for Passive Event Listeners by M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFix 3 smooth scroll performance bugs by M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement vsync aligned gestures in M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement vsync aligned touch input in M53 [Stretch] \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-real-world-input-performance-0.73\" /\u003eImprove understanding of real-world input performance \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.73\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Measure-efficiency-gain-and-breakage-caused-by-5-possible-touch-scrolling-intervention-approaches.-P1-0.65Expose-touch-scroll-latency-information-through-devtools-by-M53-P1-1.00Add-non-scrolling-input-performance-metrics-by-M53-P2-1.00Improve-on-the-curren\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eMeasure efficiency gain and breakage caused by 5 possible touch scrolling intervention approaches. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExpose touch scroll latency information through devtools by M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd non-scrolling input performance metrics by M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove on the current touch event latency reports \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEvaluate and Implement strategy for not calculating event path, and dispatching event if no listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.35\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.35\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-non-Document-root-scrollers-implementation-complete-behind-a-flag-in-M52-P1-0.30Ship-non-layout-affecting-top-control-resizes-in-M53-P3-0.00Ship-API-to-expose-visual-viewport-information-to-developers-in-M52-P2-0.70Ship-unified-OSK-viewport-behavior-betwee\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003enon-Document root scrollers implementation complete (behind a flag) in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip non-layout-affecting top control resizes in M53 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip API to expose visual viewport information to developers in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip unified OSK viewport behavior between Android and CrOS for M53 \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDraft spec on method for developers to control which virtual keyboard is shown \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDesign for ignoring clicks on iframes that have moved recently \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement position:device-fixed (behind a flag) as a way to attach elements to the visual viewport \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDraft spec an API to control Chrome pull-to-refresh nav gesture behind a flag \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eContribute history.scrollRestoration patch to Webkit \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-Interoperability-of-Input-Events-amongst-major-browser-engines-0.81\" /\u003eImprove Interoperability of Input Events amongst major browser engines \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.81\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Implement-InputEvent-beforeinput-behind-a-flag-based-on-the-provisional-specification-in-M52-P1-0.90Implement-InputEvent-input-behind-a-flag-based-on-the-provisional-specification-in-M53-P1-0.80Make-pointer-event-tests-automatically-run-on-Chrome-on-all-pl\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eImplement InputEvent beforeinput (behind a flag) based on the provisional specification in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement InputEvent input (behind a flag) based on the provisional specification in M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake pointer event tests automatically run on Chrome on all platforms \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd low level touch event API to Chromedriver in M53 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFix 8 Keyboard related interop bugs in backlog \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMake sure the order of composition events and input events matches spec in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eContribute WebPlatform Tests for Editing beforeinput/input and composition events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement HTMLSelect ability to programmatically open in M52 behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable non-manual uievents and domevents webplatform tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eInvestigate in re-using Touch instances as Safari does \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDeprecate executing default action on Untrusted events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement a simple rich text editor using ContentEditable and InputEvent \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Product-Excellence-0.85\" /\u003eProduct Excellence \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.85\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-End-quarter-with-no-P0-P1-s-older-than-90-days-P1-0.80Triage-all-new-Blink-Input-Blink-Scroll-bugs-within-7-days-P1-1.00Scroll-anchoring---shippable-prototype-and-WICG-spec-with-initial-round-of-feedback-P1-0.50Increase-burndown-of-issues.-Close-10-more-ho\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnd quarter with no P0,P1's older than 90 days \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage all new Blink-Input, Blink-Scroll bugs within 7 days \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eScroll anchoring - shippable prototype and WICG spec with initial round of feedback \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIncrease burndown of issues. Close 10 more hotlist input dev bugs than the incoming rate. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip stricter user gestures for touch intervention in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAll Hotlist\u003dInput-Dev bugs with \u0026gt;\u003d 15 stars have an OWNER \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-Input-Code-Health-0.551\" /\u003eImprove Input Code Health \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.55\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Refactor-EditorCommand-to-use-an-enum-class-in-M52-P2-1.00Propose-and-Implement-removal-of-WebInputEvent----PlaformEvent-conversion-P2-0.30Refactor-IME-keyboard-event-generation-code-to-be-common-across-all-platforms-P4-0.00Improve-situation-around-Blink-s\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eRefactor EditorCommand to use an enum class in M52 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePropose and Implement removal of WebInputEvent \u0026lt;--\u0026gt; PlaformEvent conversion \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefactor IME keyboard event generation code to be common across all platforms \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove situation around Blink scroll offset type \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefactor main thread touch and wheel scrolling paths to use scroll customization machinery \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove usage of time unit types for event timestamp \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eConsensus on a plan for WebMouseEvent to become a pointer event API. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove TouchEventQueue sync with renderer \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDesign a modular EventHandler \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate MouseEvent (and so PointerEvent) to support fractional co-ordinates. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.25\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-PointerEvent-API-is-feature-complete-with-major-developers-concerns-addressed.-0.80\" /\u003ePointerEvent API is feature-complete with major developers' concerns addressed. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fix-redundant-pointercancel-bug-with-touch-action-in-M51.-P0-0.90Enable-developers-testing-of-PointerEvent-in-M52-address-community-feedback.-P0-1.00Fix-interaction-issues-between-PE-s-explicit-capture-TE-s-implicit-capture.-P1-1.00Analyze-compatibility-wi\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFix redundant pointercancel bug with touch-action in M51. \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP0\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable developers’ testing of PointerEvent in M52, address community feedback. \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP0\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eFix interaction issues between PE's explicit capture \u0026amp; TE's implicit capture. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAnalyze compatibility with Edge for top 20 sites using pointer events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eDrive the open PEWG spec issues down from 21 to 10 via participation in github and regular calls. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShare implicit pointer capture compat data and our proposed plan with WG. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.25\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImprove test infrastructure \u0026amp; coverage \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eCreate a doc on consistent stylus interactions. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eBlink is receiving all stylus events on 2 platforms by EOQ \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Drive-adoption-of-passive-event-listeners-0.51\" /\u003eDrive adoption of passive event listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.51\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Reduce-fraction-of-touch-events-unnecessarily-blocking-scroll-from-47-to-30-P0-0.15Publish-usage-guidance-with-assistance-from-DevRel-in-time-for-M51-stable-release-P1-1.00Get-4-major-partners-to-make-their-touch-listeners-passive-P0-0.20Land-the-EventList\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eReduce fraction of touch events unnecessarily blocking scroll from 47% to 30% \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP0\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.15\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePublish usage guidance with assistance from DevRel in time for M51 stable release \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet 4 major partners to make their touch listeners passive \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP0\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLand the EventListenerOptions feature detect in Modernizr \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePassive touch listeners are promoted at Google I/O \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd chrome://flags entry forcing all touch listeners (or all page-wide touch listeners) to be passive \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003ePublish comparison of real world scroll start performance with passive listeners and blocking listeners \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-2016-Q1-0.60\" /\u003e2016 Q1 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-scroll-latency-and-smoothness-0.65\" /\u003eImprove scroll latency and smoothness \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Ship-Passive-Event-Listeners-in-M50-P0-0.90Land-passive-event-listener-interop-tests-in-web-platform-test-P2-0.004-important-external-partners-actively-experimenting-with-passive-event-listeners-P2-0.20Reach-data-driven-consensus-on-plan-for-touch-scrollin\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eShip Passive Event Listeners in M50 \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP0\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.90\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLand passive event listener interop tests in web-platform-test \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e4 important external partners actively experimenting with passive event listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReach (data-driven) consensus on plan for touch scrolling intervention (replacing touch ACK timeout) \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eGet consensus on TouchEvents spec change for async touchmove and passive listeners \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLand performance optimization for passive wheel listeners \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-real-world-input-performance-0.62\" /\u003eImprove understanding of real-world input performance \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.62\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Add-non-scrolling-input-performance-metrics-P1-0.60Use-slow-reports-to-measure-efficiency-gain-and-breakage-caused-by-possible-touch-ack-timeout-approaches.-P1-0.20Expose-touch-scroll-latency-information-through-devtools-P1-0.20Quantify-our-objective-of-fi\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eAdd non-scrolling input performance metrics \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUse slow reports to measure efficiency gain and breakage caused by possible touch ack timeout approaches. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExpose touch scroll latency information through devtools \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eQuantify our objective of fixing scroll blocking \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExpose hardware input timestamps to the web \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUse slow reports to generate initial breakdown of where input handling logic spends time \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd touch scroll latency metric measuring until estimated vsync time (STRETCH) \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Eliminate-key-developer-pain-points-around-input-0.61\" /\u003eEliminate key developer pain points around input \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.61\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fix-at-least-100-Hotlist-InputDev-bugs-P1-1.00Triage-any-new-Blink-Input-Blink-Scroll-bug-within-7-days-P1-1.00Solution-to-non-document-root-scroller-problem-landed-behind-a-flag-in-M51-P1-0.25Implement-unified-OSK-viewport-behavior-between-Android-and-CrO\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFix at least 100 Hotlist-InputDev bugs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage any new Blink-Input, Blink-Scroll bug within 7 days \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSolution to non-document root scroller problem landed behind a flag in M51 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.25\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement unified OSK viewport behavior between Android and CrOS for M50 behind a flag \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eProvide a way for developers to attach elements to the visual viewport \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLand change to top control resizes to be more user friendly and Safari compatible in M50 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.25\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[STRETCH] Spec an API to control Chrome pull-to-refresh nav gesture behind a flag \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSpec an API to expose visual viewport information to developers \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-input-interoperability-between-major-browser-engines-0.65\" /\u003eImprove input interoperability between major browser engines \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Enable-automated-input-testing-on-Chrome-for-W3C-web-platform-tests-P1-0.35Ship-KeyboardEvent.key-P1-1.00Reduce-UI-Events-spec-bug-count-to-under-25-P2-Reach-consensus-across-vendors-on-an-updated-plan-for-ScrollTopLeftInterop-P4-0.00Triage-all-Hotlist-Int\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eEnable automated input testing on Chrome for W3C web-platform-tests \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.35\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShip KeyboardEvent.key \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReduce UI Events spec bug count to under 25 \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003c/div\u003e\u003cdiv\u003eReach consensus across vendors on an updated plan for ScrollTopLeftInterop \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP4\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eTriage all Hotlist-Interop bugs and find appropriate owners every week \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.70\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eLand scroll restoration interop tests in web-platform-test \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate HTMLSelectElement.open proposal and get buy in from other vendors. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-PointerEvent-API-implementation-is-feature-complete-0.53\" /\u003ePointerEvent API implementation is feature-complete \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.53\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Fix-redundant-pointercancel-bug-with-touch-action.-P1-0.65Enable-developers-testing-of-PointerEvent-address-community-feedback.-P2-0.20Implement-explicit-pointer-capture-support.-P1-0.75Report-to-WG-the-outcome-of-all-w3c-tests-except-the-ones-for-pointer-\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eFix redundant pointercancel bug with touch-action. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.65\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eEnable developers’ testing of PointerEvent, address community feedback. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eImplement explicit pointer capture support. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP1\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.75\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eReport to WG the outcome of all w3c tests except the ones for pointer capture. \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.80\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eMeasure compatibility with Edge for top 20 sites using pointer events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.10\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eShare implicit pointer capture compat data and our proposed plan with WG. \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eUpdate MouseEvent (and so PointerEvent) to support fractional co-ordinates \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAdd pointer event handler tracking \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-support-for-text-input-via-IMEs-0.40\" /\u003eImprove support for text input via IMEs \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Implement-and-ship-InputEvent-P2-0.60Complete-specification-for-input-and-beforeinput-events-P2-Implement-beforeInput-behind-a-flag-for-Linux-P2-0.30Contribute-WebPlatform-Tests-for-Editing-beforeinput-input-and-composition-events-P2-0.30\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eImplement and ship InputEvent \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.60\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eComplete specification for input and beforeinput events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003c/div\u003e\u003cdiv\u003eImplement beforeInput (behind a flag) for Linux \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eContribute WebPlatform Tests for Editing beforeinput/input and composition events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.30\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003ch3 style\u003d\"margin-bottom:0px;font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Improve-input-code-health-0.50\" /\u003eImprove input code health \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.50\u003c/span\u003e\u003c/h3\u003e\u003ch2 style\u003d\"font-family:sans;line-height:19.2px\"\u003e\u003ca name\u003d\"TOC-Refactor-MouseWheel-scroll-events-to-be-gesture-based-events-P2-1.00Extend-WebMouseEvent-to-become-a-pointer-event-API-P2-0.00Remove-logic-for-touch-scroll-chaining-P3-0.20Complete-both-outstanding-viewport-refactorings-P3-0.00Refactor-necessary-code-for-i\" /\u003e\u003cdiv style\u003d\"font-size:12px;font-weight:normal;line-height:19.2px\"\u003e\u003cdiv\u003eRefactor MouseWheel scroll events to be gesture based events \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eExtend WebMouseEvent to become a pointer event API \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRemove logic for touch scroll chaining \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.20\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eComplete both outstanding viewport refactorings \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP3\u003c/span\u003e \u003cspan style\u003d\"color:rgb(214,18,18);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.00\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefactor necessary code for input to actually send InputEvent from Editing specification \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e0.40\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefactor Event.dispatchEvent to return an enumeration \u003cspan style\u003d\"color:rgb(238,170,68);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003eP2\u003c/span\u003e \u003cspan style\u003d\"color:rgb(44,132,44);display:inline-block;font-weight:bold;padding:0.3em;height:1.2em;margin-left:1em\"\u003e1.00\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7561957394737716009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/input-dev/input-objectives/2016-okrs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8771571264856853467"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8771571264856853467"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8771571264856853467"}],"author":[{"name":{"$t":"Dave Tapuska"},"email":{"$t":"dtapuska@chromium.org"}}],"sites$pageName":{"$t":"2016-okrs"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1361065732704714076"},"published":{"$t":"2008-08-30T01:55:51.887Z"},"updated":{"$t":"2017-04-20T20:41:43.762Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-20T20:41:42.184Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Sandbox FAQ"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-This-page-has-moved-to-the-source-code-docs.\" /\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox_faq.md\" style\u003d\"background-color:transparent;font-weight:normal;font-size:13.3333px\"\u003eThis page has moved to the source code docs.\u003c/a\u003e\u003c/h4\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8604151105040058686"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sandbox/Sandbox-FAQ"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1361065732704714076"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1361065732704714076"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1361065732704714076"}],"author":[{"name":{"$t":"Kathy Walrath"},"email":{"$t":"kathyw@google.com"}}],"sites$pageName":{"$t":"Sandbox-FAQ"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"WSl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8604151105040058686"},"published":{"$t":"2008-08-29T23:55:14.072Z"},"updated":{"$t":"2017-04-20T20:40:51.734Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-20T20:40:50.155Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Sandbox"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md\" style\u003d\"font-size:13.3333px\"\u003eThis page has moved to the source code docs.\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sandbox"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8604151105040058686"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8604151105040058686"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8604151105040058686"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"sandbox"},"sites$revision":{"$t":"30"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3509019633710034892"},"published":{"$t":"2010-12-02T17:21:44.273Z"},"updated":{"$t":"2017-04-20T20:40:07.694Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-20T20:40:05.879Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Startup"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/design/startup.md\" style\u003d\"font-size:13.3333px\"\u003eThis page has moved to the source code docs.\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/startup"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3509019633710034892"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3509019633710034892"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3509019633710034892"}],"author":[{}],"sites$pageName":{"$t":"startup"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1817819292508966921"},"published":{"$t":"2016-10-31T19:45:04.291Z"},"updated":{"$t":"2017-04-20T16:34:47.653Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-31T19:46:54.484Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Canvas team OKRs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Q4-2016\" /\u003eQ4 2016\u003c/h2\u003e\u003cdiv\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eShip OffscreenCanvas \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-performance\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-performance\u003c/a\u003e \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-ergonomics\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-ergonomics\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;list-style:none;color:rgb(102,102,102);line-height:16px;max-width:780px\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:17px\"\u003eLead: xlai\u003c/li\u003e\u003c/ul\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eimplement convertToBlob\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eMake placeholder canvas elements work as image sources (drawImage, toBlob, etc)\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eShip it in M57\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eThis includes achieving full spec conformance.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eMake a convincing performance demo, and support devrel with launch PR\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eLand the specification against whatwg\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eGet canvas filters to work in a Worker\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/fserb/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003efserb\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eMake OffscreenCanvas commit flow works in the Android WebView\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eWrite tests that verify that it works, fix if necessary.\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;display:block;height:21px;width:21px\"\u003e\u003cimg alt\u003d\"Copy\" src\u003d\"https://easyokrs.googleplex.com/images/copy.svg\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\" title\u003d\"Copy\" /\u003e\u003c/span\u003e\u003ca href\u003d\"https://easyokrs.googleplex.com/o/2361706/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none;display:block;height:21px;width:21px\"\u003e\u003cimg alt\u003d\"Link\" src\u003d\"https://easyokrs.googleplex.com/images/link.png\" style\u003d\"font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;vertical-align:baseline\" title\u003d\"Direct Link\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eOffscreenCanvas testing and tracking \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-predictability\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-predictability\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;list-style:none;color:rgb(102,102,102);line-height:16px;max-width:780px\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:17px\"\u003eLead: xidachen\u003c/li\u003e\u003c/ul\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eContribute to web platform tests\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eAchieve complete test coverage: Each statement in the spec should be covered by tests, with xrefs to the spec.\u003cbr /\u003eUpstream the tests to web platform tests repo, test other implementations for conformance\u003cbr /\u003eMain owner/coordinator is xidachen. xlai and junov are contributors.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eAdd telemetry performance tests for OffscreenCanvas\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMust cover commit() and ImageBitmap flows, cover all permutations of GPU/CPU rendering and compositing, run on GPU bots.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eAdd usage metrics histograms.\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMust track:\u003cbr /\u003e* OffscreenCanvas feature usage\u003cbr /\u003e* mode of operation (commit vs transferToImageBitmap)\u003cbr /\u003e* commit() code path\u003cbr /\u003e* CPU run time for each commit() code path (on the thread where commit is called)\u003cbr /\u003e* commit() latency (time elapsed from commit() call to UI compositor update)\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eHave the fastest implementation\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eWrite animometer-style benchmarks for OffscreenCanvas (commit and imageBitmap flows, 2D and WebGL). Compare to other implementations. Stay on top\u003cbr /\u003eMain owner/coordinator: xidachen. junov and xlai to contribute to fixing perf issues.\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003erequestAnimationFrame in Workers \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-ergonomics\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-ergonomics\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eImplement it\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eSpec it\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eShip it in M57\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eProduct excellence \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-health\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-health\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;list-style:none;color:rgb(102,102,102);line-height:16px;max-width:780px\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:17px\"\u003eLead: xidachen\u003c/li\u003e\u003c/ul\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eWeekly product excellence report\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003ePublish weekly report to chrome-canvas mailing list.\u003cbr /\u003eBug stats: outstanding bug count (number fixed, number of new bugs), list of high-profile outstanding bugs (crashers, security, regressions, highly starred, p0-p1), high profile bugs resolved since last report. Keep report history in a google doc.\u003cbr /\u003eDelegate reporting when on leave.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003ePerformance metrics report\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eTwice in the quarter, present to paint team show salient fluctuations in key performance metrics.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003ePrevent bug count from creeping up.\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/zakerinasab/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ezakerinasab\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003e(104 outstanding bugs as of October 5 2016)\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eRefactor Canvas and OffscreenCanvas dependencies on cc\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eMisc canvas features \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-ergonomics\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-ergonomics\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eMake experimental implementation of canvas colorspace work\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/zakerinasab/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ezakerinasab\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eExperimental implementation of text rendering in workers (stretch)\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/zakerinasab/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ezakerinasab\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003e0.5 for getting text to render using only the default font.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003eShip DOMMatrixInit-based canvas APIs (stretch)\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Q3-2016\" /\u003eQ3 2016\u003c/h2\u003e\u003cdiv\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eOffscreenCanvas feature complete \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-future\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-future\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.80\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003ecommit() flow working for 2D canvas\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: Stalled for about 3 weeks due to dependency on mojo improvements. Still on track for EOQ\u003cbr /\u003eEOQ status: Mostly implemented except software compositing cases\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.80\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003ecommit() flow working for WebGL\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: Not started, still possible by EOQ.\u003cbr /\u003eEOQ status: Mostly implemented except software compositing cases\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e1.00\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eGPU-accelerated 2D canvas in a worker\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: WIP CL almost done. On track.\u003cbr /\u003eEOQ status: done.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003e0.50\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP1\u003c/span\u003eFinish specification for OffscreenCanvas (rolled over from Q2)\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: iterated on proposal some more, still attainable by EOQ, moderate risk of slipping.\u003cbr /\u003eEOQ: Draft complete, not yet publicly shared.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.80\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eCanvas readback APIs + tainting for 2D\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003egetImageData + toBlob + toDataURL working on OffscreenCanvas on main thread + Workers (stretch)\u003cbr /\u003e\u003cbr /\u003eMid-quarter status: WIP, tainting for 2D completed, the rest partially implemented, at risk of slipping into Q4\u003cbr /\u003eEOQ status: done, except for toBlob which is not yet implemented\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;display:block;height:21px;width:21px\"\u003e\u003cimg alt\u003d\"Copy\" src\u003d\"https://easyokrs.googleplex.com/images/copy.svg\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\" title\u003d\"Copy\" /\u003e\u003c/span\u003e\u003ca href\u003d\"https://easyokrs.googleplex.com/o/2239617/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none;display:block;height:21px;width:21px\"\u003e\u003cimg alt\u003d\"Link\" src\u003d\"https://easyokrs.googleplex.com/images/link.png\" style\u003d\"font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;vertical-align:baseline\" title\u003d\"Direct Link\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(213,35,35)\"\u003e0.10\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eCanvas color space support \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-future\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-future\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;list-style:none;color:rgb(102,102,102);line-height:16px;max-width:780px\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:17px\"\u003eMid-quarter: Slow progress so far this Q, work on colorspace implementation is ramping up with \u003ca href\u003d\"https://teams.googleplex.com/zakerinasab\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ezakerinasab@\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(213,35,35)\"\u003e0.00\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003eConverge spec proposal\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eClose all unresolved issues about the proposal on the W3C WICG forum\u003cbr /\u003eMid-quareter status: No progress. Still attainable this Q\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(213,35,35)\"\u003e0.00\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eWrite spec (stretch)\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eCommit CanvasColorSpace spec against WHATWG HTML spec.\u003cbr /\u003eMid-quarter status: No progress, not likely this quarter.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(213,35,35)\"\u003e0.30\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP4\u003c/span\u003ePrototype/experimental implementation in Blink\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-qarter status: Partially landed. Experimental API is there, color space plumbing in the compositor is there, not functional due to several missing pieces in skia, blink and compositor.\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.74\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP1\u003c/span\u003eProduct Excellence \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-health\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-health\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.80\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003eReduce bug count\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eGo from 121 to under 100 open bugs (Type \u003d Bug + Bug-Regression + Bug-Security)\u003cbr /\u003eMid-quarter status: 106 outstanding bugs. On track!\u003cbr /\u003eEOQ status: 104 bugs.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP1\u003c/span\u003eResolve all memory leak-like issues related to canvas\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: Out of our hands: dependency on V8 team GC triggers.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.80\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP1\u003c/span\u003e2 week SLA on fixing crashers and security bugs\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xlai/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exlai\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: On track.\u003cbr /\u003eEOQ status: crasher 624718 is lagging behind. Otherwise we did good.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e1.00\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003e1 week SLA on triage\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: on track\u003cbr /\u003eEOQ: done.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003e0.50\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eBe the best browser for all canvas-related Animometer benchmark scores\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003e(Includes work by intern sebastienlc)\u003cbr /\u003eMid-quarter status: implemented but not enabled. Not on track because no one is currently owning follow-up on intern's work. Postponing.\u003cbr /\u003eEOQ status: some heuristic for falling back to SW have been implemented, thus preventing critical performance cliffs. Global approach is not ready to ship.\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003e0.60\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003eFix top starred issues\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwners: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e, \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003ecrbug.com/618324 - Experimental `imageSmoothingQuality` property doesn't provide expected quality\u003cbr /\u003ecrbug.com/7508 - We don't anti-alias \u0026lt;canvas\u0026gt; drawImage\u003cbr /\u003eMid-quarter status: 7508 is fixed, 618324 has been investigated but will probably not be fixed this quarter.\u003cbr /\u003eEOQ status: 1/2 bugs fixed + bonus bug 424291\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:Arial,Helvetica,sans-serif;font-size:13px;outline:0px;padding:0px 0px 16px 25px;vertical-align:baseline;max-width:780px;color:rgb(34,34,34)\"\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-size:16px;font-style:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(36,97,170);max-width:780px;line-height:18px\"\u003eMisc Features \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-future\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-future\u003c/a\u003e \u003ca href\u003d\"https://easyokrs.googleplex.com/search/?q\u003dwp-performance\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003e#wp-performance\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"border:0px;font-family:inherit;font-style:inherit;margin:0px;outline:0px;padding:0px 0px 2px;vertical-align:baseline;color:rgb(102,102,102);max-width:780px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px 50px 0px 0px;vertical-align:baseline\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/chrome-canvas/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003echrome-canvas\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:8px 0px 0px;outline:0px;padding:0px 0px 6px 22px;vertical-align:baseline;list-style:square;clear:right;line-height:16px;max-width:758px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.70\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003eP3\u003c/span\u003eShip ImageBitmap resize\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/xidachen/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003exidachen\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: on track\u003cbr /\u003eEOQ staus: implementation complete, but not shipped\u003c/li\u003e\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline\"\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:4px 0px 0px;vertical-align:baseline;line-height:17px\"\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(23,152,0)\"\u003e0.90\u003c/span\u003e\u003cspan style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;float:right;text-align:right;width:50px;color:rgb(255,165,0)\"\u003eP2\u003c/span\u003eShip ImageSmoothingQuality\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eOwner: \u003ca href\u003d\"https://easyokrs.googleplex.com/view/junov/\" style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline-style:initial;outline-width:0px;padding:0px;vertical-align:baseline;color:rgb(102,17,204);text-decoration:none\"\u003ejunov\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"border:0px;font-family:inherit;font-style:inherit;font-weight:inherit;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:16px;color:rgb(102,102,102);list-style:none\"\u003eMid-quarter status: done, but there are outstanding complaint about the quality of the mipmaps used for high quality filtering.\u003c/li\u003e\u003c/span\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3545069394357994158"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/paint-team/canvas-okrs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1817819292508966921"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1817819292508966921"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1817819292508966921"}],"author":[{"name":{"$t":"Chris Harrelson"},"email":{"$t":"chrishtr@chromium.org"}}],"sites$pageName":{"$t":"canvas-okrs"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"USl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5684463788987455829"},"published":{"$t":"2015-01-16T19:23:50.292Z"},"updated":{"$t":"2017-04-20T16:34:23.166Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-10T00:22:47.697Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Roadmap / Potential Projects"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;width:100ex\"\u003e\r\n\r\n\u003cp style\u003d\"margin-top:0\"\u003eList of potential future projects (aka wishlist) for the layout team.\u003cbr /\u003e\r\nRelative priority in square brackets, based on impact, cost of implementing and feedback from real-world web sites and web app teams.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-In-Scope-Projects\" /\u003eIn Scope Projects\u003c/h2\u003e\r\n\u003cp\u003e\r\n The backlog is now maintained in monorail, please see the \u003ca href\u003d\"https://bugs.chromium.org/u/3593919584/hotlists/layout-backlog\"\u003elayout-backlog\u003c/a\u003e hotlist.\u003c/p\u003e\u003cul\u003e\u003cul\u003e\r\n \u003c/ul\u003e\r\n\u003c/ul\u003e\r\n\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Out-of-Scope\" /\u003eOut of Scope\u003c/h2\u003e\r\n\u003cp\u003e\r\n Potential projects that have been considered and rejected as being out-of-scope, either due to the projects itself being premature, due to it being better suited for a different team, or not considered important enough at the moment.\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n \u003cli\u003e\r\n Viewporting and Infinite lists\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eToo early, silk TLs need to discuss this further.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n String of HTML into Fragment\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eThis is job of scheduler team.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n When layout happens, calcDrawProps and sendInvalidations runs long\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eFalls onto the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/paint-team\"\u003epaint team\u003c/a\u003e.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n Repaint storm elimination \u0026amp; invalidation\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eTackled by \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/slimming-paint\"\u003eSlimming Paint\u003c/a\u003e.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n UIWorker / Animation Proxy\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eToo early, silk TLs need to discuss this further.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n Expose what triggered a layout in devtools\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eShow in devtools which line of JS caused a layout, which nodes generated an invalidation, why it took as long as it did. Falls on the devtools team.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n Element \u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1BmS4vT5RtTxg_HH_33bU1PNwVZR4ZsNpOagWjEsETA8/edit\"\u003eonPaint\u003c/a\u003e callback\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eFalls on the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/paint-team\"\u003epaint team\u003c/a\u003e.\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n HTML Canvas\u003cbr /\u003e\r\n \u003cspan style\u003d\"color:grey\"\u003eFalls on the GPU or graphics team.\u003c/span\u003e\r\n \u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250862627189304315"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/potential-projects"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5684463788987455829"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5684463788987455829"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5684463788987455829"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"potential-projects"},"sites$revision":{"$t":"18"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1431553706261646411"},"published":{"$t":"2016-01-24T23:36:52.235Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-24T23:38:37.648Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2016 Q1"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n \u003cp style\u003d\"margin-top:0\"\u003eList of objectives and key results for 2016 Q1.\u003c/p\u003e\r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n \u003cul\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex;border-bottom:1px solid black;list-style:none\"\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:60ex;vertical-align:top;font-weight:bold\"\u003eObjective / Key Result\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;font-weight:bold\"\u003eOwner(s)\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;text-align:right;font-weight:bold\"\u003eStatus\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Measure and improve performance\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip CSS Containment as experimental feature to stable.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eGather data on number of third party iframes loaded but never viewed.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eszager\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eCollect metrics and do analysis on forced layouts.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eStretch: Reduce number of forced layouts for one common trigger.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip intersection observer to stable.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eojan, szager\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Interop (Interoperability, Compatibility, Conformance)\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eSpec for custom layout.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eblink-houdini, ikilpatrick\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFinish up worklet implementation.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eblink-houdini, ikilpatrick\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eSocialize resize observers specification.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eatotic\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eCollect data on percentage margin usage.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip updated absolute position behavior for flexbox to stable.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r5\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUpstream 75% of our flexbox test to w3c.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r6\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eMake progress on text autosizing spec\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003epdr\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r7\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eEvangelize CSS containment and get another browser to commit to it.\u003c/a\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw, shanestephens\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Code health\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRoot layer scrolling passing all unit tests.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eskobes\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eDesign doc for internal layout api\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eLine layout API analysis document\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edgrogan, pilgrim\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eStretch: Ruby on top of custom layout as experimental web platform feature on trunk.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip emoji \u0026amp; punctuation fallback overhaul on all platforms.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r5\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFeasibility study for replacing flipped blocks writing mode implementation.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ewkorman\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Product excellence\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip improved web typography to beta.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eTriage all incoming bug reports within one week and eliminate backlog.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFix all new P1 bug reports within one release.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eStart to make vertical rhythm on the web easier.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003ePrototype scroll anchoring on layout.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eskobes\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n \u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r0\"\u003eShip CSS Containment as experimental feature to stable.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r1\"\u003eGather data on number of third party iframes loaded but never viewed.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eszager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r2\"\u003eCollect metrics and do analysis on forced layouts.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r3\"\u003eStretch: Reduce number of forced layouts for one common trigger.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eCommon triggers include:\r\n- I'm an iframe and need to know my size (clientHeight/width)\r\n- I'm an iframe or component and need to know if i'm visible. (scrollTop, etc)\r\n- I want to lazyload images or components when the user gets closer (scrollTop)\r\n- I'm a metrics script and need to report the window size (window.clientWidth, etc)\r\n- I need to set my dimensions based on the computed width/height of something else. (clientHeight/Width)\r\n- Need to set focus(), because new component is active. (elem.focus())\r\n- I'm jQuery or Modernizr and use computed style to identify features or bugs. \u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r4\"\u003eShip intersection observer to stable.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eojan, szager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eStretch: pay down technical depth by moving things to use the intersection observer infrastructure, such as:\r\n- render throttling for offscreen\r\n- video auto play\r\n\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r0\"\u003eSpec for custom layout.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eblink-houdini, ikilpatrick\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r1\"\u003eFinish up worklet implementation.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eblink-houdini, ikilpatrick\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eHelp Audio \u0026amp; CW folks transition as needed.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r2\"\u003eSocialize resize observers specification.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eatotic, blink-houdini\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r3\"\u003eCollect data on percentage margin usage.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r4\"\u003eShip updated absolute position behavior for flexbox to stable.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r5\"\u003eUpstream 75% of our flexbox test to w3c.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r6\"\u003eMake progress on text autosizing spec\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003epdr\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e(20% project)\r\nhttps://docs.google.com/document/d/1hlg1TworBMsvSMdLz4n5DxFr8Bex7S8eB_p0GpFrdVU/edit\r\n\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r7\"\u003eEvangelize CSS containment and get another browser to commit to it.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eblink-houdini, leviw, shanestephens\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r0\"\u003eRoot layer scrolling passing all unit tests.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r1\"\u003eDesign doc for internal layout api\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eIncluding feasibility study for supporting a custom-layout style API in conjunction with our legacy layout implementation.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r2\"\u003eLine layout API analysis document\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edgrogan, leviw, pilgrim\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eHave an analysis document detailing the current organic API and a plan for transitioning towards the API we'd like. \r\nMake decision, based on document, whether the exercise was useful and if so if we should continue with the rest of the layout API.\r\n\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r3\"\u003eStretch: Ruby on top of custom layout as experimental web platform feature on trunk.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r4\"\u003eShip emoji \u0026amp; punctuation fallback overhaul on all platforms.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r5\"\u003eFeasibility study for replacing flipped blocks writing mode implementation.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ewkorman\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r0\"\u003eShip improved web typography to beta.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e- OpenType Enabling - smcp,\r\n- Enable all font-feature-settings and font-variant-* CSS\r\n- CSS font-synthesis attribute (faux bold \u0026amp; italics control) \u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r1\"\u003eTriage all incoming bug reports within one week and eliminate backlog.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r2\"\u003eFix all new P1 bug reports within one release.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eThis is a bit o a stretch given that we don't yet have a team-wide definition of a P1 bug but nevertheless it is something we really should try to do!\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r3\"\u003eStart to make vertical rhythm on the web easier.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003ehttps://github.com/kojiishi/snap-height\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r4\"\u003ePrototype scroll anchoring on layout.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003ecrbug.com/558575 - user facing feature and a prerequisite for many potential user agent interventions.\u003c/p\u003e\r\n \u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2016q1"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1431553706261646411"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1431553706261646411"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1431553706261646411"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"2016q1"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5316223471866019996"},"published":{"$t":"2015-12-01T01:01:04.572Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-13T16:59:00.840Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2015 Q4"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n \u003cp style\u003d\"margin-top:0\"\u003eList of objectives and key results for 2015 Q4.\u003c/p\u003e\r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n \u003cul\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex;border-bottom:1px solid black;list-style:none\"\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:60ex;vertical-align:top;font-weight:bold\"\u003eObjective / Key Result\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;font-weight:bold\"\u003eOwner(s)\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;text-align:right;font-weight:bold\"\u003eScore\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n RAIL (Measuring User Experience)\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip CSS containment to beta\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:orange\"\u003e0.60\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eSmooth scrolling for wheel and keyboard scrolls in Win/Linux enabled on trunk\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eskobes, ymalik\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eIntersection observer on trunk\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eszager\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.95\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eIntegrate font related memory consumption to memory-infra\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Interop (Interoperability, Compatibility, Conformance)\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave fullscreen implementation not modify layout tree\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ebokan\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave flexbox match latest version of spec\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.80\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eWork with other vendors to nail down Custom Layout API\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eikilpatrick\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.90\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eSupport Blink/Android hyphen design work\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eszager\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eReplace flexbox tests with W3C ones\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r5\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUnprefix CSS Writing modes\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.70\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r6\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eCSS font-feature-settings\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Code health\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave root layer scrolling pass all unit tests\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eskobes, szager\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:orange\"\u003e0.50\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave prototype of ruby on top of custom layout [kojii, houdini-dev]\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eblink-houdini, kojii\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRemove simple text\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae, drott\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.90\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eShip improved font fallback to stable\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.75\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFinish wrapping block layout in an API\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw, pilgrim\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.70\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r5\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eAdd class level documentation to all key layout classes\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ejchaffraix\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r6\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFeasibility study for replacing flipped flocks writing mode implementation\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ewkorman\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Bug Health\r\n \u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eContinue to triage all bugs within one week\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFix all (new) P0/P1 within one release\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.80\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eReduce untriaged bug count by 50%\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae, jchaffraix\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eReduce total bug backlog by 15%\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n \u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r0\"\u003eShip CSS containment to beta\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:orange\"\u003e0.60\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003eEditor’s Draft https://drafts.csswg.org/css-containment/\r\n[mid quarter]\r\nOn track, intent to implement has been sent. Patch up for review.\r\n\r\n[end of quarter]\r\nCSS and Paint containment implemented and available as experimental web platform features. We're further along implementation wise than expected however behind on shipping as CSS contain has yet to ship to beta.\r\n \u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r1\"\u003eSmooth scrolling for wheel and keyboard scrolls in Win/Linux enabled on trunk\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes, ymalik\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003ehttp://crbug.com/575\r\n[mid quarter]\r\nOn track, looking good.\r\n\r\n[end of quarter]\r\nEnabled on trunk in time for the M49 branch.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r2\"\u003eIntersection observer on trunk\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eszager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.95\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track, harder and more time consuming than estimated.\r\n\r\n[end of quarter]\r\nMore work and much harder than originally estimated. Implementation has been ready for over a month but delayed due to difficulties in getting it reviewed and difficulties around agreeing on a memory model that'll make sense in a post oil-pan world. Work completed about ten days after the end of quarter.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r3\"\u003eIntegrate font related memory consumption to memory-infra\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\nMemory instrumentation added for key font metrics.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r0\"\u003eHave fullscreen implementation not modify layout tree\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ebokan\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nDe-staffed. At risk.\r\n\r\n[end of quarter]\r\nDe-staffed as bokan wasn't available to layout-dev to work on fullscreen or layout in general. Needs new owner.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r1\"\u003eHave flexbox match latest version of spec\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.80\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\n?\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r2\"\u003eWork with other vendors to nail down Custom Layout API\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eikilpatrick\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.90\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\nSeveral meetings and discussions with other vendors., Have broad consensus and expect us to be able to spec it in Sydney.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r3\"\u003eSupport Blink/Android hyphen design work\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eszager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\nSufficient support for design work provided. drott/szager up to speed.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r4\"\u003eReplace flexbox tests with W3C ones\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\nDone?\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r5\"\u003eUnprefix CSS Writing modes\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.70\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track.\r\n\r\n[end of quarter]\r\n\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r6\"\u003eCSS font-feature-settings\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nAt risk.\r\n\r\n[end of quarter]\r\n?\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r0\"\u003eHave root layer scrolling pass all unit tests\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes, szager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:orange\"\u003e0.50\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nDe-emphasized to focus on intersection observer. Still making solid progress though.\r\n\r\n[end of quarter]\r\nSome progress, but less than expected due to Stefan being pulled of to do Intersection Observer. Steve fixed at least one of the unit tests and a few of the layout tests, and added infrastructure for tracking future progress on the layout tests via flag-specific expectations.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r1\"\u003eHave prototype of ruby on top of custom layout [kojii, houdini-dev]\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eblink-houdini, kojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nRough prototype exists, needs further work.\r\n\r\n[end of quarter]\r\nTwo independent prototypes created using slightly different APIs. Successfully demonstrated that it is viable to re-implement ruby on top of a custom layout API. Neither are production ready and both depend on a polyfil, as planned.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r2\"\u003eRemove simple text\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae, drott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.90\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nAlways use complex text enabled on trunk. Plan is to remove code for M50.\r\n\r\n[end of quarter]\r\nHarder than anticipated due to a number of compatibility and perf issues, most severe being a perf regression in Mac AAT backend due to n squared font fallback which took awhile to resolve. Patch to remove simple text uploaded and approved. Will commit as soon as M49 has been branched. Missing end of Q4 goal by two weeks.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r3\"\u003eShip improved font fallback to stable\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.75\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nShipped to beta. On track.\r\n\r\n[end of quarter]\r\nIn 48 which goes to stable in Jan 26. Missing end of Q4 goal by one month.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r4\"\u003eFinish wrapping block layout in an API\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw, pilgrim\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.70\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nAt risk.\r\n\r\n[end of quarter]\r\nStill not quite done but getting closer. \u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r5\"\u003eAdd class level documentation to all key layout classes\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ejchaffraix\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter update]\r\nOn track.\r\n\r\n[end of quarter]\r\nComprehensive class level documentation added as header comments to all key layout classes.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r6\"\u003eFeasibility study for replacing flipped flocks writing mode implementation\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ewkorman\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003ehttp://crbug.com/535637\r\n[mid quarter]\r\nDelayed to focus on paint performance. At risk.\r\n\r\n[end of quarter]\r\nDe-emphasized to focus on slimming paint which is higher performance. Will carry over to Q1. \u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r0\"\u003eContinue to triage all bugs within one week\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track\r\n\r\n[end of quarter]\r\nAll bugs triaged within one week of filing (for new bugs) or one week of having the CR-Blink-Layout label added (for old bugs, working down the backlog).\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r1\"\u003eFix all (new) P0/P1 within one release\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.80\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track\r\n\r\n[end of quarter]\r\nStill some ambiguity aroud the definition of a P1 bugs. All P0 and release-blockers fixed within one release. 75% of all P1s, majority of remaining ones should like have been classified as P2.\r\n\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r2\"\u003eReduce untriaged bug count by 50%\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae, jchaffraix\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track to exceed goal. Reduced by 60% thus far.\r\n\r\n[end of quarter]\r\nReduced by over 70%, far exceeding goal of 50%. Down to 180 unconfirmed/untriaged from 690 at the start of the quarter.\u003c/p\u003e\r\n \u003c/div\u003e\u003cdiv\u003e\r\n \u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r3\"\u003eReduce total bug backlog by 15%\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.00\u003c/span\u003e\r\n \u003cp style\u003d\"white-space:pre-wrap\"\u003e[mid quarter]\r\nOn track to exceed goal. Reduced by 16% thus far.\r\n\r\n[end of quarter]\r\nReduced total open bug count by over 25%, exceeding goal of 15%. Down to 1688 open bugs from 2310 at the start of the quarter.\u003c/p\u003e\r\n \u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q4"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5316223471866019996"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5316223471866019996"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5316223471866019996"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"2015q4"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},"published":{"$t":"2015-04-02T21:01:58.630Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-24T23:38:58.852Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Objectives and Key Results"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis page holds our quarterly objectives and a set of key results for each objective. At the beginning of each quarter the OKRs from the preceding quarter are evaluated and graded and the ones for the coming quarter are agreed upon.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2016q1\"\u003e2016 Q1\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q4\"\u003e2015 Q4\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q3\"\u003e2015 Q3\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q2\"\u003e2015 Q2\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q1\"\u003e2015 Q1\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250862627189304315"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5568564896534004490"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"okrs"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5579435597170108004"},"published":{"$t":"2015-04-02T21:04:12.303Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-13T21:03:12.002Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2015 Q1"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n\r\n\u003cp style\u003d\"margin-top:0\"\u003eList of objectives and key results for the first quarter of 2015.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n\r\n\u003cul\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex;border-bottom:1px solid black;list-style:none\"\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:60ex;vertical-align:top;font-weight:bold\"\u003eKey Result\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex;font-weight:bold\"\u003eOwner(s)\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;font-weight:bold\"\u003eScore\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr0\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eHave telemetry benchmark suite running key_silk_cases monitoring layout times with less than 1% variation between runs.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[benjhayden]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:orange\"\u003e0.6\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr1\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eAdd 3 real-world pages with lots of layout to key_silk_cases. At least two of which are mobile oriented.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[benjhayden]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:darkgreen\"\u003e0.7\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr2\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eSpeed up some key_silk_cases tests.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[\u003ci\u003eeveryone\u003c/i\u003e]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr3\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eCreate a Measure API prototype and write-up of lessons learned.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[jchaffraix, eae]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr4\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eSupport natural layout animations (subpixel layout during animation).\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[eae]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr5\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eFinish root layer scrolling.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[skobes]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:orange\"\u003e0.5\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr6\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eMove line layout to LayoutUnit.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[hartmanng, szager]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:darkgreen\"\u003e0.7\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr7\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eTriage all clusterfuzz asserts and fix 50% of them.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[cbiesinger]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:red\"\u003e0.2\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr8\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eHave bugs automatically filed for new clusterfuzz asserts.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[cbiesinger]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr9\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eRender tree modifications during layout.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[dsinclair]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:darkgreen\"\u003e0.7\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#kr10\" style\u003d\"display:inline-block;width:60ex;vertical-align:top\"\u003eSpeed up complex text by a factor of 2.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:22ex;margin-left:2ex\"\u003e[kojii, eae]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:6ex;text-align:right;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr0\"\u003eHave telemetry benchmark suite running key_silk_cases monitoring layout times with less than 1% variation between runs\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ebenjhayden\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.6\u003c/span\u003e\r\n\u003cp\u003eThe variation between runs is about 3% overall for tests running with the new layout_avg telemetry metric. Down from about 10% for existing webkit performance tests.\u003c/p\u003e\r\n\u003cp\u003eThe variation between runs is about 3% overall, though avg and variation vary widely between pages.\u003c/p\u003e\r\n\u003cp\u003eIt looks like there's a couple hundred ms variation in the average of all pages' layout_avg, though I'm not sure what the take-home number should be. The average over all the pages' layout_avg is about 5.4ms after I added Masonry, and the stddev in that line looks to be about 200ms, which is about 3-4% variation. Masonry's layout_avg is usually around 70ms, and the stddev in its layout_avg between runs is about 1-2ms, which is about 3% variation. Several pages have a layout_avg that is consistently below 1ms, so normal variation can be 100% or more.\u003c/p\u003e\r\n\u003cp\u003eOne way to reduce variation would be to rewrite the pages to perform significantly more layout, i.e. boost the signal above the noise.\u003c/p\u003e\r\n\u003cp\u003ePerhaps this OKR should have been about making sure that there aren't any easily-fixable sources of noise in any page's layout_avg, e.g. non-deterministic load order. I fixed one issue of that nature. The noise in most of the rest of the pages looks like expected white noise, with a few pages exhibiting rare spikes that may warrant further investigation, though nothing as troublesome as that non-deterministic load order.\r\n\u003c/p\u003e\r\n\u003cp\u003eI'm rewriting the LayoutMetric, so these numbers will change and expose more detailed information.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr1\"\u003eAdd 3 real-world pages with lots of layout to key_silk_cases. At least two of which are mobile oriented\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ebenjhayden\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.7\u003c/span\u003e\r\n\u003cp\u003eAdded two new tests, Polymer Topeka and Masonry.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr2\"\u003eSpeed up some key_silk_cases tests\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeveryone\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.0\u003c/span\u003e\r\n\u003cp\u003eWe've speed up quite a few of the blink layout perf tests but seemingly none of the silk cases.\u003c/p\u003e\r\n\u003cp\u003eIt turns out that all the key_silk_cases tests were already pretty fast when it comes to layout.\u003c/p\u003e\r\n\u003cul\u003e\r\n \u003cli\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dblink_perf.layout%2Fchapter-reflow\u0026amp;checked\u003dchapter-reflow%2Cchapter-reflow%2Cref%2Cchapter-reflow%2Cref%2Cchapter-reflow%2Cref\"\u003echapter-reflow\u003c/a\u003e tests speed up by 5-12% depending on platform.\u003c/li\u003e\r\n \u003cli\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dblink_perf.layout%2Fline-layout\u0026amp;checked\u003dline-layout%2Cline-layout%2Cref%2Cline-layout%2Cref%2Cline-layout%2Cref\u0026amp;start_rev\u003d318673\u0026amp;end_rev\u003d322609\"\u003eline-layout\u003c/a\u003e tests 4-15% depending on platform.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr3\"\u003eCreate a Measure API prototype and write-up of lessons learned\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ejchaffraix, eae\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eSplit Measure into Element, Text and Custom Layout measure.\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003ejchaffraix has several prototypes and \u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1hGuLzcY8uFcP4fQw2HiwnpnI6SmygqErvYQMxkObONs/edit\"\u003ewrite-up\u003c/a\u003e for Element measure, with key conclusions about the API and what people expect.\u003c/li\u003e\r\n\u003cli\u003eeae has a proposal and some write-up for text.\u003c/li\u003e\r\n\u003cli\u003ejchaffraix was involved in Custom Layout but ikilpatrick is the main driver.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr4\"\u003eSupport natural layout animations (subpixel layout during animation)\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.0\u003c/span\u003e\r\n\u003cp\u003eNo real progress, was deprioritized in favor of performance and code health work. Questionable whether it makes sense without some sort of layout/style containment as we cannot give any performance guarantees without it.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr5\"\u003eFinish root layer scrolling\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.5\u003c/span\u003e\r\n\u003cp\u003eMain-thread, impl-thread, and script-driven frame-level scrolls now work through LayerScrollableArea codepath with --root-layer-scrolls. Iframes, position: fixed, and scroll animations work. Need to expand test coverage and look at potential interactions with other features (pinch viewport, fractional scroll offsets, top controls, overhang, slimming paint, scroll customization etc).\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr6\"\u003eMove line layout to LayoutUnit\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ehartmanng, szager\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.7\u003c/span\u003e\r\n\u003cp\u003eGreat progress but not quite there yet. Need to solve the performance issue. Still need to go through all tests on Windows to determine if any of the changes are due to regressions or if we just need to rebaseline the tests. Mac and Linux both close.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr7\"\u003eTriage all clusterfuzz asserts and fix 50% of them\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.2\u003c/span\u003e\r\n\u003cp\u003eClusterfuzz now does produce assertion errors. [restricted link] If that link does not show results, click \"Toggle experimental testcases\".\u003c/p\u003e\r\n\u003cp\u003eTriaged most asserts, but so far only on paper. Not fixed because focused more on Flexbox. Need to continue in Q2 with bug filing and fixing.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr8\"\u003eHave bugs automatically filed for new clusterfuzz asserts\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.0\u003c/span\u003e\r\n\u003cp\u003eNot done because not done triaging. However, when it's time to do this it's just a matter of asking the clusterfuzz team to do it. All code and logic is already in place.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr9\"\u003eRender tree modifications during layout\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edsinclair\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e0.7\u003c/span\u003e\r\n\u003cp\u003eLanded first-letter but the list markers change is stuck on finishing the patch, especially editing. Dan is pulled in other directions (LayoutObject renaming, unflaking win bot etc)\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"kr10\"\u003eSpeed up complex text by a factor of 2\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii, eae\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\u003cspan\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eSpeed up by over 2x at a minimum and up to 40x in some cases.\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dblink_perf.layout%2FArabicLineLayout\u0026amp;checked\u003dArabicLineLayout%2CArabicLineLayout%2Cref%2CArabicLineLayout%2Cref\u0026amp;start_rev\u003d318673\u0026amp;end_rev\u003d322609\"\u003eArabicLineLayout\u003c/a\u003e 2-2.5x depending on platform.\r\n\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dblink_perf.layout%2Flatin-complex-text\u0026amp;checked\u003dlatin-complex-text%2Cref%2Clatin-complex-text%2Clatin-complex-text%2Cref%2Clatin-complex-text%2Cref\u0026amp;start_rev\u003d318673\u0026amp;end_rev\u003d322609\"\u003elatin-complex-text\u003c/a\u003e 8-40x depending on platform.\r\n\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dblink_perf.layout%2Fvertical-japanese-kokoro-insert\u0026amp;checked\u003dvertical-japanese-kokoro-insert%2Cvertical-japanese-kokoro-insert%2Cref%2Cvertical-japanese-kokoro-insert%2Cref%2Cvertical-japanese-kokoro-insert%2Cref\u0026amp;start_rev\u003d318673\u0026amp;end_rev\u003d322609\"\u003evertical-japanese-kokoro-insert\u003c/a\u003e 2-5x depending on platform.\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q1"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5579435597170108004"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5579435597170108004"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5579435597170108004"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"2015q1"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5993343885662410739"},"published":{"$t":"2015-04-13T21:02:20.572Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-07-22T19:20:34.376Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2015 Q2"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n\r\n\u003cp style\u003d\"margin-top:0\"\u003eList of objectives and key results for the second quarter of 2015.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n\u003cul\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex;border-bottom:1px solid black;list-style:none\"\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:60ex;vertical-align:top;font-weight:bold\"\u003eObjective / Key Result\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;font-weight:bold\"\u003eOwner(s)\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;text-align:right;font-weight:bold\"\u003eStatus\u003c/span\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Gain insight into real world layout performance\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave a report characterizing layout performance for all layout scenarios.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[benjhayden]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Improve high-level layout design\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave design document for grand node measure refactoring.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[jchaffraix]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.3\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eList markers not modifying layout tree during layout (in dev).\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[dsinclair]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eInitial implementation of menu item not modifying layout tree during layout (in canary).\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[dsinclair]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Improve capabilities of the web platform\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave an experimental out-of-tree node measure API.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[jchaffraix]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.0\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUpdate flexbox implementation to match latest version of specification.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[cbiesinger]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.8\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eImprove CJK vertical text support [redacted, internal metric].\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[kojii]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.9\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Rationalize text rendering\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eMake complex text as fast as simple text.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[eae]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRemove the simple text code path.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[eae]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eBuild the plan to support updated Unicode Bidirectional Algorithm.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[kojii]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:red\"\u003e0.2\u003c/span\u003e \r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRaise the “Passed” rate of CSS Writing Modes Level 3 to 85% including new tests.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[kojii]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e \r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Improve code health\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o4r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eMove line layout to LayoutUnit.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[szager]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o4r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFinish root layer scrolling.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[skobes]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e0.7\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o4r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eEnsure that bugs get automatically filed for clusterfuzz asserts.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003e[cbiesinger]\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r0\"\u003eHave a report characterizing layout performance for all layout scenarios.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ebenjhayden\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003cp\u003e\r\nAbandoned to focus on telemetry. Ben moved to telemetry team to ensure that the larger blink team has access to the performance data we need to ensure that RAIL is a success.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r0\"\u003eHave design document for grand node measure refactoring.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ejchaffraix (dsinclair, cbiesinger, skobes, eae)\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.3\u003c/span\u003e\r\n\u003cp\u003e\r\nSuperseded by larger layout refactoring proposal (“moose”). Part of the refactoring work could still be relevant/applicable in isolation and has been broken out into specific design documents; unrooted layout, removing deprecated paint layer.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r1\"\u003eList markers not modifying layout tree during layout (in dev).\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edsinclair\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eDone\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r2\"\u003eInitial implementation of menu item not modifying layout tree during layout (in canary).\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edsinclair\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eDone.\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r0\"\u003eHave an experimental out-of-tree node measure API.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ejchaffraix\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003cp\u003e\r\nAbandoned due to the high implementation complexity, high maintenance costs and relatively low level of enthusiasms from prospective clients. Does not necessarily make sense in isolation and should be considered as a part of a bigger layout refactoring or work to support custom layout. Most prospective use cases can be satisfied with a text metrics API.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r1\"\u003eUpdate flexbox implementation to match latest version of specification.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.8\u003c/span\u003e\r\n\u003cp\u003e\r\nMostly done, will drag into Q3. Initial estimate was a little bit too optimistic.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r2\"\u003eImprove CJK vertical text support [redacted, internal metric].\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.9\u003c/span\u003e\r\n\u003cp\u003e\r\nWe unblocked all existing blockers. The metric is stalled for other problems, and one topic is still under discussions, but Blink is no longer the blocker at this point and the failure to meet the goal is outside the control of the blink team.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r0\"\u003eMake complex text as fast as simple text.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae (szager, kojii, behdad)\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003e\r\nDone. Complex path speed up by between 3.5x and 30x, as fast or faster than simple path on benchmarks.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r1\"\u003eRemove the simple text code path.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.0\u003c/span\u003e\r\n\u003cp\u003e\r\nWas gated on making complex text as fast as simple. Was a bit too ambitious perhaps, should be doable early Q3.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r2\"\u003eBuild the plan to support updated Unicode Bidirectional Algorithm\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:red\"\u003e0.2\u003c/span\u003e\r\n\u003cp\u003e\r\nWork under way, will carry over into Q3.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r3\"\u003eRaise the “Passed” rate of CSS Writing Modes Level 3 to 85% including new tests\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003e\r\n86% as of early June. \r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o4r0\"\u003eMove line layout to LayoutUnit.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eszager (dsinclair)\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eDone!\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o4r1\"\u003eFinish root layer scrolling.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e0.7\u003c/span\u003e\r\n\u003cp\u003e\r\nFixed various things such as anchor scrolling, quirks mode, hit testing. Partial coverage of unit tests with RLS enabled. Some issues remain with pinch viewport, custom scrollbars, etc. Aiming to finish in Q3.\r\n\u003c/p\u003e\r\n\r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o4r2\"\u003eEnsure that bugs get automatically filed for clusterfuzz asserts.\u003c/a\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eStatus:\u003c/span\u003e\u003cspan style\u003d\"font-weight:bold;color:darkgreen\"\u003e1.0\u003c/span\u003e\r\n\u003cp\u003eDone!\u003c/p\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q2"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5993343885662410739"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5993343885662410739"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5993343885662410739"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"2015q2"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5998432373601010235"},"published":{"$t":"2015-05-26T20:09:30.266Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-05-26T20:09:36.984Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tuesday, May 26, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eHighlights\u003c/div\u003e\u003cdiv\u003e- New multicol implementation shipped!\u003c/div\u003e\u003cdiv\u003e- Line layout in layout units landing this week!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on Monday, May 18th):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- Continuing work on trace viewer.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Root layer scrolling broke \u0026lt;body\u0026gt; stretching to viewport in quirks\u003c/div\u003e\u003cdiv\u003e mode; fix is waiting on code review.\u003c/div\u003e\u003cdiv\u003e- Page scale factor is a bigger concern: page scaling changes\u003c/div\u003e\u003cdiv\u003e content size relative to scroll bounds, which doesn't work with root\u003c/div\u003e\u003cdiv\u003e layer scrolling as currently implemented. Need to teach LayoutView /\u003c/div\u003e\u003cdiv\u003e DPLScrollableArea how to apply the page scale factor, which could get\u003c/div\u003e\u003cdiv\u003e messy.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [crbug.com/321237]\u003c/div\u003e\u003cdiv\u003e- Ready to land, will require a ton of rebaselines.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Discussions around absolut positioning within flexbox.\u003c/div\u003e\u003cdiv\u003e- Updated handling of min-width/min-height.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eList marker refactoring (dsinclair) [crbug.com/370461]\u003c/div\u003e\u003cdiv\u003e- List marker patches in M44 branch. Yay!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMenu list refactoring (dsinclair) [crbug.com/370462]\u003c/div\u003e\u003cdiv\u003e- Menu list changes landed, with hack to use empty text node instead\u003c/div\u003e\u003cdiv\u003e of BR for line breaks to ensure proper alignment.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFullscreen (dsinclair) [crbug.com/370459]\u003c/div\u003e\u003cdiv\u003e- Taking over work to update fullscreen implementation to not modify\u003c/div\u003e\u003cdiv\u003e layout tree during layout. Building on previous work by Julien and\u003c/div\u003e\u003cdiv\u003e James among others.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Warden (dsinclair, pilgrim)\u003c/div\u003e\u003cdiv\u003e- Contining work to slim-dopwn LayoutObject. (pilgrim)\u003c/div\u003e\u003cdiv\u003e- Plan to start helping with WTF to Base conversion this week. (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [crbug.com/334335]\u003c/div\u003e\u003cdiv\u003e- New multicol implementation shipped!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText\u003c/div\u003e\u003cdiv\u003e- Working on justification crash issue. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating orthogonal writing modes issues. (kojii)\u003c/div\u003e\u003cdiv\u003e- Unicode variation selectors support. (kojii)\u003c/div\u003e\u003cdiv\u003e- Shaping AAT fonts broken on Mac for certain scripts. (eae)\u003c/div\u003e\u003cdiv\u003e- Continuing work on complex text performance. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eImporting CSS Test Suites (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating importing CSS Writing Modes test suites\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRemoving DeprecatedPaintLayer (chadarmstrong)\u003c/div\u003e\u003cdiv\u003e- Intern Chad Armstrong started, is going to be working on killing\u003c/div\u003e\u003cdiv\u003e DeprecatedPaintLayer.\u003c/div\u003e\u003cdiv\u003e- Design doc: https://docs.google.com/document/d/1YApHVA0hJDWeFGxHPpJ6J5JM5Wcz2h3s24KPSFp8VMg/edit?usp\u003dsharing\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-may-26-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5998432373601010235"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5998432373601010235"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5998432373601010235"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"tuesday-may-26-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6031243608868659136"},"published":{"$t":"2015-02-19T19:59:56.295Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-02-19T20:38:24.204Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Wednesday, February 18, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eAttendees: benjhayden, cbiesinger, dsinclair, eae, jchaffraix, nduca, szager, skobes, slightlyoff, hartmanng\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eStatus updates:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- Finished profiling most of the key silk test cases on android, added\u003c/div\u003e\u003cdiv\u003e more graphs and information to the profiling doc.\u003c/div\u003e\u003cdiv\u003e- Next up, classifying types of layout.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Smooth scrolling enabledd for RenderLayerScrollableArea.\u003c/div\u003e\u003cdiv\u003e- Fixed position elements.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ewin_blink flakiness (dsinclair)\u003c/div\u003e\u003cdiv\u003e- win_blink_rel now among the better bots in terms of flakiness.\u003c/div\u003e\u003cdiv\u003e- Slowly re-enabling tests, monitoring flakiness.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout [crbug.com/450612] (dsinclair)\u003c/div\u003e\u003cdiv\u003e- Trying to rename RendereBlock to LayoutBlock. Involves 30k files which\u003c/div\u003e\u003cdiv\u003e rietveld does not like. Uploading for reviews cases the upload command\u003c/div\u003e\u003cdiv\u003e to crash.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eList markers (dsinclair)\u003c/div\u003e\u003cdiv\u003e- Trying to figure out how to deal with an ancestor being moved.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Working on a number of prototypes for measure together with Ian\u003c/div\u003e\u003cdiv\u003e Kilpatrick.\u003c/div\u003e\u003cdiv\u003e- github repo for prototypes. To allow layout callbacks a script\u003c/div\u003e\u003cdiv\u003e execution context might be needed. Runs js in snadbox since we cannot\u003c/div\u003e\u003cdiv\u003e modify the DOM. Would not have even read-only access to the DOM.\u003c/div\u003e\u003cdiv\u003e Needs to be able to access render tree in a safe way.\u003c/div\u003e\u003cdiv\u003e- Defining an API for the render tree, houdini style.\u003c/div\u003e\u003cdiv\u003e- slightlyoff would prefer to not add a new execution context that is\u003c/div\u003e\u003cdiv\u003e not workers. jchaffraix and slightlyoff to talk offline.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (hartmanng, szager) [crbug.com/321237]\u003c/div\u003e\u003cdiv\u003e- No real progress last week. Blocked on higher priority work to fix\u003c/div\u003e\u003cdiv\u003e high profile regressions.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Working on updating flexbox implementation to match latest spec\u003c/div\u003e\u003cdiv\u003e revision.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, eae)\u003c/div\u003e\u003cdiv\u003e- Made RenderCombinedText less obstructive. 4 if-RenderCombinedText\u003c/div\u003e\u003cdiv\u003e removed, 1 moved to less frequent path. (kojii)\u003c/div\u003e\u003cdiv\u003e- Worked with dominik.rottsches to make vertical flow performance\u003c/div\u003e\u003cdiv\u003e test. (kojii)\u003c/div\u003e\u003cdiv\u003e- Started analyzing complex path performance. It looks like\u003c/div\u003e\u003cdiv\u003e characteristics varies by scripts and values of properties. I'll look\u003c/div\u003e\u003cdiv\u003e into CJK vertical flow first. (kojii)\u003c/div\u003e\u003cdiv\u003e- Fixed two text regressions on Mac causing incorrect rendering and/or a\u003c/div\u003e\u003cdiv\u003e render crash (due to an ASSERT). Required a Harfbuzz change and roll.\u003c/div\u003e\u003cdiv\u003e (eae, behdad)\u003c/div\u003e\u003cdiv\u003e- Added support for emoticons and emoji on Windows. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine layout (szager)\u003c/div\u003e\u003cdiv\u003e- Fixed bug where shrink-wrapping of some content failed on Facebook,\u003c/div\u003e\u003cdiv\u003e caused by imprecision in LayoutUnit to floating point conversions.\u003c/div\u003e\u003cdiv\u003e Writing a test for this was tricky as layout tests run without\u003c/div\u003e\u003cdiv\u003e subpixel text on most platforms. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eGoing over the list of OKRs and discussing each one:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Have telemetry benchmark suite running key_silk_cases monitoring\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e layout times with less than 1% variation between runs. ]\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e[ Add 3 real-world pages with lots of layout to key_silk_cases.\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e At least two of which are mobile oriented. ]\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; A couple of cases with large variance, most have low \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003evariance.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; Layout measurement should fix this in most cases. Some \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003etests have a bi-modal behavior, triggering an extra layout \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ein some cases.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; We want a link on the layout team site to a set of graphs \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eby the end of the quarter.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; So we're looking pretty good, do we think we can get there \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eby the end of the quarter?\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; Yes.\u003c/div\u003e\u003cdiv\u003e* on track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Speed up some key_silk_cases tests. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We've made a number of small improvements to complex text \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eperformance and have ongoing work that should result in a \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e10% improvement.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Any other ongoing performance work?\u003c/div\u003e\u003cdiv\u003e* at risk *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Create a Measure API prototype and write-up of lessons learned. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; On second or third prototype, have a better understanding \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003esince the Sydney convergence.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Github repo with prototype, working on write-up.\u003c/div\u003e\u003cdiv\u003e* on track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Support natural layout animations (subpixel layout during animation) ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; No real progress, have rough proof of concept prototype but \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003enothing concrete.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Might miss.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u0026lt;nduca\u0026gt; Should be explicit if it wasn't a priority and what we did \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003einstead.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e* at risk *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Finish root layer scrolling. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Making progress, fixing issues as discovered.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Handful of hard problems, some risk of slipping into Q2.\u003c/div\u003e\u003cdiv\u003e* on track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Move line layout to LayoutUnit. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;hartmanng\u0026gt; Distracted by P1 bugs, have made some progress.\u003c/div\u003e\u003cdiv\u003e\u0026lt;hartmanng\u0026gt; Complications with full-page zoom implementation.\u003c/div\u003e\u003cdiv\u003e\u0026lt;hartmanng\u0026gt; Should be possible if we get time to work on it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; Agreed.\u003c/div\u003e\u003cdiv\u003e* on track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Triage all clusterfuzz asserts and fix 50% of them. [cbiesinger]\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Starting to realize that 50% might have been a bit \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eoptimistic. Not all are reproducible.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Without minimized test cases it is really hard, given up on a \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003esubset of them (without test cases).\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; What would a realistic goal be for Q1?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Triaging all reproducible ones and fixing the ones with \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eminimal test cases would be feasible.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e* at risk *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Have bugs automatically filed for new clusterfuzz asserts. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Need to work with someone on the clusterfuzz team, should \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ebe easy.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e* on-track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Render tree modifications during layout. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; first-letter is stabilized, list-marker is a lot closer.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; One tricky outstanding issue regarding descendants \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e(list-marker).\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Full screen is a road block. Re-attach destroys renderer, \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003erestarts plugins. Currently we do no reattach. We need to \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eadd a hoisting mechanist to make it work. Prototype patch \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eamong those lines but it does break plugins. Needs more \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ework and is complicated.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Have not had time to dig into it, need to fix path.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; single-item-menu won't be done this quarter.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; On track according to plan, decent amount of risk.\u003c/div\u003e\u003cdiv\u003e* on track *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHigh level discussion:\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Renaming rendering to layout has been sucking up a lot of \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003etime for everyone.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; As has dealing with regressions and blocking bugs.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Are we spending more or less time on work not captured in \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ethe OKRs than expected?\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Was expecting about a 50%/50% split between OKR work and \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ehigh-priority bug fixes. So for this quarter we've spent a \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ebit more time on bugs/regressions than expected.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; For Q2 OKRs should capture that work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/wednesday-february-18"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6031243608868659136"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6031243608868659136"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6031243608868659136"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"wednesday-february-18"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6154415037140392292"},"published":{"$t":"2015-08-05T20:08:31.372Z"},"updated":{"$t":"2017-04-20T16:34:23.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-08-05T21:40:53.283Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"2015 Q3"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n \r\n\u003cp style\u003d\"margin-top:0\"\u003eList of objectives and key results for the third quarter of 2015.\u003c/p\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n \r\n\u003cul\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex;border-bottom:1px solid black;list-style:none\"\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:60ex;vertical-align:top;font-weight:bold\"\u003eObjective / Key Result\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;margin-left:2ex;font-weight:bold\"\u003eOwner(s)\u003c/span\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:12ex;text-align:right;font-weight:bold\"\u003eStatus\u003c/span\u003e\r\n \u003c/li\u003e\r\n \u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Interop (Interoperability, Compatibility, Conformance)\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUpdate flexbox implementation to match latest version of specification\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ecbiesinger\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRemove page zoom\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae, blink-style\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUpdated Unicode Bidirectional Algorithm\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eUnprefix CSS Writing modes\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003ekojii\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eImprove font fallback\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o0r5\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eSpec work for houdini block \u0026amp; line custom layout\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eikilpatrick\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Improve code health\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave all calls into block layout go through well defined API\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eHave a clear understanding of the cost/complexity of custom layout.\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eleviw, ikilpatrick\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eFinish root layer scrolling\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eskobes, szager\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eRemove simple text code path\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae,drott\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o1r4\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eImprove integration between Blink and Harfbuzz\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003edrott\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Bug Health\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eTriage all incoming layout bugs within one week\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o2r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eReduce bug count by 30%\u003c/a\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:16ex;margin-left:2ex\"\u003eeae\u003c/span\u003e\r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n RAIL (Measuring User Experience)\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eReduce unnecessarily forced layouts\u003c/a\u003e\r\n \r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r1\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eAdd UMA tracking \u0026amp; monitoring for different types of layout\u003c/a\u003e\r\n \r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r2\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eBrainstorm/plan devtools/rail score/layout integration\u003c/a\u003e\r\n \r\n \r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o3r3\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eTrace layout on some popular websites in US, Europe, Brazil, India\u003c/a\u003e\r\n \r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n \u003c/li\u003e\r\n\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n Spin up effort around spatial\r\n \r\n\u003cul style\u003d\"padding-left:5ex\"\u003e\u003cli style\u003d\"margin-bottom:0.25ex\"\u003e\r\n \u003ca href\u003d\"#o4r0\" style\u003d\"display:inline-block;width:55ex;vertical-align:top\"\u003eMake progress on viewability/measure for the ads use case\u003c/a\u003e\r\n \r\n \r\n \u003c/li\u003e\u003c/ul\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r0\"\u003eUpdate flexbox implementation to match latest version of specification\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ecbiesinger\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r1\"\u003eRemove page zoom\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae, blink-style\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n\u003cp\u003e(shared with style team)\u003c/p\u003e\r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r2\"\u003eUpdated Unicode Bidirectional Algorithm\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r3\"\u003eUnprefix CSS Writing modes\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003ekojii\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r4\"\u003eImprove font fallback\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o0r5\"\u003eSpec work for houdini block \u0026amp; line custom layout\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eikilpatrick\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r0\"\u003eHave all calls into block layout go through well defined API\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r1\"\u003eHave a clear understanding of the cost/complexity of custom layout.\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eleviw, ikilpatrick\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r2\"\u003eFinish root layer scrolling\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eskobes, szager\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r3\"\u003eRemove simple text code path\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae,drott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o1r4\"\u003eImprove integration between Blink and Harfbuzz\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003edrott\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r0\"\u003eTriage all incoming layout bugs within one week\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o2r1\"\u003eReduce bug count by 30%\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cspan style\u003d\"display:inline-block\"\u003eeae\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r0\"\u003eReduce unnecessarily forced layouts\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r1\"\u003eAdd UMA tracking \u0026amp; monitoring for different types of layout\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n\u003cp\u003e(initial vs lifecycle)\u003c/p\u003e\r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r2\"\u003eBrainstorm/plan devtools/rail score/layout integration\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o3r3\"\u003eTrace layout on some popular websites in US, Europe, Brazil, India\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\u003cdiv\u003e\r\n \r\n\u003ch3 style\u003d\"margin-bottom:0\"\u003e\u003ca name\u003d\"o4r0\"\u003eMake progress on viewability/measure for the ads use case\u003c/a\u003e\u003c/h3\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eOwner(s):\u003c/span\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"display:inline-block;width:10ex;font-weight:bold\"\u003eScore:\u003c/span\u003e\r\n \r\n \u003c/div\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568564896534004490"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/okrs/2015q3"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6154415037140392292"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6154415037140392292"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6154415037140392292"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"2015q3"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2084510823984109527"},"published":{"$t":"2015-06-04T19:03:21.480Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-04T19:04:14.465Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Thursday, June 4, 2015: Mid-Q2 OKR Check-in"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eAttendees: eae, cbiesinger, dsinclair, jchaffraix, nduca, skobes, szager\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eQ2 OKRs: \u003ca href\u003d\"https://www.chromium.org/blink/layout-team/okrs/2015q2\"\u003ehttps://www.chromium.org/blink/layout-team/okrs/2015q2\u003c/a\u003e (updated\u003c/div\u003e\u003cdiv\u003ewith latest status, as is overview at team landing page\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://www.chromium.org/blink/layout-team/\"\u003ehttps://www.chromium.org/blink/layout-team/\u003c/a\u003e)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eQ2 Mid-quarter check-in\u003c/div\u003e\u003cdiv\u003e-----------------------\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Good morning/day/afternoon everyone. We're half way through the\u003c/div\u003e\u003cdiv\u003equarter so I figured a check-in was in order to see where we\u003c/div\u003e\u003cdiv\u003estand.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's go through our list of key-results and see whether we're on\u003c/div\u003e\u003cdiv\u003etrack to achieve them by the end of the quarter.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Have a report characterizing layout performance for all layout ]\u003c/div\u003e\u003cdiv\u003e[ scenarios ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Ben isn't here this morning, I'll follow up with him offline.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Have design document for grand node measure refactoring ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; So the grand node refactoring has been superseded by Moose.\u003c/div\u003e\u003cdiv\u003eMoose has some design to it but not a finished design doc.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; I don't really know how we want to scope that. Or if we\u003c/div\u003e\u003cdiv\u003eshould just ignore it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; I think it's fair to say that the grand refactoring has been\u003c/div\u003e\u003cdiv\u003esuperseded by Moose. At the same time the scope has also increased\u003c/div\u003e\u003cdiv\u003edramatically.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; We have early design ideas for Moose. Need to split it up\u003c/div\u003e\u003cdiv\u003einto concrete proposals and sync up with esprehn and ojan. They took\u003c/div\u003e\u003cdiv\u003eover the project when I went of vacation and ran with it, need to\u003c/div\u003e\u003cdiv\u003ereclaim it and come up with a plan.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; The first phase of the moose work, to create an API, is\u003c/div\u003e\u003cdiv\u003erelatively well defined, uncontroversial and limited in scope.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; The whole idea behind doing the API first is to avoid the\u003c/div\u003e\u003cdiv\u003ehard questions about differences of opinion relating to the strategy.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Yes. We need to figure that out but this is not the time nor the\u003c/div\u003e\u003cdiv\u003evenue. We need to discuss this, with all stakeholders, prior to setting\u003c/div\u003e\u003cdiv\u003ethe Q3 OKRs.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Everyone should be there when we talk about it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Moose is more than required, lets continue this discussion\u003c/div\u003e\u003cdiv\u003eoffline and with all the relevant people.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ List markers not modifying layout tree during layout (in dev). ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Done!\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Awesome!\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; It's in beta even.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Turns out it _just_ missed beta, it's in dev though.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; That was the goal though, you're golden.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Initial implementation of menu item not modifying layout tree during ]\u003c/div\u003e\u003cdiv\u003e[ layout (in canary) ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Done, also in dev.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; You're on fire! What are you going to do the rest of the quarter?\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Code reviews. Tons of code reviews.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Have an experimental out-of-tree node measure API. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; This is from before I left on vacation. We want to push it\u003c/div\u003e\u003cdiv\u003eout of the roster, not a priority any more. Gated on refactoring work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; We have a prototype and a design but stopped working on it\u003c/div\u003e\u003cdiv\u003eto focus on refactoring work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; So we decided to focus on the broader scope refactoring work\u003c/div\u003e\u003cdiv\u003einstead of the limited out-of-tree measure implementation?\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Yes, there where also concerns about supporting the API in\u003c/div\u003e\u003cdiv\u003ethe future given the narrow use cases for it. Not necessarily worth the\u003c/div\u003e\u003cdiv\u003ecomplexity.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's revisit this at the end of the quarter.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Ok.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Update flexbox implementation to match latest version of ]\u003c/div\u003e\u003cdiv\u003e[ specification ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Some parts done, some parts to be done.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; On track?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Should be possible to finish before EoQ.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ndcua\u0026gt; Did we make any progress on debugging?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Haven't heard anything about it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Can you follow up, the new behavior is really hard to debug (for\u003c/div\u003e\u003cdiv\u003eweb developers).\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; I'm not quite sure how to shove it into the inspector.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Not super important but a nice side narrative and it might be a\u003c/div\u003e\u003cdiv\u003efun project. Would be be great for users.\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Agreed, not sure where to start though.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Only if you want to. Entirely up to you. Work with dev tools\u003c/div\u003e\u003cdiv\u003eteam and nudge them in right direction. No need to do any UI work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; I'll put it on my todo list to reach out to the dev-tools\u003c/div\u003e\u003cdiv\u003eteam and expose the information.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Improve CJK vertical text support ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; kojii isn't here which is understandable given that it's 2am in\u003c/div\u003e\u003cdiv\u003eTokyo at the moment. I'll follow up with him this afternoon.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Make complex text as fast as simple text ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; So this is on me. I have a plan and have started working on it.\u003c/div\u003e\u003cdiv\u003eStill think I'll be able to get the complex path to be at least as fast\u003c/div\u003e\u003cdiv\u003eas the simple one by the end of the quarter, will by close though.\u003c/div\u003e\u003cdiv\u003eInvolves changing how we cache things are reducing repetitive and\u003c/div\u003e\u003cdiv\u003eredundant work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Remove the simple text code path ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This is obviously gated on the previous goal of getting complex\u003c/div\u003e\u003cdiv\u003etext to be as fast as simple text. We're quickly running out of time\u003c/div\u003e\u003cdiv\u003ethis quarter so this is at risk of slipping. We should be able to at\u003c/div\u003e\u003cdiv\u003eleast have a flag to disable it but removing it entirely seems a bit\u003c/div\u003e\u003cdiv\u003eoptimistic at this point.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Build the plan to support updated Unicode Bidirectional Algorithm ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Also on kojii, will fallow up online.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Raise the “Passed” rate of CSS Writing Modes Level 3 to 85% ]\u003c/div\u003e\u003cdiv\u003e[ including new tests. ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Also on kojii, will fallow up online.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Move line layout to LayoutUnit ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; Done!\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Want to expand on that?\u003c/div\u003e\u003cdiv\u003e\u0026lt;sazager\u0026gt; No. It's in dev and so far it looks good.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Congratulations and well done!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Finish root layer scrolling ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Making good progress, with sazager helping out it should be\u003c/div\u003e\u003cdiv\u003epossible to get pretty close to finish it this month.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Any new unforeseen problems? It's grown in scope quite a bit since\u003c/div\u003e\u003cdiv\u003eit started.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Nothing too major, just a lot of work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Ensure that bugs get automatically filed for clusterfuzz asserts ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Done.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Awesome.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWrapping up\u003c/div\u003e\u003cdiv\u003e-----------------------\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Looks like we're on track or even ahead of the curve for the\u003c/div\u003e\u003cdiv\u003emajority of our objectives. Well done everyone! Perhaps we need to have\u003c/div\u003e\u003cdiv\u003ea bit more ambitious goals for Q3?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Speaking of which, it would be great if everyone could start\u003c/div\u003e\u003cdiv\u003ethinking about what they want to do next and what you want to work on\u003c/div\u003e\u003cdiv\u003efor the next quarter or two.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have a big list of our backlog and potential projects at\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://www.chromium.org/blink/layout-team/potential-projects\"\u003ehttps://www.chromium.org/blink/layout-team/potential-projects\u003c/a\u003e, please\u003c/div\u003e\u003cdiv\u003eadd projects and tasks you think are missing and see what you think we\u003c/div\u003e\u003cdiv\u003eshould focus on next.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We'll have a Q3 planning discussion in a few weeks.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Any questions about our OKRs or concerns that we need to talk\u003c/div\u003e\u003cdiv\u003eabout?\u003c/div\u003e\u003cdiv\u003e* silence *\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Thanks everyone!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/thursday-june-4-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2084510823984109527"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2084510823984109527"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2084510823984109527"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"thursday-june-4-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2488225599053604924"},"published":{"$t":"2015-04-15T16:49:45.045Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-15T16:50:24.356Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Thursday, April 2, 2015: Q1/Q2 OKRs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eAttendees: eae, slightlyoff, benjhayden, bnutter, cbiesinger,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edsinclair, dglazkov, jchaffraixm, kojiim, nduca, skobes\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eGraded Q1 OKRs: \u003ca href\u003d\"http://www.chromium.org/blink/layout-team/okrs/2015q1\"\u003ehttp://www.chromium.org/blink/layout-team/okrs/2015q1\u003c/a\u003e\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eQ2 OKRs: \u003ca href\u003d\"http://www.chromium.org/blink/layout-team/okrs/2015q2\"\u003ehttp://www.chromium.org/blink/layout-team/okrs/2015q2\u003c/a\u003e\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eQ1 Evaluation\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e-------------------\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e* eae presents draft document *\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Let's go through our Q1 OKRs and see how we did and what we can\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003elearn.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Have telemetry benchmark suite running key_silk_cases monitoring\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003elayout times with less than 1% variation between runs ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Variation between runs is about 3% with the new layout_avg\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003etelemetry metric, down from about 10% for existing webkit performance\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003etests. Scored at 0.6.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; A way to reduce variance further would be to boost the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esignal ratio by doing a lot more layout. Not sure if that is the right\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ething to focus on. Perhaps we should focus on real world use cases\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003einstead. This might be as good as we can get the tolerance with the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ecurrent setup.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; Have started rewriting metrics to expose more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003einformation, this work will carry forward into Q2.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Add 3 real-world pages with lots of layout to key_silk_cases. At\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eleast two of which are mobile oriented ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Ben added two new, real world, tests. Score 0.7.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; Perhaps we could add more polymer tests?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; The Polymer Topeka tests is great as it is representative of a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ereal world app. Adding more like that could be useful but for now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewe're pretty good.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Speed up some key_silk_cases tests ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; We speed up a couple of webkit performance tests by over 10%,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emost notably chapter-reflow and line-layout. We didn't manage to speed\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eup layout in any of the key_silk_cases tests though. Score 0.0.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; No one owned the task, no one felt responsible and that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emight be way.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; layout is already pretty fast\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; need to pick specific tests and have actionable goals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; lets talk about that for Q2 goals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Create a Measure API prototype and write-up of lessons learned ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; We split this into text and element measure and have write-ups\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003efor both. Score 1.0.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; We probably scoped this too narrowly and achieved a 1.0.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eShould we have been a bit more ambitious?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Could you add links to the write-up doc(s)?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;julien\u0026gt; Will do.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eNote: Linked from graded Q1 OKR document;\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ehttp://www.chromium.org/blink/layout-team/okrs/2015q1\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Support natural layout animations (subpixel layout during animation) ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Work was abandoned and depriotitized. Score 0.0.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Could you add some background as tho why it was\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edepriotitized?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Sure. It didn't seem worthwhile without perf guarantees from\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esomething like layout boundaries. Focused on work to improve line\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003elayout performance instead.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Finish root layer scrolling ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Steve made great progress here but didn't quite get to finish it\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eat all. Score 0.5\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;skobes\u0026gt; Somethings worked, others didn't... Need another quarter to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003efinish.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Move line layout to LayoutUnit ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; We're getting close, but haven't made the switch yet. We\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003estill need to look through all the test changes on Windows and see if\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethere are problems or if we just need to rebaseline. Score 0.7.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; What about the performance problems Stefan found? Do we think it\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emostly from the convenience wrappers used to make the transition?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsincliar\u0026gt; Not sure, Stefan has been focusing on that. I've been\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eputting out other fires.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Will follow up with Stefan (szager).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Triage all clusterfuzz asserts and fix 50% of them ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; We didn't do a very good job on scoping, the goal was too\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eambitious. Score 0.2\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; I switched focus to flexbox work half way through the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003equarter. Doing both in parallel might have been better.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Have bugs automatically filed for new clusterfuzz asserts ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Auto-filing doesn't make sense without triaging. Score 0.0\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; All work is done, just needs to flip a switch.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Render tree modifications during layout ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; Looked at list markers specifically this quarter. Fixed\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eall of the crashers just ran into one issue where moving a renderer\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003efurther down tree causes issues. Score 0.7\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; Think I know the way forward, just need to do it. List\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emarker work is close to done.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; There are other parts that we haven't started looking at,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003elike menus with only one item in them being a special case.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; Menus on mac/linux/windows special case when there is only\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eone item, has a single renderer. Android is different.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; Next up, full screen. Julien was looking at it for awhile.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Julien, do you want to give a quick update on full screen?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; I wrongly though someone has fixed a prerequisite bug for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003efull screen. I spent some time doing tons of testing/rebaselining with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe assumption we could land the change. Realized that we couldn't as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe prerequisite bug wasn't fixed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Blocked on complex problem around re-attach. When\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003etoggling fullscreen you change state of render requiring re-attach\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewhich is problematic.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Presto did work to save state when re-attaching to avoid\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003erestarting plugins when re-attaching. Presto re-attaches more than\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eblink which prompted this.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Speed up complex text by a factor of 2 ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; New goal added mid-quarter. We managed to speed up complex text\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eby a minimum of over 2 and up to 40x in some cases. Score 1.0\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; We might have been a bit too conservative here, we'll correct that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003efor Q2!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eNon-OKR tasks\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e-----------------------\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Let's talk about tasks we spent significant amounts of time on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethat was not covered by our OKRs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eFrom draft doc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- rendering/ -\u0026gt; layout/ move and renaming\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- bidi bugs\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- mac text rendering follow up\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- security bugs\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- updating flexbox to latest version of spec\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- import w3c flexbox tests\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- css writing mode tests\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- win_blink_rel deflaking\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; A few of those, like the rendering -\u0026gt; layout rename and the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewin_blink_rel work should probably have been added to the OKRs mid\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003equarter.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; We cannot plan for the unexpected but if we have unforeseen work\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethat we expect to continue we should consider adding it mid-quarter to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe list.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Did we miss anything?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e* silence *\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; I guess the silence means we have agreement, let's move on.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eQ2 OKR Planning\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e------------------------\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Gain insight into real world layout performance. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Have a report characterizing layout performance for all layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003escenarios. - benjhayden ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Could you explain what we mean by layout scenarios?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; That is part of the goal, we know load layout is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edifferent from animation layout and incremental layout. Yet both can\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edo a lot of the same work. We're still trying to figure out what it\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emeans.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Is this layout classes? Load vs animation?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; There are different types of animation layout, think\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003emoves vs gets taller. Most layouts are a mix of many types, there is a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003elot to figure out. It is a bit ill-defined at the moment.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclar\u0026gt; Could you add some words to make that more clear? Wasn't\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eobvious what it meant, I thought it was layout classes.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; That is part of it, we need to know what is text layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003evs block, load vs incremental etc. Lots of work to define.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; This needs better wording.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclar\u0026gt; Should we split it into two KRs? One for moving on page,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eother for what we call layout classes in blink?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; We don't know the granularity.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Having a report split on a couple of different axis would be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003euseful, we don't know what the axis are yet though so being more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003especific is hard.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;benjhayden\u0026gt; Having a report is a good key result, figuring out how to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003epresent the data is part of the objective.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Improve high-level layout design. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Have design document for grand node measure refactoring. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ - jchaffraix ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: List markers not modifying layout tree during layout (in dev). ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ - dsinclair ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Initial implementation of menu item not modifying layout tree\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eduring layout (in canary). -dsinclair ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; For those that haven't been following along, we've\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003estarted talking about element measure and display outside/inside. Both\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003erequires changes to how we handle the tree during layout in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esignificant ways. Wondering if we have to do this work up front to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esupport other goals or we can make the architecture better as we go\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ealong.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; This unblocks further work down the road, things in pipeline now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eand things we want to do in the future.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Still early on, we're coming up with a broad proposal.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclar\u0026gt; I'd like to better understand the use cases for people that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eask about containment vs measure.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; I'll share a document with use cases.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; The KR here is to come up with a design document, guided\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eby the vision that we're still trying to define.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; It might require that we remove all of the instances\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewhere me modify the tree during layout.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;bnutter\u0026gt; This KR has a lot of owners, each one should have a single\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eperson responsible for keeping track/be in charge.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Good point, first one listed is in charge.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; I'm in charge of the design document one.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Support standards efforts. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Ensure that custom layout spec is compatible with our vision. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ - jchaffraix, eae ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Ensure that text measurement spec is compatible with our vision. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ - eae ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; These KRs are poorly worded, are about staying involved in the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eprocess and making sure that the spec stays compatible with our goals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eand that we can/want to implement them.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;slightlyoff\u0026gt; Who is in charge for the text measurement one? You Emil?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Yeah, text is on me.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;slightlyoff\u0026gt; Great, then I'm not worried.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;bnutter\u0026gt; This isn't really measurable.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;slightlyoff\u0026gt; Having a public github repo and discussion with other\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003evendors might be a better goal?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Makes sense to me.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;slightlyoff\u0026gt; Will be a demonstration.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dgalzkov\u0026gt; As I understand it this is about us trying to be good\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esports, clearing the way for houdini spec work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Right, it is a bit hard to define what false on us vs houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eand the other teams though.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;bnutter\u0026gt; I'm not concerned about who owns it. It doesn't have to be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ean OKR, not all work you do needs to be. Writing a spec would be a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003egood goal but that doesn't seem to be what this is about.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Some very good points, this might not make sense as a set of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eexplicit goals. Let's talk about it offline and move along.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Improve capabilities of the web platform.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Have an experimental out-of-tree node measure API. - jchaffraix ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; This might be a little bit too ambitious, might be blocked by\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe high-level design re-architecture work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; The Q1 goals where scoped too narrow in this regard, I\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethink it is doable and want us to have stretch goals.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Rationalize text rendering. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Make complex text as fast as simple text. - eae, szager, kojii ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Remove the simple text code path. - eae, szager, kojii ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Now this is a very ambitious set of goals, complex text is about\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eseven (7) times slower than complex at the moment.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Go big or go home, right?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Is this about making Arabic as fast as English?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; No, it is about making English text going down the complex path\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eas fast as the same English text going down the simple path.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Ok, sounds more doable.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Still a ton of work and in practice this will significantly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003enarrow, if not completely close, the gap between scripts. Performance\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewill be more about whether ligatures are used or not. English can use\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eligatures.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Improve code health. ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Move line layout to LayoutUnit. - szager, dsinclair ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Finish root layer scrolling. - skobes ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Fix 30% of clusterfuzz asserts. - cbiesinger ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Ensure that bugs get automatically filed for clusterfuzz\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003easserts. - cbiesinger ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Dan, do you want to take this one?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; Sure. As for line layout this KR is about finishing the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ework we are doing now - carrying the Q1 goal forward.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;skobes\u0026gt; For root layer scrolling it is mostly things we are already\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edoing.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Sounds good. Moving on to clusterfuzz, is this work we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ewant to be doing? Should we continue with it?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; I'm not sure.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Are you talking about stopping the work to fix asserts?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Is this work something we as a team thing is really\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eimportant? If not we should focus on broader team goals. Perf,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edeveloper productivity and code health.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Debug builds are unusable due to assertions, hampers\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edeveloper productivity. Many of the asserts might be real bugs that we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edon't know about.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; We might have bigger fish to fry?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;christan\u0026gt; I want to keep doing it and think it is important. Perhaps\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003enot at the highest priority?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dsinclair\u0026gt; How about we drop fix 30% goal and file bugs for asserts\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethen fix them ad-hoc?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;christan\u0026gt; Good idea.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Sounds reasonable, I agree with Christian that it is important\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eand work we should be doing. Having Christian do all the work himself\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eand in bulk is not a good use of his time though.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ O: Improve web compatibility.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Update flexbox implementation to match latest version of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003especification. - cbiesinger ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;dglazkov\u0026gt; We should think about interoperability as function of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eproductivity, we need to thing about how much time a developer spends\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eon something like flexbox interoperability between implementations.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; I raised the same problem, web compat can or cannot be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eout of scope depending on impact on developer productivity. How do we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eprioritize web compat vs other things we want to do.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; I want to continue with flexbox spec changes, think they\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eare important. Firefox and IE are mostyl compatible now, we're very\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edifferent.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; The other vendors are compatible, we are not. This makes life\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ehard for developers. I think this is really important, especially\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003esince flexbox is one of the flagship layout primitives that we're\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003etrying to push developers towards.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Sounds reasonable, just wanted to have the discussion.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; I'm glad you bought it up, that is one of the key reasons we're\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ehaving these meetings.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Import w3c test suites. - cbiesinger ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Could you explain this one Christian?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Relatively easy to do right now, we have a script that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edoes it. Need to figure out what to do about failing tests.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Perhaps we should just import with failures and add to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eTestExpectations?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Josh might work on this so it could be out of scope for us. We\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eshould sync up with him and his team.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Improve CJK vertical text support - kojii ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ internal discussion, redacted ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Raise the “Passed” rate of CSS Writing Modes Level 3 - kojii ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Do you want to talk about writing mode as well?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; We do worse than most browsers, see\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ehttp://test.csswg.org/harness/results/css-writing-modes-3_dev/grouped/\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- webkit is 82%\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;cbiesinger\u0026gt; Is WebKit Blink?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; We've asked the working group to split it, for now the WebKit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003enumber mostly means Blink.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; What would this work entail? We need something we could measure.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; Firfox is behind a flag, should launch soon. IE we have not tested much.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Do we want to support all? What would be a good goal to aim for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ehere? Specific properties we want to support? Increase the number by a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ecouple of percentage points?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Is unclear. How much are we passing right now?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Never mind, found it. We're at 80.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; We used to be at 60, in Q1 i raised it to 80.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;jchaffraix\u0026gt; Should we aim for 100?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; Coverage goes down as tests gets add. Is 85% too conservative?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ internal discussion, redacted ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Makes sense. Let's aim for 85.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ KR: Build the plan to support updated Unicode Bidirectional ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[ Algorithm - kojii ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Updating the UBA is something that we've been punting for years,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe i18n team is really pushing for it.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; Top priority for BIDI team.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Will be a lot of work given that we have a custom version for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003espeed. Whether we update our custom one or improve the performance of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ethe new one it'll be a lot of work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;kojii\u0026gt; Need to investigate, goal is to have a plan.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;julien\u0026gt; So the deliverable is to have a plan, not to do the work?\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u0026lt;eae\u0026gt; Yes.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/thursday-april-2-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2488225599053604924"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2488225599053604924"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2488225599053604924"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"thursday-april-2-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2779503763067892217"},"published":{"$t":"2015-09-14T22:39:20.421Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T22:39:57.165Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, September 14, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUpdates since last meeting (on Monday, August 31st):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Landed flexbox change for overflow auto, it's causing a regression\u003c/div\u003e\u003cdiv\u003e on Mac only in how scrollbars are pained. Hope to sync up with skobes\u003c/div\u003e\u003cdiv\u003e about that today and resolve it. Other than that no problems and looks\u003c/div\u003e\u003cdiv\u003e like it'll stick. (szager)\u003c/div\u003e\u003cdiv\u003e- Landed change running a comb through the scorll bounds code. Should\u003c/div\u003e\u003cdiv\u003e be pretty reliable for getting minimum and maximum scoll positions\u003c/div\u003e\u003cdiv\u003e now, while it wasn't before. Likely to have fixed a bunch of off-by-\u003c/div\u003e\u003cdiv\u003e one scroll bound bugs. (szager).\u003c/div\u003e\u003cdiv\u003e- Intent to fix regreision and talk about next step for root layer\u003c/div\u003e\u003cdiv\u003e scrolling with skobes this week. (szager)\u003c/div\u003e\u003cdiv\u003e- sataya.m from Samsung has fixed almost all of the scrollbar tests,\u003c/div\u003e\u003cdiv\u003e these are mostly related to custom scrollbars. (skobes)\u003c/div\u003e\u003cdiv\u003e- Trying to figure out coordinated scrollbars this weeks, turn on for\u003c/div\u003e\u003cdiv\u003e just the main frame and only for certain platforms. Would be nice to\u003c/div\u003e\u003cdiv\u003e use this more broadly. (skobes)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Need to re-think approach to deprecating sizing keywords due to leaks\u003c/div\u003e\u003cdiv\u003e in CSS parser which resulted in the patch to be reverted.\u003c/div\u003e\u003cdiv\u003e- Will sycn up with ojan re f2f. (cbiesinger)\u003c/div\u003e\u003cdiv\u003e- At CSS face-to-face it was decided to standardize on chrome-impl of\u003c/div\u003e\u003cdiv\u003e table fixup (i.e. not do it) which will save us some work. (ojan)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [\u003ca href\u003d\"http://crbug.com/79180\"\u003ecrbug.com/79180\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- No update since last week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed handling for unbreakable blocks at top of a column/page.\u003c/div\u003e\u003cdiv\u003e- Updated handling of style changes to ensure they happen in tree order\u003c/div\u003e\u003cdiv\u003e for multicol.\u003c/div\u003e\u003cdiv\u003e- Fixed min-height to not have an effect if content is taller than\u003c/div\u003e\u003cdiv\u003e multicol and height is set to auto.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003ca href\u003d\"http://crbug.com/495288\"\u003ecrbug.com/495288\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Still working on line layout api, down to some asserts and debug only\u003c/div\u003e\u003cdiv\u003e code before we can get rid of the LayoutObject in InlineBox. (pilgrim)\u003c/div\u003e\u003cdiv\u003e- API is as broad as it needs to be, has all the relevant methods,\u003c/div\u003e\u003cdiv\u003e thinking about next steps. (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, drott, kojii)\u003c/div\u003e\u003cdiv\u003e- Continued work on shaper driven segmentation: (drott)\u003c/div\u003e\u003cdiv\u003e - Implemented an iterative approach so that for each font we can\u003c/div\u003e\u003cdiv\u003e collect all segment supported by the font.\u003c/div\u003e\u003cdiv\u003e - Started to work on system font fallback, with the font fallback\u003c/div\u003e\u003cdiv\u003e iterator now also able to collect and fallback on system fonts.\u003c/div\u003e\u003cdiv\u003e- Sent out mail about approach to modernazing system font fallback,\u003c/div\u003e\u003cdiv\u003e on Windows 8.1+ and Mac there are sane fallback APS we could use.\u003c/div\u003e\u003cdiv\u003e Android has a fallback XML file that is resonable and on linux\u003c/div\u003e\u003cdiv\u003e fontconfig provides the necesarry information but returns way\u003c/div\u003e\u003cdiv\u003e too many fonts. (drott)\u003c/div\u003e\u003cdiv\u003e- Thinking about vertical text, needs reimplementaiton. One idea is to\u003c/div\u003e\u003cdiv\u003e merge script iteartion with orientation. Trying to implement run\u003c/div\u003e\u003cdiv\u003e segmenator which uses the script iteator and an orientation iteratior.\u003c/div\u003e\u003cdiv\u003e Will continue workin on it this week. (drott)\u003c/div\u003e\u003cdiv\u003e- Working on complex path blockers and recent regressions. (kojii)\u003c/div\u003e\u003cdiv\u003e- Working on CJK font fallback issues. (kojii)\u003c/div\u003e\u003cdiv\u003e- Updating CSS Writing Modes spec for resolutions from F2F. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating unprefix planning for Writing Modes. (kojii)\u003c/div\u003e\u003cdiv\u003e- Writing Modes spec issues/edits, unprefix planning, and tests. (kojii)\u003c/div\u003e\u003cdiv\u003e- Discussing with drott@ on run segmentation for vertical flow. (kojii)\u003c/div\u003e\u003cdiv\u003e- Looking into high-priority fonts issues. (kojii)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc:\u003c/div\u003e\u003cdiv\u003e- Removed webkit linebox contained. (wkorman)\u003c/div\u003e\u003cdiv\u003e- Happy about juliens documentation improvements. (wkorman)\u003c/div\u003e\u003cdiv\u003e- Reverted patch to remove old containg block logic as it turns out it\u003c/div\u003e\u003cdiv\u003e was still needed. Will revisit and try again with tests. (ojan)\u003c/div\u003e\u003cdiv\u003e- Fixed handling of floats for blocks that establishes a new formatting\u003c/div\u003e\u003cdiv\u003e context. (mstensho)\u003c/div\u003e\u003cdiv\u003e- Fixed float margin logic to not collapse margins on page or column\u003c/div\u003e\u003cdiv\u003e boundaries. (mstensho)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics:\u003c/div\u003e\u003cdiv\u003e- leviw in Amsterdam for a Polymer summit, back on Thursday.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-september-14-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2779503763067892217"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2779503763067892217"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2779503763067892217"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-september-14-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3170345263335741300"},"published":{"$t":"2015-10-19T18:54:29.684Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-10-19T18:54:46.015Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, October 19, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, October 12th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a regression from coordinated scrollbars. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Made progress on getting RTL working with root layer\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scrolling (but still broken for various reasons). (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed an issue where elements become unscrollable\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e after an animation. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discovered the cc side of smooth scrolling has been totally\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e broken for a while due to inner/outer viewport issues; ymalik\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e has a fix pending. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on getting unit tests passing with root layer scrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e turned on, long slog. Making progress. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got the RTL issue (where the initial position of the scrollbar\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e was incorrect for RTL frames) all about figured out, on to the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e next one. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent some time last week going through flexbox bugs, doing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bug triage and fixing issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discovered a couple of new fun bugs involving negative margins\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e where the resulting flexbox could end up getting a negative size.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Turns out the spec isn't clear on the correct behavior, working with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tab and fantasi on getting it clarified.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on the usual suspects; nested multicol, get it good enough for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e printing, and so on.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Also working on fixing a blocker regression pertaining to printing an\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e overflowing flexbox inside a bottom-aligned fixed positioned box\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (in the Chrome UI). The fix is straight-forward (believe it or not), but\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e I'm struggling with coming up with a LayoutTest. Looks like I'll have\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to fix the printing test framework first (or possibly even the engine itself).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week, working on the isolated worker spec which is a spec\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e about a separate js exec context for all custom houdin stuff.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Focusing on the CSS Paint API spec this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Preparing for TPAC, will be there for the entire event. Will gladly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bring up issues or concerns on behalf of others.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Still working on the line layout api, going thgough layout svg,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e converting calls to go through the API. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got a couple of smaller patches in last week, working on a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e larger one this week. Probably about another two weeks of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e SVG api work remaining. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Share more code between SVG text and CSS text. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed fonts when lang attribute is set, investigation continues. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigate inheritance of anonymous inline and partial fix. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Pushing Writing Modes Level 3 to CR. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Proposed Update of Unicode Vertical Text Layout (UTR#50)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to publish soon. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on line break spec issues with CSS WG and Unicode. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Enabled complex text as experimental web platform feature, this\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e results in _all_ text going down the complex text path. If it sticks the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e plan is to enable it for stable and then (eventually) delete the simple\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e text code path (yay!). Required 90% of all layout tests to be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e rebaselined, due to problems with our tooling this mostly had to be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e done manually. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a bunch of ref-tests to make them more resilient against\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e minute text rendering differences. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Speculative fix for a top windows crasher where fontMetrics is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e null during line height computation. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on getting shaper-drive-segmentation landed, very close\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e now but a few issues remaining. Should land this week! (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a batch of bugs around lists, selection gaps, and caret. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Meeting with joel about pick up running rebaseline bot. Will\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e run it on interim basis. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Paint performance optimizations for slimming paint v2 where the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e compositor side of things wants to make use of rtrees, needs\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bounds of display items. Will change to accumulate during paint,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e should lead to a nice performance win. (wkorman).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We'll likely need to pull someone off their current project to help out\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with intersection observer, it's a top blink-level priority for the quarter\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and we need to make sure we make progress on it. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- jsbell gardening this week and helping out with cr-blink triage.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-october-19-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3170345263335741300"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3170345263335741300"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3170345263335741300"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-october-19-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4127264712026260419"},"published":{"$t":"2015-06-18T22:27:12.130Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-18T22:28:11.498Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tuesday, June 16, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eWe had Sergio Villar (svillar@igalia.com) from Igalia join us this week.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eSergio is a long term contributor working primarily on CSS Grid Layout.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on Monday, June 8th):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed hit testing by making the LayoutView absolute-positioned.\u003c/div\u003e\u003cdiv\u003e (skobes) [crbug.com/495856]\u003c/div\u003e\u003cdiv\u003e- working on HitTestRequest::IgnoreClipping [\u003ca href\u003d\"http://crbug.com/499053\"\u003ecrbug.com/499053\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e and the zoomed-out viewport issue.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing to update to match spec, progress according to plan.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [\u003ca href\u003d\"http://crbug.com/79180\"\u003ecrbug.com/79180\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed a regression caused by the recent migration from parenthesis\u003c/div\u003e\u003cdiv\u003e to brackets.\u003c/div\u003e\u003cdiv\u003e- Working on adding a new step to the track sizing algorithm.\u003c/div\u003e\u003cdiv\u003e- We need to find someone to help with grid layout reviews to unblock\u003c/div\u003e\u003cdiv\u003e further work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixing multicol fuzzers. Looks like the fuzzer storm has finally\u003c/div\u003e\u003cdiv\u003e calmed down this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [\u003ca href\u003d\"http://crbug.com/458222\"\u003ecrbug.com/458222\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Improved API between core/fetch and the rest of core.\u003c/div\u003e\u003cdiv\u003e- A bunch of small crash/use-after-free fixes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, kojii)\u003c/div\u003e\u003cdiv\u003e- Fixed a long-standing issue in positioned objects layout ordering.\u003c/div\u003e\u003cdiv\u003e (kojii)\u003c/div\u003e\u003cdiv\u003e- Unicode variation selectors support in progress, waiting for reviews.\u003c/div\u003e\u003cdiv\u003e (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating orthogonal writing modes issues. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating abspos issues in vertical flow. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating/triaging failures of imported CSS Writing Modes tests,\u003c/div\u003e\u003cdiv\u003e also working with external contributors to fix in upstream. (kojii)\u003c/div\u003e\u003cdiv\u003e- Working on CSS Writing Modes spec issues, primarily to simplify rarely\u003c/div\u003e\u003cdiv\u003e used features. (kojii)\u003c/div\u003e\u003cdiv\u003e- Working on shaping word-by-word, initial prototype shows very\u003c/div\u003e\u003cdiv\u003e promising results. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc\u003c/div\u003e\u003cdiv\u003e- Added option to dump line box tree when dumping layout tree. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLayout Bugs:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe currently have 1592 open bugs for the Cr-Layout label.\u003c/div\u003e\u003cdiv\u003e- Untriaged: 475 \u003c/div\u003e\u003cdiv\u003e- Priority 0: 0\u003c/div\u003e\u003cdiv\u003e- Priority 1: 135\u003c/div\u003e\u003cdiv\u003e- Priority 2: 958\u003c/div\u003e\u003cdiv\u003e- Priority 3: 19\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe need to get the number of bugs down so from now on each weekly update\u003c/div\u003e\u003cdiv\u003ewill include the number of bugs for each category and the delta from the\u003c/div\u003e\u003cdiv\u003eweek before.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics:\u003c/div\u003e\u003cdiv\u003e- skobes OOO 6/17-6/22\u003c/div\u003e\u003cdiv\u003e- drott getting up to speed.\u003c/div\u003e\u003cdiv\u003e- szager OOO next week.\u003c/div\u003e\u003cdiv\u003e- drott OOO Thu-Fri this week.\u003c/div\u003e\u003cdiv\u003e- eae gardener Wed-Thu next week.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-june-16-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4127264712026260419"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4127264712026260419"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4127264712026260419"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"tuesday-june-16-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4709295129339616770"},"published":{"$t":"2016-03-16T17:56:39.881Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-16T17:56:46.815Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tuesday, March 15, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, March 7):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a smooth scrolling RTL bug and a smooth scroll text selection\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bug.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed how we reset state between layout tests.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Reached out to conops and came up with a plan to monitor and address\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e user feedback and concerns.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- This week, working through a few minor smooth scrolling bugs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to resume work on scroll anchoring, getting it to work correctly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with different position attributes.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Been working on flexbox, big surprise, turns out that when I through I\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e had finally fixed all the scrolling issues I had not, in fact, fixed\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e all the scrolling issues. *collective expression of sadness*\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e There are a number of new regressions and release blockers that I'm\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e working to burn down. The bug that keeps on giving.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Almost done with percentage children, patch out for review.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- See mail to blink-dev for an update on Grid -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Devtools for main thread worklets. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed initial paint() function, (this does nothing, just parsing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e code). (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to finally send out the patch for PaintRenderingContext2D for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e review. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Might get to the Paint API class/instance management CL. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started making progress on resize observer. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Layout API skeleton is done, looks like a bigger project than we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e thought. LayoutView alone has over 100 references that need\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e converting. Have started migrating first HTML element class to serve\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e as a template for future work. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We're doing a prototype for layoutNG inside of out current layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e engine. Part of the motivation here is to address big architectural\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e issues in the layout engine itself and part of it is to support the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e houdini effort to implement custom layout. Shoehorning custom layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e into out existing legacy layout would be very hard and require a lot\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e of hacks and isn't really something we want to do. Especially since we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e already know that our layout architecture needs quite a bit of work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Essentially we're trying a new approach to achieve many of the goals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e identified during the big layout refactoring discussion (a.k.a. Moose)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e last year.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e What we're trying to see is if embedding layoutNG within the legacy\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e system is practical, determining whether we can support both in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e parallel and use the new system for certain sub-trees.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Made more progress than expected, have a prototype that builds and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e supports very basic block layout and paints. Will keep working for the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e rest of the week, should have data to share by the end of the week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Work is on a \u003c/span\u003e\u003ca href\u003d\"http://chromium.org/\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003echromium.org\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e experimental branch, see bug for URI.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (leviw, dgrogan, ikilpatrick, shanestephens)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Intersection observer work is dragging on for much longer than\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e originally anticipated. Got a bunch of feedback on the intent to ship\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that will be incorporated into the feature before shipping. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrap up intersection observer work leading up to the branch point.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed two emoji fixes for line breaking and for skin tone modifiers,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e these are now enabled and work fine on Android. Works with line\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e breaking and shrink-wrapping too. One remaining issue flagged by the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e android team is with backspacing in content-editable where we delete\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e character by character rather than glyph by glyph. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helped out with font regression, tracked down the issue and worked\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with windows team and testers to resolve it. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Resuming work to fixing shaping across unicode ranges, should have\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a patch ready by EoD. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Resume small-caps work. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looking into line breaking performance, working on an implementation\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that would take advantage of per glyph measurements to find the ideal\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e position and then scan backwards for the first preceding breaking\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e opportunity. Should performance a lot better than our current\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implementation which always scans from the front of the string and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e considers each break opportunity up until the end of the line.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Handling of collapsible white-space might be a problem, it's currently\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implemented as a part of both the measure, line break and paint steps\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e rather than as a separate stage. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed first patch, Table cell background painting. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Asyncathon last week, bringing together all the rendering leads to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e discuss our strategy around async for the next year. See separate\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e update from Dru for details. (eae, ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed rebaseline bot and re-worked it to run as a separate service as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e opposed to as a client app on a desktop machine. (wkorman, szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helped the pain team diagnose a couple of top crashers. All have now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e been resolved. More lifecycles issues. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Talked to julien and told him about my work on collapsed borders, he\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e liked what I did and agreed to review it. (atotic)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-march-15-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4709295129339616770"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4709295129339616770"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4709295129339616770"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"tuesday-march-15-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5851732320596199331"},"published":{"$t":"2016-02-17T00:00:24.906Z"},"updated":{"$t":"2017-04-20T16:34:23.164Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-02-17T00:00:32.180Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tuesday, February 16, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, February 8th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on scroll anchoring, investigating a crash where it looks\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we're holding stale pointers. (skobes) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Smooth scrolling is under control one outstanding bug where\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we're not handling the interaction between man and cc correctly. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking at a scrollbar-renders-weirdly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bug, most likely it's the compositor pointing to a stale Scrollbar,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e no fix yet. (szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/553860\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/553860\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have quite a few release blockers. All the same issue, related to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e autoflow auto. Finally figured it all out. Stefan made a change to delay\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e overflow calculation to fix a scrollbar bug awhile ago. It turns out the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fix wasn't quite correct in regards to flexbox Working on a better\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implementation of. Going to make a patch to do that and then to clear\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the flexbox main cache which should be the right approach.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Specifically, flexbox has code, actually in LayoutBlock used for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e flexbox, that handles overfow auto is after layout, called something\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e like updateOverflorAfterLayout. That then checks if we overflow and if\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e auto then adds scrollbars and triggers another layout. But if flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we don't do it for every flexbox change as that wouldn't work for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e nested flexboxes, we delay until after last flex. The new fix is to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e do relayout without updating the cache for the flebox.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week was working on Worklet stuff, working with AudioWG to see\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e how it interacts with audioWorklet and their needs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- This week will start on PaintRenderingContext2d, which is the subset\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e of canvas for custom paint.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Removed remaining uses of deprecated InlineBox::layoutObject()\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e accessor and made it private. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Had to add many methods to the API. (dgrogan) :(\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started removing uses of shim-like LayoutObject* LineLayoutItem::\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e operator(). (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on next part of api work, have a little like starter\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e patch out, just need to hit CQ button. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Going to work on a poof of concept work to see if we can build\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e LayoutNG and have it co-exitst with and interact with our current\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout code. Will do work on branch but in public. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a patch out for for LineLayoutTextSVG class. Dave identified as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e necessary, working through Levi's feedback. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Style containment landed this morning, yay!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Trying to get the spec solid so we can get feedback from other\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e browser vendors. Getting other browsers on board is going to be the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e long pole in shipping. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Probably not going to make M50. Spec work needs to occur. Not getting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reviews as quickly as I'd like. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed orthogonal writing mode issue, working on following fixes.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Support accept-language in font fallback for Windows and Android.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating snap-height property. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigated Chrome's coverage of font-variant-* sub properties. Only\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font-variant-ligatures supported, the rest rather looks like CSS 2.1.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Filed bugs about font-variant being in a state of a very old version\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e of the spec. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Experimented and started a true small-caps implementation (non-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e synthesized), checked for AAT small-caps feature in fonts on Mac.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sent Intend to Implement for font-variant-caps. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Review of Koji's multi-locale font-fallback Android CL. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on an issue involving the handling of combining emoji (two or\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e more emoji joined together with a zero with joiner) where the metrics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e cache has incorrect measurements causing extra line wrapping. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Various layout release blockers. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed regression around width:50% handling for tables.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/244182\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/244182\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix incorrect handling of percentage heights inside table cells,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e cased a small issue for hangouts but got them to fix it on their end.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/353580\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/353580\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a renderer crash. [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/570139\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/570139\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Next week or two will take stab at flipped blocks approach.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e News at 11! (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Correctness fix for paint performance with regards to VisibleRect. We\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e added VisibleRect which is used for paint performance, not yet live.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e VisibleRect is essentially the CullRect but in the space of the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e backing graphics layer. Needed for CC interaction. It didn't correctly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e handle subpixel accumulation before. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Tons of release blockers (leviw), will try to rebalance. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Beginning to look at forced layout, (potentially reducing time spent\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e in forced layout / number of forced layouts). (cbiesinger)_\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott going to Tokyo on Thursday. drott/kojii/behdad plus people from\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Mozilla meeting for a text workshop.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-february-16-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5851732320596199331"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5851732320596199331"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5851732320596199331"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"tuesday-february-16-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1016386796419319802"},"published":{"$t":"2015-10-19T18:54:07.386Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-10-19T18:54:12.750Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, October 12, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, October 5th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Misc root layer scrolling fixes. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to start working on smooth scrolling this week. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed height calculation to consider tallest column.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- FIxed handling of minimum for fill available.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Reworked column rebalancing.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix handling for block pagination struts.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Changes to break handling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- API fixes fot SVG text chunk handling. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed further selection painting bugs. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed measurement for RTL list-markers where we reversed the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e text twice causing incorrect ordering and metrics. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued work on shaper driven segmentation, will start to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e land patches upstream this week. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Unprefixed CSS Writing Modes landed, working on some follow up\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fixes. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Trying to better integrate CSS text code path with SVG text code\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e path for vertical flow. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Cleaning up tests in CSS WG and specs for coming CR. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drougan started on his first bug, getting familiar with the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Blink code base.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott hit size and encoding limits in Skia test infra, working\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with them to resolve it.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Change in review for list marker spacing. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Lots of tracing, test case fiddling, and reading of code for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e WebViewImpl::layout xploring whether there are further layout/paint\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e optimizations we can make. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continuing work on documentation (deep dived into reflection to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e understand the design - \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/1391943005\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://codereview.chromium.org/1391943005\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e +\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e more PaintLayer documentation). (jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Mostly done documenting important objects (hopefully I could finish\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e these this week), after that is deep diving into features (transform,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e paint invalidation, baselines...). (jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- eae \u0026amp; leviw in Helsinki to work with drott until Thursday.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbisinger on vacation this Monday.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drougan back from recruiting trip.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-october-12-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1016386796419319802"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1016386796419319802"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1016386796419319802"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-october-12-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1470604234925796583"},"published":{"$t":"2015-12-01T17:34:43.163Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-12-01T17:34:51.602Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, November 30, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, November 23rd):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flag specific expectations for root layer scrolling landed. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have patch for RTL scrollbar placement, investigating custom scrollbar\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e test failures. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Smooth scrolling; working on main thread toggled, compositors driven\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e animations, a little complicated but have a prototype. On track to hit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e OKR. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Still problems with flexbox/scrollbars (need to add height of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scrollbar to flex basis). Beed to sync with cbiesinger, original\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e problem with devtools still exists. Need to figure out how to test and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e how to proceed. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Release blockers and misc flexbox bugs. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Found out that support for column-span:all is really broken in nested\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fragmentation contexts. So that's what I'm currently working on. If I\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e find nothing else after this, I'll then be ready to file the patch\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that adds support for printing multicol.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on design doc for worklets, will finish today and circulate.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to finish up the worklet spec this week and started feeling out\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the, as of yet unnamed, new canvas spec (splitting RenderContext2D\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e into discrete parts).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Start writing patches for worklets.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eStandards work\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Preparing to upstream flexbox tests, we now have a version of check-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout that runs on top of testharness. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to send Intent to Implement this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have pending spec patch that needs to be upstreamed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The memory model for intersection observer is really complicated,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e especially when multiple documents are involved. Still not sure about\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e how it fits in with oilpan. Making solid progress but getting the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e memory model right is tricky and time consuming. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Updated memory infra CL (tracking font related memory usage), had\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e discussion with memory team. We might want to move some allocation to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e use partition alloc. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Verified ZWJ emoji android fix. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started proparing cl for removing simple text, there are a few\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e dependencies left, addressed two but still a few left. One on svg\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that might have perf impact. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- HarfBuzz roll to 1.10, might want to backport to m48. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Improved cache key and invalidation logic for shape cache, should\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e lead to reduced memory usage. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a bunch of text related ASSERT. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Always use complex text enabled on trunk. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan, jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Brain dump from jchaffraix to dgrogan continues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Trying to figure out the madness that is border collapsing and come up\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with a plan. (dgrogan, jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBug Health\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- On track to not only meet but exceed bug health OKRs:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Reduced unconfirmed/untriaged bug count by 60% (690 down to 377),\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e OKR is 50%.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Reduced total bug backlog by 16% (2310 down to 1927), OKR is 15%.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - A lot of hard work by the entire team, thank you everyone! Let's\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e keep this up!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Worked on checked-layout.js that works with test harness, allows for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e upstreamable layout tests. (jsbell)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added support for flag specific test expectations, will greatly aid in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e doing feature work and large refactorings going forward. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed CounterNode crasher. (eae)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-november-30-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1470604234925796583"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1470604234925796583"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1470604234925796583"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-november-30-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1645348530912047440"},"published":{"$t":"2015-03-09T21:36:30.859Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-03-09T21:36:40.212Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 9, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- Continuing work on exporting counters.\u003c/div\u003e\u003cdiv\u003e- Adding layout metrics to the blink performance tests.\u003c/div\u003e\u003cdiv\u003e- Working on simplifying the layout metrics implementation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Ran into an issue with paint invalidation rects that block the later\u003c/div\u003e\u003cdiv\u003e scroll implementation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout (dsinclair) [crbug.com/450612]\u003c/div\u003e\u003cdiv\u003e- Renamed RenderTreeBuilder to LayoutTreeBuilder.\u003c/div\u003e\u003cdiv\u003e- Renamed various methods; renderer() to layoutObject(), rendererIs* to\u003c/div\u003e\u003cdiv\u003e layoutObjectIs*, and createRenderer* to createLayoutObject*.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Spent much of last week discussing the measurement API with\u003c/div\u003e\u003cdiv\u003e stakeholders.\u003c/div\u003e\u003cdiv\u003e- Trying to determine whether there is a use case for the measure API in\u003c/div\u003e\u003cdiv\u003e isolation or if it only makes sense as part of as part of custom\u003c/div\u003e\u003cdiv\u003e layout. If you have a use case reach out to jchaffraix.\u003c/div\u003e\u003cdiv\u003e- No doubt that there is need for a text metrics API.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (hartmanng, szager) [crbug.com/321237]\u003c/div\u003e\u003cdiv\u003e- Dealing with layout test failures, five-ish tests needs debugging on\u003c/div\u003e\u003cdiv\u003e linux, looking into windows at the moment. Mostly false positives,\u003c/div\u003e\u003cdiv\u003e some actual failures. (hartmanng)\u003c/div\u003e\u003cdiv\u003e- Dealing with layout test failures on Mac. (szager)\u003c/div\u003e\u003cdiv\u003e- Spent a lot of time fixing broken tests, eae argued this might not be\u003c/div\u003e\u003cdiv\u003e the best use of my time. Will mark broken tests as broken going\u003c/div\u003e\u003cdiv\u003e forward to unblock the conversion work. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Flexbox work is taking a bit longer than expected, the win-width auto\u003c/div\u003e\u003cdiv\u003e change took all of last week. Still dealing with test failures.\u003c/div\u003e\u003cdiv\u003e- Two week estimate was a bit too optimistic.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [crbug.com/458222]\u003c/div\u003e\u003cdiv\u003e- Continuing on isolating the fetch directory from the rest of core.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBlink componentization (pilgrim) [crbug.com/428284]\u003c/div\u003e\u003cdiv\u003e- Working on modularizing various things in core, storage is now\u003c/div\u003e\u003cdiv\u003e modules/storage.\u003c/div\u003e\u003cdiv\u003e- Next up is (blocking on fetch) is core/xml.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, wjmaclean, eae)\u003c/div\u003e\u003cdiv\u003e- Continuing work on text iterator. Trying to modularize it to make it\u003c/div\u003e\u003cdiv\u003e easier to understand. Many misnamed and confusing methods, tyring to\u003c/div\u003e\u003cdiv\u003e rationalize that. (wjmaclean)\u003c/div\u003e\u003cdiv\u003e- Line breaker optimizations based on profiling data resulted in ~10%\u003c/div\u003e\u003cdiv\u003e speedup for line-layout and text perf tests. (eae)\u003c/div\u003e\u003cdiv\u003e- FontMetrics::ascent(), descent(), and height() optimizations resulted\u003c/div\u003e\u003cdiv\u003e in up to 15% speedup for complex text perf tests, ~3-5% for simple\u003c/div\u003e\u003cdiv\u003e text. (kojii)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc\u003c/div\u003e\u003cdiv\u003e- Helping jochen on git repository merge. Their strategy is sound and\u003c/div\u003e\u003cdiv\u003e they are doing the right thing. Will help with infra work as needed.\u003c/div\u003e\u003cdiv\u003e (szager)\u003c/div\u003e\u003cdiv\u003e- Created minimized tests case and tracked down root cause for starter\u003c/div\u003e\u003cdiv\u003e bug, was an invalidation bug. (wkroman)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics\u003c/div\u003e\u003cdiv\u003e- cbiesinger in SF next week.\u003c/div\u003e\u003cdiv\u003e- eae out Tue-Thu this week and Mon-Tue next week.\u003c/div\u003e\u003cdiv\u003e- wjmaclean out Thu-Fri this week and all next week.\u003c/div\u003e\u003cdiv\u003e- paulmeyer won't be working on layout for the next couple of weeks.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-9-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1645348530912047440"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1645348530912047440"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1645348530912047440"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-march-9-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4676964154747021223"},"published":{"$t":"2015-11-24T01:23:09.169Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-11-24T01:23:22.939Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, November 23, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBig update this weeks as we didn't have a meeting during BlinkOn and I\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eapparently forgot to send out notes for last weeks meeting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, November 2nd):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Unified animation curves across Blink and CC. They now share the same\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e curve. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looking into RTL scrollbar placement for root layer scrolling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Re-started work on root layer scrolling after focusing on smooth\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scrolling and bugs for a few weeks. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed fix for scrollbar clipping, basically scroll containers should\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e clip their scrollers but they don't. Chocking they didn't but now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e works as expected. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a number of regressions relating to recent changes in behavior.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent some time not fixing a flexbox bug for a change, had to do with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e flexbox and scrollbars. cbiesinger came in and stole my thunder.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Thank you :) (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed the release blocker szager was working on. Was investigating a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e different bug that turned out to be the same. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed another release blocker, affecting google translate.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Moar release blocking bugs! (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Simplified interface of GridResolvedPosition. (sergio)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Grid sizing under min|max constraints with implicit sizes. (sergio)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added support for implicit grid before explicit grid. (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Absolutely positioned items inside grid adjustments. (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed a small refactoring of grid layout code. (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Gave talk at BlinkOn 5 about recent work on grid layout and what the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e future holds. (javif)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Bombing Levi with multicol patches as usual, and he's an unstoppable\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reviewing machine.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The way it looks now, we're one patch away from being ready to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e introduce multicol for printing. Hopefully, I'll file that patch today\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e or tomorrow, and then add support for printing later this week. But\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we'll see...\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Writing design doc for worklets, will circulate for feedback at EoW.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Custom line layout discussions and hack-a-thon in Tokyo two weeks ago,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we came up with two proposals that we're refining and will prototype.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (eae, shans)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Planning to re-implement ruby support on top of said API, got input\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e from kojii and started experimenting. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eStandards work\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Published 2nd CR of CSS Writing Modes Level 3. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Published UTR#50 Unicode Vertical Text Layout revision 15, supporting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Unicode 8.0. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Line layout, last patch got rid of it in LineText delayed due to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e conflicting advice and opinions. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to send Intent to Implement this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have pending spec patch that needs to be upstreamed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Everyone understands how it should work but managing the lifetime of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the objects are extremely hard is it involves relationships between\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e two objects with very different documents and lifetimes. Makes it very\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tricky. You'd think oilpan would make it easier but so far it seems\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that the opposite is true. There is an obvious leak and it's not clear\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e how to resolve that without having to do a lot of manual bookkeeping.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Trying to figure out a way to make it work in an oilpan world, still\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e not clear if that is even possible. Working with adamk to try to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e figure it out, getting closer but haven't nailed it yet. Similar to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e mutation observer in that it is really difficult not to leak. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Once lifetime management has been resolved the plan is to get it into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the code base behind a flag. Then to have people give it a try and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e kick the tires while, at the same time, continue to spec work and then\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e ship (unflag) early next year in beta, assuming spec work isn't\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e delayed. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent time helping drott investigate an emoji joiner issue on android.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (workman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed emoji joiners on Windows. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Worked on regression due to the new shaping code where a secondary\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font wasn't loaded correctly. Turns out to be a copyright protection\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e strategy used by some fonts. Used on \u003c/span\u003e\u003ca href\u003d\"http://virginamerica.com/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003evirginamerica.com\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and a few other\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e high profile sites. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrote and test emoji complex path on Webview_shell, merged to M47 and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e M48 (Thanks to wkorman@ for sharing Android tricks and test phone),\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reached out to WebView TL in LON regarding final verification on the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Beta build. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigated T-crossbar issue: woff2 or freetype hinting issue,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/550523\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/550523\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Prepared CL for font code memory infra instrumentation, instrumenting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e word cache done, but larger remaining issue with tracking web font\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e blobs down to SkTypeface. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussed deduplicating fallback font streams on linux with skia\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e folks, fmalita@ added API to SkFontconfigInterface, which on closer\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e inspection unblocks as, we can implement deduplication on Blink side\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/524578\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/524578\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Prepared harfbuzz roll, failed building on Mac, filed issue, fixed by\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e behdad, new release expected. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating Houdini custom line layout and ruby on top of it.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating bidi-isolate by default for elements with dir attributes,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e working with WebKit, Gecko, Edge, and W3C I18N WG. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- A few issues in bidi-isolate were found, working on them. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Changed the life time of ShapeCache instances and the logic for cache\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e invalidation. Resulted in a massive layout speed up, more than\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e offsetting the regression we saw on a few micro benchmarks following\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the switch to always use the complex text path. Unblocks the effort to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e ship complex-by-default. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking into further tweaks to ShapeCache lifetime and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e invalidation, more work to be done. Should reduce memory usage. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan, jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating table bugs with jchaffraix. Looking into an issue where\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e there there are too many borders on our tables due to a bug in border\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e collapsing. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helping dgrogan ramp up on tables. Here every Monday for that reason.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e He has one patch up, looking good! (jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBug Health\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Both eae and jchaffraix spent a lot of time last week doing bug triage\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e as per usual. Another two weeks or so should see our untriaged backlog\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e go town to zero! Yay!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Total bug backlog, down by ~18%. If we keep this level of effort up we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e should be able to hit our goal of a 20% reduction by EoQ. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes, drott, ikilpatrick, and javif presented at BlinkOn. All their\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e sessions where well attended and very well received. Thank you!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Videos should be available within a week or two. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Windows FixIt last week. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Presented at QConf and Chrome Dev Summit. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to get back to rebaseline bot on the bot this week. Looked into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e file-locked bug where we cannot delete files due to them being locked.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Fun time untangling all the threads. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Start flipped blocks work as per outlined earlier! (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent time last week working on a background image spriting bug that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we've had forever. We didn't get around to fix it back when we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implemented subpixel layout. Apple finally fixed it, in a way that's\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e very different from how we're approaching it. Taking a lot of time to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e get things exactly right because we decide on the exact box to take\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e before making a final snapping decision during layout. Have patch that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e is mostly ready, should be able to finish it this week. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looking at a crashing big in frame loader. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistic\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looks like a quite week with everyone back in their home office.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Short week in the US due to Thanksgiving (Thu-Fri off).\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-november-23-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4676964154747021223"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4676964154747021223"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4676964154747021223"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-november-23-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5022012674615134917"},"published":{"$t":"2016-05-16T21:08:42.933Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-16T21:08:53.360Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, May 16, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, April 25, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrapping up overflow: auto work. Split up into three separate patches,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e first one landed last week and fixes scrollbars in general in the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e presence of \"interesting\" flex direction, writing mode and text\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e direction combinations. [\u003c/span\u003e\u003ca href\u003d\"http://crrev.com/392981\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrrev.com/392981\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e] (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The second patch (wip) overhauls how the flex algorithm handles\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e overflow: auto scrollbars. It basically makes it much clearer and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reduces unnecessary work that flex algorithm has to do to handle the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e presence of scrollbars. Shouldn't have any visible changes. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The third patch changes how intrinsic width is calculated in the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e presence of scrollbars. It's a major change that will improve how\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e things look and will fix some incorrect coordinates that are reported\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e back. Right now, for instance, a zero width box width vertical\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e overflow will report a clientWidth of -15px. Relatively small change\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e but I think it'll be nice and improve things. Some fun interactions\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e between layout and paint clipping. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added a new ref test that tests all combinations and it'll keep us\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e honest going forward. Looking into up-streaming it. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScroll Anchoring [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a scroll anchoring subpixel positioning bug, was very annoying\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e as text kept flickering during load when anchored. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a solution for interaction between scroll event handlers and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scroll anchoring. Detects when it's bouncing between two locations and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e prevents it. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flexbox specification discussions at the CSS Working group face-to-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e face last week, made progress on intrinsic width calculations among\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e other things. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Floated grid containers in Blink (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix computed style with distribution offsets (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Place positioned items with vertical writing modes (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Grid layout reviews (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Position resolution with auto-repeat tracks (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Auto-repeat tracks computation (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Multicol / fragmentation is in a known good state. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week was the Houdini face-to-face meeting. We didn't talk much\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e about the CSS Paint API, it's reasonably stable. We did, however,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e spent about four hours talking about the CSS Layout API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Moving in a pretty good direction. The other vendors seemed pretty\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e happy with the overall shape of the API. Plan to update the spec\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e proposal in time for TPAC. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to work on the worklets spec this week, mainly on the security\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e APIs. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Start design doc for off-main-thread worklets. (ikilpatrick, flackr)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finishing up report on line layout API. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued LayoutView/FrameView conversion. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on design doc. Will share draft with team in a few\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e weeks. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- One remaining issue arund interaction between contain: paint and will-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e change: transform. Will try to track down the root cause this week in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e preparation for shipping by default. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Shipping in M51.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eResize Observer (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent a day in SF selling Resize Observer to Mozilla, IE/Edge, and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Safari. They seemed to like it, no major problems. Mozilla already\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e filed a tracking bug. Plan to send out an Intent-to-Implement later\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e this week. (aleks)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a pending implementation, working with szager to get memory\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e management right with regards to lifetime and the oilpan GC. (aleks)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Microsoft working on updated CSS Table compatibility specification.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Made progress on a couple of table bugs, have a good handle on the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e root cause and will resume work this week. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looked at an issue where we need to upconvert to the complex path on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Android for small-caps font font-variant-numeric. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued android memory regression, trying to figure out where the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e extra memory is spent and why it only affects Android. Independently\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e found the same issue that tzik and kojii identified where glyphs are\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e double cached. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added instrumentation for the glyph bounds cache. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- small-caps and font-variant-numeric will ship in M52! (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Resumed work on change to render unicode control characters in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e accordance to spec. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussed test strategy for blink wrt w3c and web-platform-tests.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Learned about gecko process for keeping tests in sync. (jsbell)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent the last two weeks doing general block layout clean up and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e refactorings. Moving code and logic to where it makes more sense.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (mstensho)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-may-16-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5022012674615134917"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5022012674615134917"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5022012674615134917"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-may-16-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6206881821412010703"},"published":{"$t":"2015-05-04T20:57:38.568Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-05-04T20:58:18.193Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, May 4, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- Trace viewer/rail perf work.\u003c/div\u003e\u003cdiv\u003e- Layout Analyzer powered by UMA.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Improved unite tests for scrolling.\u003c/div\u003e\u003cdiv\u003e- Removed m_inProgrammaticScroll scroll flag from FrameView.\u003c/div\u003e\u003cdiv\u003e- Removed m_viewportLayoutObject from FrameView.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Performance data looks a lot better, some micro benchmarks still show\u003c/div\u003e\u003cdiv\u003e a slight regression but within error margin. Plan is to try to land \u003c/div\u003e\u003cdiv\u003e this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Discussions around absolut positioning within flexbox.\u003c/div\u003e\u003cdiv\u003e- Updated handling of min-width/min-height.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eList marker refactoring (dsinclair) [\u003ca href\u003d\"http://crbug.com/370461\"\u003ecrbug.com/370461\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Found solution for subtree modification problem, CL up for review.\u003c/div\u003e\u003cdiv\u003e (dsinclair)\u003c/div\u003e\u003cdiv\u003e- Change to move layout tree modification from layout walk to\u003c/div\u003e\u003cdiv\u003e NotifyChange. (dsinclair)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Warden (dsinclair, pilgrim)\u003c/div\u003e\u003cdiv\u003e- Moved mustInvalidateBackgroundOrBorderPaintOnHeightChange from\u003c/div\u003e\u003cdiv\u003e LayoutObject to LayoutBox and made it private. (pilgrim)\u003c/div\u003e\u003cdiv\u003e- Made updateShapeImage, updateFillImages private. (pilgrim)\u003c/div\u003e\u003cdiv\u003e- Renderer to LayoutObject rename almost done, only editing and paint\u003c/div\u003e\u003cdiv\u003e remain. Yay! (dsinclair)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- All known fuzzers fixed.\u003c/div\u003e\u003cdiv\u003e- New multicol implementation landed today (r194883).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLayout refactoring (esprehn, ikilpatrick, cbiesinger, ojan, leviw)\u003c/div\u003e\u003cdiv\u003e- Meetings and discussion contined last week and this week. Plan is to\u003c/div\u003e\u003cdiv\u003e have one or more concrete proposals by the end of BlinkOn.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics\u003c/div\u003e\u003cdiv\u003e- Most of the team in Sydney next week for BlinkOn 4, many travel down\u003c/div\u003e\u003cdiv\u003e this week.\u003c/div\u003e\u003cdiv\u003e- No meeting next week (due to BlinkOn), send updates (if any) to eae.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-may-4-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6206881821412010703"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6206881821412010703"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6206881821412010703"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-may-4-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7294094403538101884"},"published":{"$t":"2016-03-16T17:55:55.420Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-16T17:56:03.330Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 7, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, February 29):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eWe had a new person join the meeting for the first time this morning,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAleks Totic (atotic). He join Google about two months ago and his\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003estarter project is Resize Observer. Welcome Aleks!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a change in review that fixes a bunch of things with scroll\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e anchoring, with this change it is pretty close to usable on real-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e world websites. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Smooth scrolling bugs (have four of them now, yay). (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Reacquainted myself with scrolling stuff, was looking into a scroll\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e related bug that skobes volunteered to take on. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Worked on flexbox percentage sizing, going well. Will continue this\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week, re-landed the fix for scrolling that fixes everything after\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a fix by kojii that caused a revert (layout scheduling at a stage\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e where one should not happen).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Kast week in Waterloo with compositor worker folks, had fun getting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e compositor worker to work with worklets (that's a lot of work* words!)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and with a cleaner API. Have a new API version, will try to move into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e trunk sometime later this month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- About to commit a small change for main frame worklets API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Want to get paint rendering context 2d check-in this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued making progress on the box layout api, have sense of size of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e problem. Basically every element will have to have a layout item\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e instead. About ~40% of them have their own element specific things\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e which means that we'll need element specific block element API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Working through that list and figuring out the hierarchy. Projecting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e how large of a project it is. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- So far most element specific APIs have been pretty small with only a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e method or two, on the leaf node level. a lot of the higher level\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e elements (like layout image, layout media, layout box etc) have more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e complicated APIs that will take more time. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent much of last week burning down the list of tasks for the Line\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Layout API. Only size invalid calls left, hopeful then we can change\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the constructors and add include guards this week then call the Line\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Layout API done. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed Layout Containment! \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/1530303003\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://codereview.chromium.org/1530303003\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed a couple of intersection observer changes last week, have a few\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e more coming but no longer a full-time endeavor. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Focus on bugs this week. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Coming back from tok, working on remaining on emoji font fallback.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e After coordinating with android team changed how we get the fallback\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font. When android releases the SDK preview for N then we can activate\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fitzpatrick modifiers. Required further segmentation fixes. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed line-breaking issues with emjoi combiners. Not yet in ICU,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implemented on top of it for now. Will move to ICU over time. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- This week, plan to add unit tests for line breaking and then land and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e coordinate with Android team. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed how we query the operating system for font settings relating to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font smoothing and LCD subpixel rendering on Windows. Previously we\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tried to read the registry values from the rendering which wouldn't\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e work with the sandbox lockdown, changed it to query the OS from the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e browser process and pass it down to the renderer. Fixes issues where\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e we don't respect the users font settings and also ensures consistency\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e across chrome and blink. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discovered a pretty bad perf regression for break-all. Our performance\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e has always been bad but got worse with complex text. Investigating and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e have some ideas as to how it can be fixed. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on how we render table backgrounds with collapsed\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e borders, pulled a thread and the whole thing started to unravel.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Discovered out that collapsed borders are painted in a crazy way,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e trying to clean up. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent a full day helping wkorman with the rebaseline bot, makes me\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e realize how happy I am that I left infra and moved to blink where\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e things are sane and predictable. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Still dong analysis work for writing modes. (wkorman)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-7-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7294094403538101884"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7294094403538101884"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7294094403538101884"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-march-7-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7663110085254541976"},"published":{"$t":"2015-03-30T20:24:40.023Z"},"updated":{"$t":"2017-04-20T16:34:23.163Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-03-31T15:59:06.628Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 30, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eWe had Rune Lillesveen (rune) and David Vest (davve) from Opera join the\u003c/div\u003e\u003cdiv\u003emeeting this week in an effort to better coordinate our work. We also had \u003c/div\u003e\u003cdiv\u003eIan Killpatrick (ikilpatrick) from the Chrome Sydney team join us.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe massive Rendering -\u0026gt; Layout rename project is done, thanks to\u003c/div\u003e\u003cdiv\u003eeveryone who helped out and to Dan in particular who did most of the\u003c/div\u003e\u003cdiv\u003eheavy lifting!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe new multi-column implementation was enabled for tests and exposed as\u003c/div\u003e\u003cdiv\u003ean experimental web platform feature on Friday! Congrats Morten!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on Monday, March 23rd):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- Continuing work on LayoutAnalyzer and counters. Counters will be\u003c/div\u003e\u003cdiv\u003e exposed via trace events allowing us to see the number of layouts on a\u003c/div\u003e\u003cdiv\u003e per element type basis.\u003c/div\u003e\u003cdiv\u003e- Working on adding a command line flag for android to allow metrics to\u003c/div\u003e\u003cdiv\u003e be collected on an attached phone.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed the scroll animation test that was failing on the leak bots.\u003c/div\u003e\u003cdiv\u003e- Fixed a bug with scrolling to fixed-position #anchor targets.\u003c/div\u003e\u003cdiv\u003e- Still tests failing that I need to dig into, and I need to add more\u003c/div\u003e\u003cdiv\u003e virtual test suites as right now it is only running fast/scrolling.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout (dsinclair) [\u003ca href\u003d\"http://crbug.com/450612\"\u003ecrbug.com/450612\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Done. All files have been moved and renamed. The rendering/ directory\u003c/div\u003e\u003cdiv\u003e is gone!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFirst letter refactoring (dsinclair) [\u003ca href\u003d\"http://crbug.com/391288\"\u003ecrbug.com/391288\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed first-letter hit testing, discovered a couple of new bugs.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eList marker refactoring [\u003ca href\u003d\"http://crbug.com/370461\"\u003ecrbug.com/370461\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Getting back to list-marker work, will turn the marker into a ::marker\u003c/div\u003e\u003cdiv\u003e psedo element. [crbug.com/457718]\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Been thinking about supporting measure out-of-tree and trying to come\u003c/div\u003e\u003cdiv\u003e up with a good strategy. So far none of the approaches tried have\u003c/div\u003e\u003cdiv\u003e panned out. Will continue to experiment and evaluate ideas to guide\u003c/div\u003e\u003cdiv\u003e future work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Finished implementing spec changes for min-width auto.\u003c/div\u003e\u003cdiv\u003e- Started working on positioning of position: absolute elements.\u003c/div\u003e\u003cdiv\u003e- Working on importing w3c test suite for flexbox.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Finished going through the layout test failures for Glenn's patch, and\u003c/div\u003e\u003cdiv\u003e landed a few patches to fix tests. All of the remaining test failures\u003c/div\u003e\u003cdiv\u003e are OK to rebaseline.\u003c/div\u003e\u003cdiv\u003e- Ran the patch through the perf bots, and the results were not as I had\u003c/div\u003e\u003cdiv\u003e hoped. There appeared to be significant performance regressions in the\u003c/div\u003e\u003cdiv\u003e blink_perf.layout test suite.\u003c/div\u003e\u003cdiv\u003e- Working on eliminating wrapper classes (FloatWillBeLayoutUnit) to test\u003c/div\u003e\u003cdiv\u003e theory that they explain at least part of the regression.\u003c/div\u003e\u003cdiv\u003e- Found a number of places where we use the wrong unit, we need to\u003c/div\u003e\u003cdiv\u003e decide exactly where to draw the line between LayoutUnit and float.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [\u003ca href\u003d\"http://crbug.com/458222\"\u003ecrbug.com/458222\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing work to isolate core/fetch from the rest of core.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePage scale handling (bokan) [\u003ca href\u003d\"http://crbug.com/459591\"\u003ecrbug.com/459591\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Remove old pinch-zoom paths from Blink.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBlink componentization (pilgrim) [\u003ca href\u003d\"http://crbug.com/428284\"\u003ecrbug.com/428284\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Moving things from core to modules; core/storage and core/timing.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, wjmaclean, eae, rune)\u003c/div\u003e\u003cdiv\u003e- Continued work on text iterator cleanup, fixed naming to be more\u003c/div\u003e\u003cdiv\u003e descriptive. (wjmaclean)\u003c/div\u003e\u003cdiv\u003e- Working on a change that pulls out the part of TextIterator that\u003c/div\u003e\u003cdiv\u003e handles text from the part that handles traversing. (wjmaclean)\u003c/div\u003e\u003cdiv\u003e- Profiling line breaking. (eae)\u003c/div\u003e\u003cdiv\u003e- Started working on design doc for removing simple text. (eae)\u003c/div\u003e\u003cdiv\u003e- Fixed text overflow box bug that blocked the Slimming Paint work.\u003c/div\u003e\u003cdiv\u003e (eae)\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e- Fixed an assertion problem with baseLayoutStyle which lead to\u003c/div\u003e\u003cdiv\u003e finding/reporting a problem causing unnecessary layouts.\u003c/div\u003e\u003cdiv\u003e [\u003ca href\u003d\"http://crbug.com/471079\"\u003ecrbug.com/471079\u003c/a\u003e] (rune)\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e- Fix vertical flow regression when a major web font site provides\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e broken tables. (kojii)\u003c/div\u003e\u003cdiv\u003e- Default to complex path more cases in vertical flow. (kojii)\u003c/div\u003e\u003cdiv\u003e- Working with W3C and internal experts for bi-di and vertical flow\u003c/div\u003e\u003cdiv\u003e issues. (kojii)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eStyle resolution (rune)\u003c/div\u003e\u003cdiv\u003e- Cache element indices for :nth-child and :nth-last-child selectors.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eContent sizing (davve)\u003c/div\u003e\u003cdiv\u003e- Working on content sizing/intrinsic size for HTML and SVG.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- New multi-column implementation enabled as experimental web platform\u003c/div\u003e\u003cdiv\u003e feature!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eStandards (ikilpatrick, slightlyoff)\u003c/div\u003e\u003cdiv\u003e- Pushing the layout portion of w3c houdini forward in preparation for\u003c/div\u003e\u003cdiv\u003e the next meeting by prototyping. (ikilpatrick)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eClusterFuzz\u003c/div\u003e\u003cdiv\u003e- Trying to reduce an obscure clusterfuzz crasher in RenderBlockFlow.\u003c/div\u003e\u003cdiv\u003e (wkorman)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDiscussions:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e[ cbiesinger's work to import the w3c test suite prompted a discussion\u003c/div\u003e\u003cdiv\u003e about w3c tests. ]\u003c/div\u003e\u003cdiv\u003e \u003c/div\u003e\u003cdiv\u003e\u0026lt;slightlyoff\u0026gt; Are we mostly writing blink specific layout tests or w3c\u003c/div\u003e\u003cdiv\u003eweb platform tests today?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; For regression and performance work we use blink specific layout\u003c/div\u003e\u003cdiv\u003etests pretty much exclusively. For feature work we're trying to move to\u003c/div\u003e\u003cdiv\u003ea world where we use web platform tests tests but we're not there yet.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jsbell\u0026gt; Dirk (dpranke) started work in tooling to support w3c web\u003c/div\u003e\u003cdiv\u003eplatform tests, I have headcount for an engineer to take this over and\u003c/div\u003e\u003cdiv\u003ework on improving the tooling.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jsbell\u0026gt; Once better tooling and procedures are in place we should start\u003c/div\u003e\u003cdiv\u003e\"strongly encouraging\" people to write web platform tests for new\u003c/div\u003e\u003cdiv\u003efeatures.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;slightlyoff\u0026gt; Can we do that today?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jsbell\u0026gt; It is too too painful to do today, tooling needs to be improved\u003c/div\u003e\u003cdiv\u003efirst.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-30-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7663110085254541976"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7663110085254541976"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7663110085254541976"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-march-30-2015"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/270707617065210883"},"published":{"$t":"2015-06-01T21:40:19.053Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-01T21:51:38.839Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, June 1, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUpdates since last meeting (on Tuesday, May 25th):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- Continuing to focus on trace viewer overall rather than limited to\u003c/div\u003e\u003cdiv\u003e layout performance.\u003c/div\u003e\u003cdiv\u003e- Visualizing layout in trace viewer.\u003c/div\u003e\u003cdiv\u003e- Interaction records.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Figured out a way to run the WebFrameTest unit tests with booth root\u003c/div\u003e\u003cdiv\u003e level scrolling turned on and off. Going through tests to catch\u003c/div\u003e\u003cdiv\u003e regressions.\u003c/div\u003e\u003cdiv\u003e- Learned more about page scale factor, turns out that the initial scale\u003c/div\u003e\u003cdiv\u003e factor cause the FrameView to be a different size.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Landed over the weekend, re-baselines almost done. Yay!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Updated min-size handling to match latest version of spec.\u003c/div\u003e\u003cdiv\u003e- Sycned up with Microsoft and Mozilla about their flexbox plans to\u003c/div\u003e\u003cdiv\u003e ensure compatibility across browsers.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMenu list refactoring (dsinclair) [\u003ca href\u003d\"http://crbug.com/370462\"\u003ecrbug.com/370462\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Done!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFullscreen (dsinclair) [\u003ca href\u003d\"http://crbug.com/370459\"\u003ecrbug.com/370459\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Landed fix to persist plugins over re-attach. Subsequently reverted\u003c/div\u003e\u003cdiv\u003e due to browser_test failures. Looking into failures and plan to\u003c/div\u003e\u003cdiv\u003e re-land this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Warden (dsinclair, pilgrim)\u003c/div\u003e\u003cdiv\u003e- Containing work to slim-dopwn LayoutObject. (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Will start to delete the old multicol code this week. It's no longer\u003c/div\u003e\u003cdiv\u003e possible to enable it and no major regressions have been found.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText\u003c/div\u003e\u003cdiv\u003e- Continuing work on complex text performance. (eae)\u003c/div\u003e\u003cdiv\u003e- Experimenting with only inheriting inheritable properties into text\u003c/div\u003e\u003cdiv\u003e nodes, not yet convinced that it affects performance noticeably, but\u003c/div\u003e\u003cdiv\u003e it WILL increase memory usage, since we create a new ComputedStyle\u003c/div\u003e\u003cdiv\u003e object for each text node (instead of sharing with the parent).\u003c/div\u003e\u003cdiv\u003e Each text node that has the same parent could easily share the same\u003c/div\u003e\u003cdiv\u003e ComputedStyle object, though, but we'd still be going to increase\u003c/div\u003e\u003cdiv\u003e memory usage. (mstensho)\u003c/div\u003e\u003cdiv\u003e- Fixed justification crash issue. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating orthogonal writing modes issues. (kojii)\u003c/div\u003e\u003cdiv\u003e- Unicode variation selectors support in progress. (kojii)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eImporting Test Suites\u003c/div\u003e\u003cdiv\u003e- Working on importing CSS Writing Modes test suites. (kojii)\u003c/div\u003e\u003cdiv\u003e- Imported HTML tests. (tkent)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRemoving DeprecatedPaintLayer [\u003ca href\u003d\"http://crbug.com/260898\"\u003ecrbug.com/260898\u003c/a\u003e] (chadarmstrong)\u003c/div\u003e\u003cdiv\u003e- Started looking at moving hit testing from DeprecatedPaintLayer to\u003c/div\u003e\u003cdiv\u003e Box model object.\u003c/div\u003e\u003cdiv\u003e- jchaffraix helping chadarmstrong get up to speed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout [\u003ca href\u003d\"http://crbug.com/495288\"\u003ecrbug.com/495288\u003c/a\u003e] (leviw)\u003c/div\u003e\u003cdiv\u003e- Meeting last where where the plans for the grand layout refactoring\u003c/div\u003e\u003cdiv\u003e was discussed. We agreed that the first step is to define (and over\u003c/div\u003e\u003cdiv\u003e time refine) an API for interacting with layout. Meeting notes at\u003c/div\u003e\u003cdiv\u003e https://www.chromium.org/blink/layout-team/meeting-notes/may-28-2015\u003c/div\u003e\u003cdiv\u003e- Wrote up a document outlining the plan, sent out to blink-dev.\u003c/div\u003e\u003cdiv\u003e https://docs.google.com/document/d/1qc5Ni-TfCyvTi6DWBQQ_S_MWJlViJ-ikMEr1FSL0hRc\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMultipart images [\u003ca href\u003d\"http://crbug.com/308999\"\u003ecrbug.com/308999\u003c/a\u003e] (japhet)\u003c/div\u003e\u003cdiv\u003e- Implemented support for multipart image documents.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Performance\u003c/div\u003e\u003cdiv\u003e- Looked into SVG spinner performance and found layout bug where SVG\u003c/div\u003e\u003cdiv\u003e paths where regenerated unnecessarily. Fixing the bug should give us\u003c/div\u003e\u003cdiv\u003e at least a 50% perf improvement. (esprehn)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics\u003c/div\u003e\u003cdiv\u003e- cbiesinger gardener Friday/Monday.\u003c/div\u003e\u003cdiv\u003e- Mid quarter OKR check-in on Thursday at 10am PST.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-1-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/270707617065210883"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/270707617065210883"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/270707617065210883"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-june-1-2015"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2165247996480875782"},"published":{"$t":"2016-07-18T21:10:37.436Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-18T21:10:43.679Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, June 6, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, May 23, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed all of the scrollbar fixes! Finally bringing sanity and good\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e test coverage to the scrollbar space. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Scrollbar regression in web inspector, looks like an incorrect\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e workaround in client code. Needs further investigation. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Found and fixed regression in google spreadsheets, due to js trying\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to compensate for scrollbars. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- All regressions identified thus far have been due to client side js\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e working around or trying to compensate for scrollbars. Long tail but\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e new behavior is \"better\" and we're now more consistent with IE/Edge.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScroll Anchoring [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Back from vacation, dealing with a couple of regressions including a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e release blocker. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayout\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Grid talk scheduled for BlinkOn 6 in Munich.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week. Morten out for the next two months.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helping audio folks with worklets, they're in a good space design\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e wise. Got something that'll work and that we're happy with.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on design doc, will be ready for circulation among the \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eteam\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e post BlinkOn. (eae, ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Identified a couple of security bugs involving containment and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tables. (eae, dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Changed dispatch to make the order of notifications deterministic.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eResize Observer (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Initial implementation up for review. It's looking pretty good. We\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e have a spec we're happy with and that we're implementing. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Two remaining issues to match spec, don't quite know how to expose\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that as a part of the API. Plan is to check in what we have behind\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a flag and to iterate. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Change invalidation logic for border width changes for rows, fixing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a bug with floats. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- More FontCache analysis and looking at lifecycle of FontPlatformData\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e objects. Goal is to reduce complex path font memory consumption and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e achieve enabling complex by default on Android. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We're basically leaking FontPlatformData objects and hb_blob_t with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font table information over the lifetime of a renderer. This is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e especially bad for single process. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Identified a RefPtr cycle issue. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Identified an issue of storing full FontPlatformData objects as key\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e in FontDataCache. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to experiment with an LFU eviction plus threshold approach.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a couple of line brekaing bugs involving element boundaries due\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to diffrences in rounding between prefered width calculations and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e line breaking. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed an interop issue wrt list-style inside. We now match the spec\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and the Mozilla/Edge behavior. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We now support color fonts, including color emoji, on Windows 8.1\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and later. (kulshin) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/333011\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/333011\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Using page zoom for device scaling enabled by default on ChromeOS.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (oshima) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/485650\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/485650\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-6-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2165247996480875782"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2165247996480875782"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2165247996480875782"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-june-6-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3909609813861391439"},"published":{"$t":"2015-06-22T23:48:27.654Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-22T23:48:39.507Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, June 22, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUpdates since last meeting (on Tuesday, June 16th):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Fixed handling of overflow clip for root layer.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Working on intrinsic sizes, found a problem with the spec that needs\u003c/div\u003e\u003cdiv\u003e investigation. Handling of form controls (like calendar picker) is\u003c/div\u003e\u003cdiv\u003e problematic.\u003c/div\u003e\u003cdiv\u003e- Hope to finish up absolut positioning handling this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [crbug.com/79180]\u003c/div\u003e\u003cdiv\u003e- Blocked on code reviews. (svillar)\u003c/div\u003e\u003cdiv\u003e- Performance optimizations for alignment. (jfernandez, svillar)\u003c/div\u003e\u003cdiv\u003e- cbiesinger to help with reviews. (cbiesinger)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [crbug.com/334335]\u003c/div\u003e\u003cdiv\u003e- Still stabilizing multicol.\u003c/div\u003e\u003cdiv\u003e- Intend to start working on nested multicol soon, so that we can\u003c/div\u003e\u003cdiv\u003e print.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout (leviw, pilgrim) [crbug.com/495288]\u003c/div\u003e\u003cdiv\u003e- Continuing work on adding API around block layout. Managed to track\u003c/div\u003e\u003cdiv\u003e down and solve the performance problems assoscaited with it (turns\u003c/div\u003e\u003cdiv\u003e out it was caused by the overhead of extra non-inlined constructors/\u003c/div\u003e\u003cdiv\u003e deconstructors). (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [crbug.com/458222]\u003c/div\u003e\u003cdiv\u003e- Continued work to separate core/fetch from core and considering finer\u003c/div\u003e\u003cdiv\u003e grained separation per resource type. I.e css resource handling\u003c/div\u003e\u003cdiv\u003e specific logic could be moved to the css directory.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, drott, kojii)\u003c/div\u003e\u003cdiv\u003e- Removing dependency on glyph page tree node from complex path to allow\u003c/div\u003e\u003cdiv\u003e it to be removed entierly once the simple path is removed. Trying to\u003c/div\u003e\u003cdiv\u003e figure out exactly how it is used and where in order to break the\u003c/div\u003e\u003cdiv\u003e dependency. (drott)\u003c/div\u003e\u003cdiv\u003e- Unicode variation selectors support fixed for Win/Mac. Linux needs our\u003c/div\u003e\u003cdiv\u003e harfbuzz in unofficial builds. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating bundling our harfbuzz for unofficial Linux. (kojii)\u003c/div\u003e\u003cdiv\u003e- Investigating abspos issues in vertical flow. (kojii)\u003c/div\u003e\u003cdiv\u003e- CL adding support for word-by-word shaping up for review, performance\u003c/div\u003e\u003cdiv\u003e looks very good, will try to land this week. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLayout Bugs:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe currently have 1581 open bugs for the Cr-Layout label, down from 1592\u003c/div\u003e\u003cdiv\u003elast week.\u003c/div\u003e\u003cdiv\u003e- Untriaged: 468 (-7)\u003c/div\u003e\u003cdiv\u003e- Priority 0: 0\u003c/div\u003e\u003cdiv\u003e- Priority 1: 134 (-1)\u003c/div\u003e\u003cdiv\u003e- Priority 2: 957 (-1)\u003c/div\u003e\u003cdiv\u003e- Priority 3: 19\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe need to get the number of bugs down so from now on each weekly update\u003c/div\u003e\u003cdiv\u003ewill include the number of bugs for each category and the delta from the\u003c/div\u003e\u003cdiv\u003eweek before.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics:\u003c/div\u003e\u003cdiv\u003e- szager OOO all week.\u003c/div\u003e\u003cdiv\u003e- eae gardener Wed-Thu.\u003c/div\u003e\u003cdiv\u003e- OKR meeting on Thursday.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-22-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3909609813861391439"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3909609813861391439"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3909609813861391439"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-june-22-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5163710521235286070"},"published":{"$t":"2015-07-20T21:44:10.666Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-07-20T21:44:51.380Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, July 20, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUpdates since last meeting (on Monday, July 13th):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing root layer scrolling conversion. Judging progress is hard\u003c/div\u003e\u003cdiv\u003e and we don't necessarily know how much work remains, plan is to turn\u003c/div\u003e\u003cdiv\u003e on root layer scrolling unconditionally and then run all he tests in\u003c/div\u003e\u003cdiv\u003e order to see how many test failures we have and then use that as a\u003c/div\u003e\u003cdiv\u003e burn-down list. Obviously progress isn't linear with the number of\u003c/div\u003e\u003cdiv\u003e test failures but should give us a rough idea and a way to track\u003c/div\u003e\u003cdiv\u003e progerss. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Back from vacation, resuming flexbox work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [\u003ca href\u003d\"http://crbug.com/79180\"\u003ecrbug.com/79180\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- No update.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- No update, mstensho on vacation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003ca href\u003d\"http://crbug.com/495288\"\u003ecrbug.com/495288\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Landed a couple of line-layout API patches. (ojan)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [\u003ca href\u003d\"http://crbug.com/458222\"\u003ecrbug.com/458222\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- No update.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Test Suites (jsbell, kojii)\u003c/div\u003e\u003cdiv\u003e- No update.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, drott, kojii)\u003c/div\u003e\u003cdiv\u003e- Dealing with fallout from complex text refactoring/optimization. (eae)\u003c/div\u003e\u003cdiv\u003e- Adding support for tab characters to complex text path, which in turn\u003c/div\u003e\u003cdiv\u003e will unblock work to enable the complex path by default. (kojii)\u003c/div\u003e\u003cdiv\u003e- Continuing work on rationalizing the font fallback implementation and\u003c/div\u003e\u003cdiv\u003e logic. Have a good understanding of the system and working on adding\u003c/div\u003e\u003cdiv\u003e tests to ensure that we do not regress and that our system has good\u003c/div\u003e\u003cdiv\u003e test coverage. (drott)\u003c/div\u003e\u003cdiv\u003e- Our font selection implementation is not necessarily spec compliant\u003c/div\u003e\u003cdiv\u003e at the moment, looking into why and working on improving our\u003c/div\u003e\u003cdiv\u003e font selection tests. (drott)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc:\u003c/div\u003e\u003cdiv\u003e- Triaging and updating baselines for the Mac 10.10 bots. (joelo, leviw)\u003c/div\u003e\u003cdiv\u003e- Helping windows team with win 10 changes/tests. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eLogistics:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- mstensho on vacation this week.\u003c/div\u003e\u003cdiv\u003e- skobes on vacation this week.\u003c/div\u003e\u003cdiv\u003e- pilgrim on vacation today, back tomorrow.\u003c/div\u003e\u003cdiv\u003e- cbiesinger planning trip to SF on Aug 3rd [tentative].\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-20-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5163710521235286070"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5163710521235286070"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5163710521235286070"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-july-20-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6181595464762115482"},"published":{"$t":"2015-03-19T22:06:23.608Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-03-19T22:07:24.619Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 16, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eeae OOO, jsbell taking notes (poorly - apologies for mangling your words and leaving out any important bits)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- still working on proposal for measure\u003c/div\u003e\u003cdiv\u003e- finished layer refactor/renaming\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger)\u003c/div\u003e\u003cdiv\u003e- almost done w/ first part of flexbox spec change\u003c/div\u003e\u003cdiv\u003e- tests missing, importing w3c tests\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet)\u003c/div\u003e\u003cdiv\u003e- big class responsible for most violations is mostly done\u003c/div\u003e\u003cdiv\u003e- lots of smaller classes to tackle next\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes)\u003c/div\u003e\u003cdiv\u003e- position fixed works w/ root layer scrolling\u003c/div\u003e\u003cdiv\u003e- looking at layout test failures\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- adding pages to key silk pages benchmarks\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout (dsinclair)\u003c/div\u003e\u003cdiv\u003e- splitting layout name out into decorated name [jsbell: didn't catch all of this]\u003c/div\u003e\u003cdiv\u003e- updating lots of layout tests to have more correct results\u003c/div\u003e\u003cdiv\u003e- renderer -\u0026gt; layout object renaming\u003c/div\u003e\u003cdiv\u003e- fun content shell resize issue causing subsequent tests to fail, trying to track it down\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes(hartmanng, szager)\u003c/div\u003e\u003cdiv\u003e- working through float to layout unit test failures\u003c/div\u003e\u003cdiv\u003e- hartmanng: windows - tons of failures, but everything so far looks like it can rebased, but only a few dozen out of a few hundred reviewed so far\u003c/div\u003e\u003cdiv\u003e- szager: made it through nearly all tests on mac, two real regressions - line wrapping, svg and platform specific layout; digging into those\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc:\u003c/div\u003e\u003cdiv\u003e- jchaffraix: now working on a release blocker\u003c/div\u003e\u003cdiv\u003e- szager: helping out jochen with repo merge\u003c/div\u003e\u003cdiv\u003e- wkorman: still ramping up; tell me about merging to release branches...?\u003c/div\u003e\u003cdiv\u003e- japhet: other half of time spent on site isolation stuff\u003c/div\u003e\u003cdiv\u003e- jsbell: nothing warden-related this week (other than these notes)\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-16-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6181595464762115482"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6181595464762115482"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6181595464762115482"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-march-16-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6190760564699508157"},"published":{"$t":"2016-07-18T21:09:36.644Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-18T21:09:46.253Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, June 27, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, June 6, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Dealing with a scroll related performance regression: when you change\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the existence off scrollbars on a box it goes and sets a flag that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e invalidates the width available for children which forces a re-\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003elayout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e for all children. This happens even if the content width didn't\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e change. Landed a patch to fix that; it may not be perfect yet but it's\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e close, needs a few tweaks. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Assisted ymalik in investigating smooth scroll jank issues. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/616995\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/616995\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on a fix for incorrect repainting of negative z-index children\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e on scroll. (skobes) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/596060\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/596060\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScroll Anchoring [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Thinking about the scroll anchoring cycle problem [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/601906\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/601906\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e],\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e will likely add a limit on number of adjustments between user scrolls\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e per Kenji's suggestion. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixing flexbox regressions. Number of open flexbox regression bugs is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e steadily decreasing. No new major issues detected or reported latelty.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Refactored flexbox \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003elayout\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e algorithm to make it easier to understand\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and maintain. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayout\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed some small \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003elayout\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bugs related to intrinsic sizes and border/\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e padding. (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on grid orthogonal flows. (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on new CSS alignment parsing logic. (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Get rid of LayoutBox::\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003ehasDefiniteLogicalWidth|\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHeight(). (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed issues with height percentages on grid items. (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Gave CSS Grid update talk at BlinkOn 6 in Munich. (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Implemented repeat (auto-fit). (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week. Morten out for the next two months.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added support for prefixed properties to the CSS Paint API. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Renamed Geometry to PaintSize for the CSS Paint API to match latest\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e spec update. [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/578252\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/578252\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e] (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Enabled worklets and the CSS Paint API as experimental web platform\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e features. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on design doc, will be ready for circulation among the \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eteam\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e post BlinkOn. (eae, ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Misc minor intersection observer fixes. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- OOPIF will need to support intersection observer, unclear what\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e priority or who should own the work. Complicated as it needs to walk\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e through the frame tree, if a frame is in another process you cannot do\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that so some architecture changes are needed to have each process\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e compute intersections at frame time and have the browser process\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e process the intermediate results. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eResize Observer (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Made changes to the font cache to use ref counting which should allow\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e for better cache invalidation. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Found a way to get zero-copy access to the font data tables from skia,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e avoiding an extra copy per FontPlatformData. This is potentially a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e very big win! (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Rebaseline bot update: wangxianzhu did some excellent work, it should\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e be operating correctly now. Was previously potentially rebaselining\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with stale result as it didn't wait for all bots to cycle before\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e triggering. One should still closely monitor baselines but it should\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e be working correctly now. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixing some bugs around paint invalidation rects,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e mapToVisualRectandAncestor. Bugs with flipped blocks and relative\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e position specifically. Likely to also affect intersection observer.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Rolled back dropdown change where we reserved extra space as it broke\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a number of sites. Trying a new approach that better matches other\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e browsers. (glebl)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-27-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6190760564699508157"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6190760564699508157"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6190760564699508157"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-june-27-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7288315292486741589"},"published":{"$t":"2015-03-23T20:45:08.821Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-03-23T20:49:15.044Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 23, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- Added a couple new pages to the key_silk_cases benchmark suite.\u003c/div\u003e\u003cdiv\u003e- Continuing counter work.\u003c/div\u003e\u003cdiv\u003e- What further pages should be added? jchaffraix has a list.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed a flaky test but turns out it is still flaky on one of the\u003c/div\u003e\u003cdiv\u003e oilpan bots. Not sure why. Will coordinate with oilpan team to try to\u003c/div\u003e\u003cdiv\u003e track down the issue.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout (dsinclair) [\u003ca href\u003d\"http://crbug.com/450612\"\u003ecrbug.com/450612\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Renamed renderer in layout/svg.\u003c/div\u003e\u003cdiv\u003e- Renamed Renderer to LayoutObject in ImageResource and\u003c/div\u003e\u003cdiv\u003e LayoutTreeBuilder.\u003c/div\u003e\u003cdiv\u003e- Renamed *styleForRenderer to *styleForLayoutObject.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Collected use cases and have enough to justify continued work on\u003c/div\u003e\u003cdiv\u003e prototype.\u003c/div\u003e\u003cdiv\u003e- Out-of-tree measurements will be tricker than expected, a lot\u003c/div\u003e\u003cdiv\u003e trickier. Might be a problem that affects more than measure.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing on flexbox work. Progress is slower than expected as\u003c/div\u003e\u003cdiv\u003e updating tests takes a lot of time.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Found root cause for a significant chunk of layout test failures,\u003c/div\u003e\u003cdiv\u003e including incorrect wrapping in buttons. Turns out leading whitespace\u003c/div\u003e\u003cdiv\u003e is to blame. We subtract the width of a space character using a\u003c/div\u003e\u003cdiv\u003e floating point representation of the width, introducing imprecision.\u003c/div\u003e\u003cdiv\u003e- Hopeful that this'll be the last code change before landing. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [\u003ca href\u003d\"http://crbug.com/458222\"\u003ecrbug.com/458222\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continued quested to isolate fetch directory from the rest of core.\u003c/div\u003e\u003cdiv\u003e Mostly there.\u003c/div\u003e\u003cdiv\u003e- Changed DEPS rule to enforce core/fetch isolation, white listed\u003c/div\u003e\u003cdiv\u003e existing bad includes (down to 7).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePage scale handling (bokan) [\u003ca href\u003d\"http://crbug.com/459591\"\u003ecrbug.com/459591\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Coordinate transformation cleanup in FrameView.\u003c/div\u003e\u003cdiv\u003e- Added documentation for coordinate spaces, see\u003c/div\u003e\u003cdiv\u003e \u003ca href\u003d\"https://www.chromium.org/developers/design-documents/blink-coordinate-spaces\"\u003ehttps://www.chromium.org/developers/design-documents/blink-coordinate-spaces\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, wjmaclean, eae)\u003c/div\u003e\u003cdiv\u003e- \u200bReviewing test results for bidi and vertical flow in W3C test suites\u003c/div\u003e\u003cdiv\u003e with W3C contributors. (kojii)\u003c/div\u003e\u003cdiv\u003e- Fixed vertical alignment in vertical flow, one of the biggest failures\u003c/div\u003e\u003cdiv\u003e in the W3C test suites. (kojii)\u003c/div\u003e\u003cdiv\u003e- Getting back to text iterator work. (wjmaclean)\u003c/div\u003e\u003cdiv\u003e- Fixed top Mac crasher, caused by incorrect assumption in HarfBuzz\u003c/div\u003e\u003cdiv\u003e CoreText shaper. (eae)\u003c/div\u003e\u003cdiv\u003e- Backported fix for reverse_range tab-crash to M41 after it getting\u003c/div\u003e\u003cdiv\u003e some media attention. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eClusterFuzz\u003c/div\u003e\u003cdiv\u003e- Various ClusterFuzz bugs (wjmaclean, jchaffraix, szager)\u003c/div\u003e\u003cdiv\u003e- Working on a table layout crash bug, have repro but not sure of cause\u003c/div\u003e\u003cdiv\u003e yet, will coordinate with wjmaclean as needed. (wkorman)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc\u003c/div\u003e\u003cdiv\u003e- Helped with repository merge issues (szager)\u003c/div\u003e\u003cdiv\u003e- Remove old ICU hacks/code from wtf/text now that we control the\u003c/div\u003e\u003cdiv\u003e version of ICU used. (jsbell)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics:\u003c/div\u003e\u003cdiv\u003e- hartmanng switching to another chrome team, dsinclair will take over\u003c/div\u003e\u003cdiv\u003e in-progress work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-23-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7288315292486741589"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7288315292486741589"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7288315292486741589"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-march-23-2015"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8512464451137804375"},"published":{"$t":"2015-06-08T21:35:17.527Z"},"updated":{"$t":"2017-04-20T16:34:23.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-08T21:36:13.254Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, June 8, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eScrolling (skobes, szager) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Ran into problem with hit testing absolutely positioned objects within\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e a scrollable element. Hit testing code thinks the element is in front\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e of the scrollbar. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Plan to get back to viewport issue next, once the abs hit testing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e issue has been resolved.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- szager getting ramped up on scrolling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Done and seems to be sticking, some cleanup/monitoring left but no new\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e major issues encountered.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Continuing to update to match spec, progress according to plan.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eMisc Warden (dsinclair, pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Containing work to slim-dopwn LayoutObject. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Removed old multicol code, yay! (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Fixed multicol fuzzers, and also a completely unrelated fuzzer in the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e CSS counters code. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eRemoving DeprecatedPaintLayer (chadarmstrong) \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[\u003ca href\u003d\"http://crbug.com/260898\"\u003ecrbug.com/260898\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Current plan is to move hit testing code to stacking node instead of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e box model object. This prompted a discussion about the reason behind\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e the change and the relative merits of retaining the stacking context\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e concept vs moving hit testing to be self contained and on box model\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e object. chadarmstrong/jchaffraix/ojan to follow up offline.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eText\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Imported CSS Writing Modes test suites, minor fixes and feedback of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e our run results to CSS WG continues. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Unicode variation selectors support in progress, close to complete the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e basic support. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Investigating orthogonal writing modes issues. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Investigating abspos issues in vertical flow. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eAdd API for layout (leviw, pilgrim) \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e[\u003ca href\u003d\"http://crbug.com/495288\"\u003ecrbug.com/495288\u003c/a\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- pilgrim and ikilpatrick working on getting initial API definition\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e landed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- dsinclair GPU sheriff (pixel wrangler) this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Planning meeting for Moose on Wednesday, notes will be sent out to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e layout-dev, talk to eae if you want to be included.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-8-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8512464451137804375"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8512464451137804375"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8512464451137804375"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-june-8-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/129464846339514771"},"published":{"$t":"2016-02-09T00:57:49.137Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-02-09T00:58:00.694Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 8, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, February 1st):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Basic implementation of scroll anchoring landed behind the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e --enable-blink-features\u003d\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrollAnchoring flag. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on adding more test cases for scroll anchoring. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Adding about:flags entry so folks can try on mobile canary. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued triage.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed main size calculation for overflow:auto.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (since last grid update in late December)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix auto track sizing with min-size:auto (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Add support for repeat(auto-fill|auto-fit,) (svillar)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Support for implicit grid before explicit grid (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix unknown named lines resolution (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating issues with positioned items and RTL (rego)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Layout tests refactoring (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating issues in orthogonal grids (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Add \"normal\" for content alignment (jfernandez)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on cleaning up mapLocalToAncestor() in order to make it easier\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and cleaner to fix a multicol bug.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Intent to ship discussions continues, we might be able to unprefix\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e multicol real soon after all!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Some work on the break-after, break-before and break-inside\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e properties. More or less ready to file a CL, once the intentery gets\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e resolved.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Stay tuned for a separate blonk-wide update on Houdini progress.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Converted BlockPainter to new line layout API. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Convert last use of RootInlineBox to the API. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Shim AXLayoutObject uses of InlineBox-\u0026gt;layoutObject(). (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussions about containment at CSS Working Group meeting with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e standard body and other browser vendors. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of zero-sized target elements for observations.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of cross-origin observations. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Changed observers to use DOMHighResTimeStamp for notification time.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Meeting with the Android fonts team to discuss needs and possible\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e integration going forward. (drott)1\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on resolving emoji and multi-locale issues on Android, some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e parts are tricky, some parts are easier. Will continue to work with a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e android fonts team after the Tokyo workshop. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- landing the remaining parts of SymbolsIterator/\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eEmojiSegmentation,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e until now where I am hitting this issue of having to address graphemes\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e as a unit of fallback with Behdad first - as per my comment on the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e last CL in the series. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on font fallback for symbol/emoji fonts on Android with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bungman on the Skia team. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finished work to make LayoutUnit construction explicit. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed weird broken zooming logic in offsetTop/Left calls. (leviw)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-8-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/129464846339514771"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/129464846339514771"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/129464846339514771"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-8-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/405752249174791424"},"published":{"$t":"2016-01-21T06:07:24.410Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-21T06:08:17.932Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, January 11, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eThe layout team is a long-term team that owns the layout code in blink.\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eSee https://www.chromium.org/blink/layout-team for more information.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eUpdates since last meeting (on Monday, January 4th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eScrolling (skobes, szager) [crbug.com/417782]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Launched smooth scrolling! Top user request for year and one of our\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e oldest open feature requests. Congratulations! [skobes]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Swamped with smooth scrolling issues. [skobes]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Biggest issue is we can't tell wheel scrolling form trackpad scrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e on windows, might end up enabling smooth scrolling for trackpads\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e too. [skobes]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eCSS Flexbox (cbiesinger) [crbug.com/426898]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- The behavior changes in December caused a number of problems on high\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e profile websites. A lot of triage and bug fixing to follow.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eCSS Multi-column (mstensho) [crbug.com/334335]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Bug fixing for nested multicol and print support.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Plan to send intent to implement for CSS Paint this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Spec work; draft of css custom layout api in time for houdini meeting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e in Sydney at the end of the month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Meeting with MS and Apple in Seattle last week, very productive in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e terms of getting on the same page with regards to custom layout and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e suggesting something that all rendering engines can support.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eAdd API for layout (leviw, pilgrim, ojan) [crbug.com/495288]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Wrapping up API around inline layout.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eIntersection Observer (szager, mpb) [crbug.com/540528]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Enabled on trunk, work continues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Tracking down AAT font slowness on mac. Looks like we have a great\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e patch that will improve it by at least an order of magnitude. We had\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e a couple of issues with 16s rendering for a simple page. Due to AAT\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e artificial fallback slowness, going through the fallback path up to five\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e times unnecessarily. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Emoji segmentation, assisting fallback for emoji and punctuation.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e Initial approach didn't quite work as expected due to complex cases,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e have a new implementation that looks better and solves all the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e known cases. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- We had an artificial limit for row-span, increased it to match the FF\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e artificial limit in response to developer bug reports.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- This is the last layout team meeting for jchaffraix as he is leaving\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e the team and blink as of the end of this week. Thanks for all your\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e work on Blink over the years Julien and best of luck on your next\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e projects.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- cbiesinger in Tokyo until Jan 20.\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- eae, leviw in Tokyo next week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-january-11-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/405752249174791424"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/405752249174791424"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/405752249174791424"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-january-11-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1679194744255290071"},"published":{"$t":"2016-07-18T21:08:33.767Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-18T21:10:02.402Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, July 18, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, June 27, 2016):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBack to our regularly scheduled programming after the chrome team wide\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003etwo no-meeting period.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Work on root layer scrolling continues, will carry over into Q3.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScroll Anchoring [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We now have a real spec for scroll anchoring [1]. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sent Intent to Implement [2] to blink-dev. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added support for the css overflow anchor property. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to continue bug triage work this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flexbox bug triage and bug fixes. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Two known remaining issues for flexbox:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Min-size auto for nested column flexboxes.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Getting better metrics for new intristic size to see if it can\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e potentially be enabled by default.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week. See tracking bug for status.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week. Morten out for the next few weeks.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Pretty large update to the Houdini layout API spec, got into some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e really gnarly issues like out of positions floats in the middle of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e words and how to make the constraint space API sane for developers.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Check it out [3], comments welcome! (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Going through and seeing what worklet stuff needs to be done for web\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e audio, been meeting with the TOK team for worklets and will continue\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that this week. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed zoom in CSS paint worklets. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a small regression with select elements complicated by a lack\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e of tests. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The design doc for LayoutNG has been updated and the feedback from the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout team incorporated. Thanks for your help and input everyone!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e It's all but finished and I plan to circulate among the wider blink\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e team later this week. (eae, ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Shiped in M52. No further updates will be provided. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Shiped in M51 with the last few fixes and improvements shipping in 52.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e No further updates expected for the time being. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eResize Observer (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got LGTM from szager, other reviewers posetive but suggested splitting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implementation into multiple patches. Working ongoing. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Hope to land initial Resize Observer implementation this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Set goals around event loop targets for Q3. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixing a class of bugs around table borders. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to work with the Sydney-based style team with a couple of table\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e issues blocking the work to separate style resolution from layout tree\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e construction. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Next up is adding support for visibility: collapse to table rows and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e columns. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Complex text enabled by default on Android again (yay!), there are a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e number of small regressions with regard to both performance and memory\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e but nothing like the big regressions we've seen in the past. Still\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e deciding on strategy. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Merged font manager change corresponding regression fix to M53.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Next, planning to go back to looking at the glyphToBoundsMap removal -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e there were still regressions in SVG tests that I need to figure out.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Meeting with Docs team tomorrow to discuss what could be done in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Chrome to improve Docs. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a couple of crashes involving LayoutTextControl. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed SVGLength crash. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Up until now eae has been doing all bug triage for the layout team.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Now that the triage backlog is zero it's time to start a rotation\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e among all team members. Expect it to start next week and to involve\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e one week long stint as a triager every two months. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrote up instructions for bug triage [4]. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager out for the next two weeks.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- mstensho out for the next month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e1: \u003c/span\u003e\u003ca href\u003d\"https://www.google.com/url?q\u003dhttps%3A%2F%2Fcdn.rawgit.com%2Fymalik%2Finterventions%2Fmaster%2Fscroll-anchoring%2Fspec.html\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNGmw2oJ64KP0QB3z2UM2UBvX0kCdg\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://www.google.com/url?q\u003dhttps%3A%2F%2Fcdn.rawgit.com%2Fymalik%2Finterventions%2Fmaster%2Fscroll-anchoring%2Fspec.html\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNGmw2oJ64KP0QB3z2UM2UBvX0kCdg\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e2: \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/TbuxbOtyZvk\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/TbuxbOtyZvk\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e3: \u003c/span\u003e\u003ca href\u003d\"https://drafts.css-houdini.org/css-layout-api/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://drafts.css-houdini.org/css-layout-api/\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e4: \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/blink/layout-team/bug-triage\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://www.chromium.org/blink/layout-team/bug-triage\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-18-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1679194744255290071"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1679194744255290071"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1679194744255290071"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-july-18-2016"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3081458094287036759"},"published":{"$t":"2016-01-21T06:06:25.934Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-21T06:06:44.917Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, January 4, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eWelcome back every, I hope you all had a good holiday break.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eWith a new year comes new goals. Before we can set the high-level 2016\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003egoals and Q1 OKRs though we should reflect on where we are and evaluate\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eour Q4 progress.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eI'll reach out to everyone individually over the next week or so to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003estart the OKR process and will schedule a team-wide OKR meeting in a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eweek or two. In the mean time please try to summarize and score your Q4\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eOKRs and start thinking about what you want to work on in Q1 and beyond.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, November 30th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed fix for smooth scrolling target updates. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sizing main graphics layer for root layer scrolling. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Updated scroll anchoring design doc and plan start to implementing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e it this week. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Ready to turn onm smooth scrolling! Patch is ready and plan is to flip\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the switch this week (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last meeting, cbiesinger still out -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last meeting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Managed to add support for printing. Involved solving the nested mult\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e column use case which was tricky. Once that was in place printing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e support wasn't too much work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Considering unprefixing, seems reasonable.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixing random multicol bugs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started to implement worklets, have patch out. Implementing all the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e basic stuff for that.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Also this week updating the CSS custom paint API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Intent to implement for custom paint this week or next.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finishing up line layout text this week, part of the line layout api.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Final patches to implement box which will be ready for review shortly.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to send Intent to Implement this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have pending spec patch that needs to be upstreamed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Trying to land Intersection Observer patch, not having much success.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a number of issues around complex text. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Code cleanup following the move to always use complex text. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got simple text removal patch ready to go. Primed and ready to land as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e soon as 49 branches. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Zurich meeting with behdad and i18n, discuss improved fullback for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e punctuation and symbols. Needs some manual tweaking. Need better\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e handling for color emoji and emoji combinations. Might need a symbol\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e iterator and then explicit font selection. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan, jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last meeting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBug Health\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We managed to exceed our ambitious bug health goals by quite a bit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e for Q4:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Reduced untriaged bugs by over 70%, far exceeding goal of 50%.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Down to 180 unconfirmed/untriaged from 690 at the start of Q4.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Reduced total open bug count by over 25%, exceeding goal of 15%.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Down to 1688 open bugs from 2310 at the start of Q4.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - A lot of hard work by the entire team, thank you everyone!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e - Plan to institute a triage rotation in Q1, will be ~30 min a week for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e one person (rotating). Details to follow.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Stabalizing the rebaseline bot, is stable now, some open issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Looking at moving it to the build bot, blocked on infra issue that has\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e since been resolved. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed one layout blocker bug, felt good and nice to get a break from\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e trying to land intersection observer. More of the same this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Gave talk on layout at web engine hack fest in Spain. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott out Wednesday,m public holiday.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- eae, ikilpatrick, ojan in Seattle Thu-Fri for CSS Houdini meeting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with Microsoft.\u003c/span\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-january-4-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3081458094287036759"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3081458094287036759"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3081458094287036759"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-january-4-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5791222217493784945"},"published":{"$t":"2015-07-13T20:31:15.640Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-07-13T20:31:44.402Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, July 13, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUpdates since last meeting (on Monday, June 22nd):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Working on pinch viewport. (skobes)\u003c/div\u003e\u003cdiv\u003e- Has fix for double scrollbar issue and potential fix for under-\u003c/div\u003e\u003cdiv\u003e pinch. (skobes)\u003c/div\u003e\u003cdiv\u003e- Helping out with scrolling, trying to figure out how to set, identify,\u003c/div\u003e\u003cdiv\u003e and honor scroll bounds for the root layer. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- No update, cbiesinger on vacation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [crbug.com/79180]\u003c/div\u003e\u003cdiv\u003e- Updated auto tracks to use automatic minimums. (svillar)\u003c/div\u003e\u003cdiv\u003e- Added support for infinitely growable tracks. (svillar)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [crbug.com/334335]\u003c/div\u003e\u003cdiv\u003e- Looking into nested multicol, which is required for printing. Hope to\u003c/div\u003e\u003cdiv\u003e move on to writing code for it soon. (mstensho)\u003c/div\u003e\u003cdiv\u003e- Made a couple of changes to how we handle overflow at column\u003c/div\u003e\u003cdiv\u003e boundaries that fixed Wikipedia but broke Google Plus. Should be\u003c/div\u003e\u003cdiv\u003e possible to have both working at the same time. (mstensho)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout (leviw, pilgrim) [crbug.com/495288]\u003c/div\u003e\u003cdiv\u003e- First part of the layout API landed and did not result in any\u003c/div\u003e\u003cdiv\u003e performance regression. (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [crbug.com/458222]\u003c/div\u003e\u003cdiv\u003e- Working on refactoring how Blink revalidates cached results. (japhet)\u003c/div\u003e\u003cdiv\u003e- Looking into a top user complaint; sometimes we show a blank page\u003c/div\u003e\u003cdiv\u003e without any error message or indication that it went wrong. (japhet)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Test Suites (jsbell, kojii)\u003c/div\u003e\u003cdiv\u003e- Continued work to import more w3c tests, now works with the w3c test\u003c/div\u003e\u003cdiv\u003e server so that they won't require modifications any more. Looking for\u003c/div\u003e\u003cdiv\u003e volunteers to help run and validate them. (jsbell)\u003c/div\u003e\u003cdiv\u003e- Will unblocks tkent and kojii importing tests for their respective\u003c/div\u003e\u003cdiv\u003e feature work. (jsbell)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, drott, kojii)\u003c/div\u003e\u003cdiv\u003e- Looking into font fallback and trying to understand GlyphPageTreeNode;\u003c/div\u003e\u003cdiv\u003e it serves a lot of different uses cases and we need to understand\u003c/div\u003e\u003cdiv\u003e exactly what it does and why. (drott)\u003c/div\u003e\u003cdiv\u003e- WebKit has made large changes to fallback and GlyphPageTreeNode since\u003c/div\u003e\u003cdiv\u003e the fork.\u003c/div\u003e\u003cdiv\u003e- Will write up a quick doc on fallback and then decide if we want to do\u003c/div\u003e\u003cdiv\u003e a set of quick fixes or do a larger overhaul of how we do font\u003c/div\u003e\u003cdiv\u003e fallback. (drott)\u003c/div\u003e\u003cdiv\u003e- Finally got around to finish my revamp of the complex text code and\u003c/div\u003e\u003cdiv\u003e the results are in, a 3.5x - 28x speedup across all platforms. With\u003c/div\u003e\u003cdiv\u003e the slower platforms improving the most. The results are from a micro\u003c/div\u003e\u003cdiv\u003e benchmark but given the amount of time spent in text layout on real\u003c/div\u003e\u003cdiv\u003e world websites it should have a very noticeable impact. (eae)\u003c/div\u003e\u003cdiv\u003e- Looking into what features we need to add to the complex text path in\u003c/div\u003e\u003cdiv\u003e order to remove the simple path entierly. So far it looks like adding\u003c/div\u003e\u003cdiv\u003e support for tab characters is the only major things missing. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc\u003c/div\u003e\u003cdiv\u003e- Profiling with perf on Android appears to be broken, working on fixing\u003c/div\u003e\u003cdiv\u003e the run-benchmark-scripts. (wkorman)\u003c/div\u003e\u003cdiv\u003e- Bringing up the Mac 10.10 bots. (joelo).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eLogistics\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- pilgrim on vacation this week.\u003c/div\u003e\u003cdiv\u003e- cbiesinger on vacation this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-13-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5791222217493784945"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5791222217493784945"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5791222217493784945"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-july-13-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6342782482274185854"},"published":{"$t":"2015-02-19T19:57:34.403Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-02-19T19:58:43.353Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 9, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e[ eae gave high level update on planning meeting; separate\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e announcement on that to follow ]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eWe added three new team members to this week which is very exciting!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eWelcome aboard, we're glad yo have you!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- James Maclean (wjmaclean) in WAT, new to \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eproject\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ewarden\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Paul Meyer (paulmeyer) in WAT, new to blink and \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ewarden\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Koji Ishii (kojii) in TOK, new to the team but has already been helping\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e out with text rendering performance for awhile.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Refined android profiling pipeline, similar to existing linux one.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Results match that of linux with a few exceptions, more time spent in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e powf() and loading fonts. \u003c/span\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8000001907349px\"\u003eAlmost 3% of total layout time is spent in\u003c/span\u003e\u003c/font\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8000001907349px\"\u003e powf() translating color spaces for fonts.\u003c/span\u003e\u003c/font\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Started to look into FontCache on android which doesn't seem as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e effective as on other platforms.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eScrolling (skobes) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Smooth scrolling now works the same for overflow divs as for frames.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ewin_blink flakiness (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Worked to reduce win_blink flakiness by triaging flakiness and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e timeouts.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Flakiness went from 40% -\u0026gt; 10% (!), it is now one of the faster bots.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Much of remaining flakiness due to font antialiasing/subpixel\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e rendering differences.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eRename Rendering -\u0026gt; Layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/450612\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/450612\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e] (dsinclair, bsittler,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eeae, hartmanng)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- All non-prefixed files renamed. 188 prefixes files remaining.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Most of the linbox tree has been moved. (hartmanng)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eList markers (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Trying to figure out how to deal with an ancestor being moved. Opera\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e has some ideas and there might be multi-col logic that can be reused.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eText (kojii, eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Make RenderCombinedText less obstructive to the line breaker and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e paint code. Mostly \u003c/span\u003e\u003ca href\u003d\"http://donecrbug.com/433176\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003edonecrbug.com/433176\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e, selection paint issue\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/438852\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/438852\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e and a bit more cleanup still remains. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Complex path perf issue that had been stalled due to the slow legal\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e permission is finally clear now, hope to re-start with Dominik this\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e week. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Folded line_break into TextBreakIteratod, removed unused logic and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e de-templetized a bunch of functions. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Difference in preferred width between text and containing element\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e caused regression on Facebook due to strict overflow handling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e Has fix but writing layout test is difficult due to simplified\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e text-rendering pipeline for tests. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Fixed ZWJ handling on simple text path on Mac. (eae)\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-9"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6342782482274185854"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6342782482274185854"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6342782482274185854"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-9"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7043822625103535096"},"published":{"$t":"2016-03-30T20:55:07.415Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-30T21:09:19.329Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 28, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, March 21, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed ScrollAnchor handling of position:absolute. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- 35 tests currently fail with scroll anchoring, digging into those.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on getting ScrollAnchor to work during smooth scroll\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e animation. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- ScopedLogger got removed, I am trying to get it back in. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrote up a giant patch for CSS paint. Plan to split it up into to, fix\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e bugs and add tests this week before landing. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Converting layout view to api. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added an include guard for the line layout api and fixed the few small\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e API gaps it exposed. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finishing up document reporing the outcome from the LayoutNG\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e hackathon. (leviw, eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Some CSS Containment discussions. Current options are layout, paint,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e style, and strict. Adding one more, bike-shedding on name.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager on vacation this week, eae will try to land a couple of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e outstanding changes in his absence. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a text wrapping bug where a fast-path incorrectly applied to LTR\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e content in a RTL container. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finished line breaking investigation and wrote up a design document\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e outlining my proposed new approach, using shaper information. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1eMTBKTnWEMDu00uS2p8Xj-l9Pk7Kf0q5y3FbcCrWYjU/\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://docs.google.com/document/d/1eMTBKTnWEMDu00uS2p8Xj-l9Pk7Kf0q5y3FbcCrWYjU/\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking into a number of white-space: pre bugs. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed the invalid unicode codepoint issue that pdr@ had pointed us\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to; Ugly integer truncation issue. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued the work on small caps, implementation is coming along quite\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e well, the opentype feature itself works, but the synthesis needs more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tweaking. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking into the confused glyphs issue on Mac. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looked into a few table bugs but haven't yet made demonstrable\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e progress. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have a full page of notes that are useful to me on writing mode, was\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e derailed due to paint perf work, expect to get to spend a few days\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e this week on it. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbiesinger in SF week of March 28.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott in SF week of March 28.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager on vacation starting week of March 28.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-28-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7043822625103535096"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7043822625103535096"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7043822625103535096"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-28-2016"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7755382585344314048"},"published":{"$t":"2016-03-01T19:16:05.225Z"},"updated":{"$t":"2017-04-20T16:34:23.161Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-01T19:16:12.467Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 29, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eThe layout team is a long-term team that owns the layout code in blink.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eSee \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/blink/layout-team\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://www.chromium.org/blink/layout-team\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e for more information.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Tuesday, February 22nd):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week, figured out that scroll anchoring is super broken. Working\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e on fixing that. We're not intercepting frameview scrolls correctly.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Three new smooth scrolling regressions reported last week, working on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fixing those. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Aim to get back to helping out with scrolling work next week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed all the scrolling bugs! Much rejoicing! Sadly the fix has been\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reverted to due causing a crash in FrameView.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Upstreaming flexbox tests to w3c.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on percentage sizing of children of flex items. A lot\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e of user requests and required by the updated spec.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week, landed PaintRenderingContext2d changes. Fun times with a ms\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e compiler bug.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got debugging for worklets working locally, coordinating with devtools\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e team about ways to integrate it into devtools.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- This week, talking to compositor worker team about API things.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have been filling out the new block layout API class hierarchy, should\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e be done creating all the necessary classes this week at which point I\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e can report back on how much work each one of the will be. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Chased down some remaining gaps in the line layout API but didn't\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e finish. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on the scafolding for LayoutNG. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on a few coding issue around intersection observers, keeping\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e up with spec changes. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- More or less wrapped up on heavy duty part of that, converting some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tests to w3c style. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We should do some perf testing, we don't really know how fast or slow\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e our implementation is. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Also signed up to run an experiment where we use intersection observer\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to see how frequently we encounter iframes that load but are never\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e viewed. Gather date to inform possible interventions down the line.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Cleaned up platform specific FontCache code. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Updated windows font fallback logic for win 7, 8, 8.1 and 10. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added support for Glagolitic script. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking into antialiasing toggling on windows and a better way\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to query the system for font preferences that works without punching\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e holes through the sandbox. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have no more release blockers, yay! After battling trying to figure\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e out root cause for no 1 crasher for days, finally found repro. Tracked\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e down to \"remove plugin size hack\" change, reverting that fixed it.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Still some issues with regard to life cycle state but it's within\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tolerance. Frames and widgets are handled differently. Specifically\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e from the parent frame (main frame) we have multiple loops where we go\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e into our child frames and tell them to move their life cycle along,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e but we don't do that for widgets. When a frame within a widget (web\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e view plugin) we special case that causing all sorts of unpredictable\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e behavior. Should be fixed at some point but not a priority at the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e moment. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have begun the code research phase for the exploratory flipped blocks\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e work. at a minimum we'll learn things. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Pretended it was 1997 and fixed full-page-zoom for frames (as in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e frameset). (eae)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-29-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7755382585344314048"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7755382585344314048"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7755382585344314048"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-29-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1348620197391512136"},"published":{"$t":"2016-03-30T20:54:28.092Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-30T21:09:05.316Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 21, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Tuesday, March 15, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on patch to fix absolute positoined scroll anchors within\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e static positioned scrollers which is an interesting edge case.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Smooth scrolling and scroll anchoring interaction is a bit problematic\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and needs some work given the absolute scroll offsets that update\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e immediately.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Work on speeding up smooth scrolling in response to user feedback.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed percentage sizing, the last remaining major task.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Almost all of the scrolling regressions (again!) still one case\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e remaining that needs more investigation.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- eae/svillar trying to figure out what would be required to ship CSS Grid.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- The past weeks I've been working on the break-{after,before,inside}\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e properties. Mostly some preparatory patches so far, while I've kept\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the beefy parts to myself for now.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Also: continued cleaning up and untangled multicol stuff in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e mapLocalToAncestor() and friends, which made it super-easy to fix some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a hot PaintLayer clipping bug afterwards.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Hooking up script support for the CSS Paint API this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Next up is generating new CSS images for the paint API. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on getting all of the LayoutView references over to the new\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e block layout API, will be one of the largest leaf nodes ion the new\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout API. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Will try to add precoomit hook to enforce the line layout API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- LayoutNG hackathon last week. It happened and was glorious. We got of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to a better start than expected, got very simple layout working day\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e one. I think we're convinced that it's a tenable design, deciding on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e next steps. (leviw, ikilpatrick, dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Assortment of patches for intersection observer, including all release\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e blockers that I'm trying tom land this week before vacation. Gated on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reviewers. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landing fix for shaping fonts across unicode ranges, now all ranges\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e are all shaped together in one go. Also fixes a bug reported by\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e typekit, made adobe happy. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Resume work on small-caps font variant. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating line breaking performance. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Dealing with a table bug fix from a few weeks ago, breaking some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e chrome-only sites relying on the old incorrect behavior.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Rebaseline bot is now actually running on the builder, no longer on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003emy workstation. Exciting times. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- More detailed research on writing modes, continues this week and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003enext. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbiesinger in SF week of March 28.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott in SF week of March 28.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager on vacation starting week of March 28.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-21-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1348620197391512136"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1348620197391512136"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1348620197391512136"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-21-2016"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1635109283630914864"},"published":{"$t":"2015-02-19T19:55:25.452Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-02-19T19:56:10.036Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 2, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Running perf tests on Android, have preliminary data.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e - Loading fonts takes up a lot of time for some specific tests, these\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e tests have very simple layout though so font-loading is the only\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e \"slow\" thing.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e - Most test have a more even distribution that looks very similar to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e linux.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Added histogram for layout times to collect user data. Might add more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e detailed ones (text layout vs block layout etc) later.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eRename Rendering -\u0026gt; Layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/450612\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/450612\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e] (dsinclair, bsittler,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e jchaffraix, eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Moving rendering to layout. Using spreadsheet to coordinate.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Moved hit testing last week, moving compositing now (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eFirst-letter (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- More Clusterfuzz issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eLine Boxes (hartmanng, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/321237\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/321237\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Continuing on float to layout unit conversion. Looks like a few more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e classes will need to move to layout unit.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- hartmanng and szager to sync up on \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003estatus\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e and strategy.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eFlexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Started working on updating flexbox implementation to match latest\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e spec revision.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Coordinating with the firefox and IE teams to ensure compatibility.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eScrolling (skobes) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Background painting bug has been fixed (yay!)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- window.scrollTo wired up for root layer scrolling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Working on issues with position: fixed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eText (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Held text workshop with android and i18n teams last week. Will try to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e share hyphenation implementation (or at the very least dictionaries)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e with android. szager volunteered to lead this form the blink side,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e likely in Q2.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Looks like the i18n team has dictionaries with compatible licenses\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e for at least a handful of languages.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- WIP patch that removes an extra copy of the text and avoids\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e unnecessary work for 8bit. Needs a new version of harfbuzz which is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e problematic.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- hartmanng is perf sheriff last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- jchaffraix and eae in Sydney for planning meeting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- szager out much of last week.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-2"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1635109283630914864"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1635109283630914864"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1635109283630914864"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-2"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1832816703946195800"},"published":{"$t":"2015-08-04T18:15:52.314Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-08-04T18:16:40.785Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 3, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eThanks for running the show last week jsbell. Now back to our regularly\u003c/div\u003e\u003cdiv\u003escheduled programming.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on Monday, July 27th):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes, szager) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed under-painting issue on android. (skobes)\u003c/div\u003e\u003cdiv\u003e- Fixed a regression causing double scrollbars caused a previous bug\u003c/div\u003e\u003cdiv\u003e fix. (skobes)\u003c/div\u003e\u003cdiv\u003e- Identified that scrollable elements with animated gifs will do a\u003c/div\u003e\u003cdiv\u003e full re-layout even if it's composited. (skobes)\u003c/div\u003e\u003cdiv\u003e- Fixed a hairy flexbox scrollbar bug where the size of the scrollbar\u003c/div\u003e\u003cdiv\u003e wasn't taken into account when computing the flexed size. (szager)\u003c/div\u003e\u003cdiv\u003e- Containing work cleaning up DepricatedPaintLayerScrollableArea in an\u003c/div\u003e\u003cdiv\u003e effort to have sane scroll bounds for the root layer. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Flexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Had a meeting with CSS flexbox spec authors last week and leared that\u003c/div\u003e\u003cdiv\u003e some areas of the spec that I've been working on implementing might\u003c/div\u003e\u003cdiv\u003e change further. Will follow up this week.\u003c/div\u003e\u003cdiv\u003e- Triaged a bunch of flexbox bugs.\u003c/div\u003e\u003cdiv\u003e- Up-streaming flexbox tests have proven harder than expected, might\u003c/div\u003e\u003cdiv\u003e take a week or two to resolve.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCSS Grid Layout (svillar) [\u003ca href\u003d\"http://crbug.com/79180\"\u003ecrbug.com/79180\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- cbiesinger have been helping with reviews.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Doing a lot of cleanup and bug fixing work.\u003c/div\u003e\u003cdiv\u003e- Containing working on support for nested columns, progressing nicely\u003c/div\u003e\u003cdiv\u003e but nothing landed yet.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003ca href\u003d\"http://crbug.com/495288\"\u003ecrbug.com/495288\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Working on moving layout box and descendants over to use the API.\u003c/div\u003e\u003cdiv\u003e (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [crbug.com/458222]\u003c/div\u003e\u003cdiv\u003e- No update.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae, drott, kojii)\u003c/div\u003e\u003cdiv\u003e- Text workshop in Helsinki, Behdad and Drott working on optimizing the\u003c/div\u003e\u003cdiv\u003e Blink/HarfBuzz integration.\u003c/div\u003e\u003cdiv\u003e- Completed tests for styling and selection, found a few issues as a\u003c/div\u003e\u003cdiv\u003e result and have been working on fixing those. (drott)\u003c/div\u003e\u003cdiv\u003e- Unicode range matching is next. (drott)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc:\u003c/div\u003e\u003cdiv\u003e- Continuing to talk to people about position observer, got lots of\u003c/div\u003e\u003cdiv\u003e feedback, mostly positive. (slighgtlyoff)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLogistics:\u003c/div\u003e\u003cdiv\u003e- kojii on vacation this week.\u003c/div\u003e\u003cdiv\u003e- drott on vacation this Wednesday until next Friday.\u003c/div\u003e\u003cdiv\u003e- cbiesinger in SF this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-3-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1832816703946195800"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1832816703946195800"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1832816703946195800"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-3-2015"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2464565684985021556"},"published":{"$t":"2016-02-23T00:36:34.856Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-02-23T00:36:43.360Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 22, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Tuesday, February 16th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed crashes caused by stale LayoutObject pointers in scroll anchor.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed an old bug in coordinated scrollbar where we hold stale\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003escrollbar pointers.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Simplifications in paint layer scrollable area.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Playing around with scroll anchoring on real world web sites.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discovered a new smooth scroll regression.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finished up the scrolling fixes last week, at least I thought I did.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e szager found another issue relating to nested flexboxes. Not quite\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e sure what the correct fix is, will require further work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- More flexbox release blockers relating to overflow: auto.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Imported Mozilla flexbox tests, pass the vast majority. One failure is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e paint related and will probably fixed by slimming paint v2 (the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fundamental composting bug), a few fail due to lack of visibility\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e collapse support.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Struggle with upstreaming tests to w3c continues, synced up with\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fantasi and have a plan to move forward.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Multi column properties unprefixed! Congrats! [\u003c/span\u003e\u003ca href\u003d\"http://crrev.com/376249\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrrev.com/376249\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added partial support for modern breaking properties. Work on these\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e continues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Successes in splitting up RenderingContext2d, patch out that has an\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e LGTM already. Should be ready to land today.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started adding dev-tool support to worklets, plan to have it hooked up\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and working at the end of this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on removing the default operator for the Line Layout API.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Covering gaps in the API where we are relying on implicit conversion.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on the Block Layout API. Trying to figure out the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e hierarchy, still up in the air. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Hope to finish up Line Layout API and add include guard by the end of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the week. A bit hairier than expected but cautiously optimistic.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent most of last week doing spec work for IntersectionObserver.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e [szager]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- This week, I have a few code changes to make so our Intersection\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Observer implementation matches the latest version of the spec.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e After that plan to ramp down work on IO for the time being. [szager]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- kojii/drott/behdad doing a text workshop in Tokyo, dealing with text\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e shaping and font fallback issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed getBoundingClientRect for collapsed ranges. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Removed mac specific backspace handling in editing. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a number of release blockers. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- ikilpatrick in Waterloo, Canada next Week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- leviw out Monday (today).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- dgrogan out Friday and next Monday.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- behdad/drott in Tokyo all week.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-22-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2464565684985021556"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2464565684985021556"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2464565684985021556"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-22-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5271845367258179944"},"published":{"$t":"2016-08-30T00:29:23.694Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-30T00:29:31.589Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 29, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, August 22, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Work on root layer scrolling continues. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScroll Anchoring [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/558575\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/558575\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Support for SANACLAP (Suppress if Anchor Node Ancestor Changed Layout-\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Affecting Property) landed. Should help reduce the number of hacks\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e required to support the feature. [\u003c/span\u003e\u003ca href\u003d\"http://bit.ly/sanaclap\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttp://bit.ly/sanaclap\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e] (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Aim this week is to get it (SANACLAP) into canary to gather data.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Dealing with a devtools scroll anchoring bug.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Incoming bug rate for flexbox is going down, most issues have been\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fixed and we aren't detecting many new ones. Yay. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Some lingering reports and concerns about the abs-pos change that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e will require outreach/evangelism. Not nearly as much as previously\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e thought though. Microsoft paved the way and did a really good job of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e reaching out to web authors. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week. See tracking bug for status.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Still working on paint layer issues triggered by an investigation into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e incorrect behavior for getClientRects. Issues mostly around writing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e mode and paint layer interaction. Paint layer is a mess when it comes\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to coordinate spaces. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Lots of work around Worklets for Web Audio and Web Animations in\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e preparation for TPAC last week. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to spend more time preparing the Worklets and CSS Custom Layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e specs for TPAC this week. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on event loop spec. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Converted every backing fragment and constraint space to physical\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e coordinates instead of logical. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Might attempt to add initial support for floats this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started on inline layout support. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Initial layout opportunities implementation. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Implemented state machine for async layout. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added fragment builder class to help with fragment construction.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Start working on margin collapse. (glebl)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eResize Observer (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Finally landed and is looking good for M54. (atotic)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continuing work on fixing high priority table bugs. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Complex text on Android is looking good and is on track for M54.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigated a shaping regression on old OS X versions. Due to a few\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e previous shaping fixes we now crash in certain cases due to the font\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fallback cascade on old versions of OSX. Looking into options. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- We don't support type1 (bitmap) fonts on Linux however they show up\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e in the font selection UI. Fixed this and in doing so also broke the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e dependency on Pango. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Made a change to skia to avoid picking type1 fonts during fallback,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e thereby reducing the number of attempts thus improving performance.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Preparing for ATypI. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eInterventions\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Iterated on data collection methodology for a potential third party\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e iframe intervention. Missed the branch point but got a patch that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e I'm happy with. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helping Physical Web team with Google infrastructure integration.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (glebl)\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-29-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5271845367258179944"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5271845367258179944"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5271845367258179944"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-29-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5926995403755633515"},"published":{"$t":"2015-09-14T22:40:51.918Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T22:41:35.342Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 31, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, August 24th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Tracked down issue with scroll bounds change and determined that the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e failing tests where due to a bug in the old implementation. New test\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e results are correct. Will require a rebaseline. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Still having some problems with the flexbox scollbar change, need to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e figure out why the fix is causing a perf regression. Happy with code\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e change and convinced the fix is correct and that the new behavior is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e better. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Unprefixed sizing keywords.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continuing work to bring implementation up to spec.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Various bug fixes.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continuing work on multicol balancing and nesting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed several API patches. Estimate a couple of days worth of work\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e remains. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on CJK fonts pri 1 issues. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on complex path blockers and recent regressions. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Resolved all open spec issues in Writing Modes in CSS F2F. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating unprefix planning for Writing Modes. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued on shaper driven segmentation work. Have working prototype.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Quite a bit of work remains to handle all edge cases, vertical text\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and emphasis marks. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Various Windows font fallback fixes. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Ripping out linebox contain implementation following last weeks intent\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to deprecate and remove. (wkorman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Misc bug fixes, mostly related to rounding and line boxes. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plugin persistance was re-landed last week, this allows plugin state\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to persist across reattach and is a big win. (dsinclair)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- leviw on vacation (that thing in the desert) this week and next.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes on vacation this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager back from Seattle.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- esprehn, ojan, ikilpatrick in Paris for CSS F2F meeting until mid week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbiesinger out until Wednesday.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-31-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5926995403755633515"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5926995403755633515"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5926995403755633515"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-31-2015"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6271923384571600506"},"published":{"$t":"2015-02-23T19:43:16.897Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-02-23T19:47:54.700Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 23, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eWe had two new people joining the meeting this week:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- Joshua Bell (jsbell)\u003c/div\u003e\u003cdiv\u003e - Works on Storage APIs (TL) and ServiceWorker.\u003c/div\u003e\u003cdiv\u003e - Interested in some of the non-layout Warden tasks.\u003c/div\u003e\u003cdiv\u003e- Alex Russell (slightlyoff)\u003c/div\u003e\u003cdiv\u003e - TL for Fizz. Available to consult on API questions and JS interaction.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/wednesday-february-18\"\u003eWednesday, February 18th\u003c/a\u003e):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e- Looking at perf regressions on a webkit performance test.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Fixed Mac smooth scrolling regression.\u003c/div\u003e\u003cdiv\u003e- Working on fixed position elements this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRename Rendering -\u0026gt; Layout [crbug.com/450612] (dsinclair)\u003c/div\u003e\u003cdiv\u003e- Trying to rename RendereBlock to LayoutBlock. Will have to land\u003c/div\u003e\u003cdiv\u003e outside of office hours and/or close the tree. Will coordinate with\u003c/div\u003e\u003cdiv\u003e the infra team.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Synced up with slightlyoff on API surface and implementation.\u003c/div\u003e\u003cdiv\u003e- Continuing work on prototype and write-up.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (hartmanng, szager) [crbug.com/321237]\u003c/div\u003e\u003cdiv\u003e- No real progress last week. Plan to resume this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Working on updating flexbox implementation to match latest spec\u003c/div\u003e\u003cdiv\u003e revision.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, wjmaclean, eae)\u003c/div\u003e\u003cdiv\u003e- Vertical flow performance test is up and running. (kojii)\u003c/div\u003e\u003cdiv\u003e- Temporary reverted vertical flow to simple path for the branch cut.\u003c/div\u003e\u003cdiv\u003e (kojii)\u003c/div\u003e\u003cdiv\u003e- Studying line breaker and exploring ideas:\u003c/div\u003e\u003cdiv\u003e - Optimize width() when the length is one character.\u003c/div\u003e\u003cdiv\u003e - Line breaker to use heuristic to start from likely break\u003c/div\u003e\u003cdiv\u003e opportunities. (kojii)\u003c/div\u003e\u003cdiv\u003e- Studying text iteration code, making it easier to follow. (wjmaclean)\u003c/div\u003e\u003cdiv\u003e- Investigated Mac test regressions. (eae)\u003c/div\u003e\u003cdiv\u003e- Plan to ressume work on complex text performance work, avoiding an\u003c/div\u003e\u003cdiv\u003e extra copy of the string and unnecessary normalization. Requires an\u003c/div\u003e\u003cdiv\u003e updated version of HarfBuzz which is tricky on Linux as we use the\u003c/div\u003e\u003cdiv\u003e system version. Have some ideas. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc\u003c/div\u003e\u003cdiv\u003e- Finished blink starter bugs (svg image cache), image resourcem,\u003c/div\u003e\u003cdiv\u003e Landed and done. (paulmeyer)\u003c/div\u003e\u003cdiv\u003e- Renamed --dump-render-tree to --run-layout-tests. Done but documentation\u003c/div\u003e\u003cdiv\u003e needs updating. Old flag deprecated but still there for now.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAssertions/Regressions/blocking bugs\u003c/div\u003e\u003cdiv\u003e- Working through list of ClusterFuzz assertions (cbiesinger).\u003c/div\u003e\u003cdiv\u003e- Fixed a CluserFuzz selection range bug and got \"rewarded\" by being\u003c/div\u003e\u003cdiv\u003e assigned another one. (szager)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-23-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6271923384571600506"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6271923384571600506"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6271923384571600506"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-23-2015"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7750620108065266165"},"published":{"$t":"2016-02-02T00:53:45.078Z"},"updated":{"$t":"2017-04-20T16:34:23.160Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-02-02T00:53:57.176Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, February 1, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, January 25th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Prototyping scroll anchoring and added a flag for enabling it,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e --enable-scroll-anchoring. Working on a basic implementation. Current\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e design looks solid and well encapsulated. Still needs testing in the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e real world but looks promising. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Changed LayoutRoots to avoid making scrollbars trigger relayout.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a number of flexbox regressions last week. As of now all known\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e regressions in 49 and 50 have been resolved. Most 48 regression have\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e been addressed, merged a last fix this morning.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flexbox interop work continues, including a follow up to a temporary\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fix for a regression.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last meeting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Intent to unprefix multicol as is turned out not to be too popular.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Gated on generic breaking properties. Will send out a separate intent\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e for that. Breaking properties are generic and apply to all paginated\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (and in theory region based) content. Not simply an alias for -webkit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e prefixed properties as the values differ.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a number of multi-col bugs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Presented custom paint, custom properties and custom layout at CSS\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e working group meeitng in Sydney. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Updated custom paint, custom properties and custom layout specifications.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Barista for the houdini working group, exceeding expectations.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Moved resolvedColor to use line layout api, had a lot of cascading\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e effects that allows for simplifications in TextPainter and further\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e allows the API to be used in unit tests. Nice properties and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e simplification ensued. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Multiple line layout patches includes a potential large change to the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e API that was discussed last week. Fully up to speed on api work and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e have a few layout patches pending. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussed CSS containment at CSS working group meeting, positive signals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e from working group and other implementors. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added optimization to skip render-throttled iframes during hit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e testing. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Presented CSS Writing Modes, CSS Text Decorations, and Snap at CSS\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Working Group meeting in Sydney. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Emoji segmentation, tests on all platforms. Some blockers on Android\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e due to lack of capabilities with regard to font family based font\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e selection for fallback. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Enabling open type features through CSS keywords. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Dealing with regressions and fallout following font fallback overhaul.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHTML Tables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Misc table interop fixes relating to percentage height resolution.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on a table regression dating back to the WebKit days, will\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e send out to Morten for review later today. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Made int to layout unit conversion explicit to avoid unnecessary\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e round-trips and v8 problems during style conversion. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- ikilpatrick, leviw, kojii, and eae in Sydney for Houdini and CSS WG\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e meetings. \u003c/span\u003e\u003ca href\u003d\"https://wiki.csswg.org/planning/sydney-2016\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://wiki.csswg.org/planning/sydney-2016\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott, behdad, kojii in Tokyo for Text workshop February 19-28.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-1-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7750620108065266165"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7750620108065266165"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7750620108065266165"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-february-1-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/500333560836195814"},"published":{"$t":"2016-05-16T21:09:39.135Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-16T21:09:45.804Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 25, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, April 11, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flexbox bug triage and bug fixes. Unrelated to scrolling for a change\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (bug 576202, bug 341310, bug 375693).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Ramping back up on scrolling, trying to help cbiesinger with flexbox\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e overflow:auto heartache. Lots of fun. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Reviewing CSS Grid specification. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continuing to focus on multi-col and fragmentation.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Orphans and widows, need to clean up this code, to support\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e break-before \u0026amp; break-after.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Waiting on codereivews for CSS Paint API. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Begun work on spec stuff, cleaning up paint, worklets. Starting to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e work more on CSS Layout API. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Migrated most references of Document::layoutView() to Document::\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layoutViewItem() in preparation for removing Document::layoutView()\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and routing everything through the block layout API. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Migrating references to the layoutBlockView on document, and move to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e item. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Start the LineLayoutAPI document with leviw. pilgrim, dgrogan to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e clustering all the API methods into groups, figuring out we want\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to rationalize these roots. (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sent out Intent to Ship. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrapped up most Intersection Observer work, merged a patch into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e M51. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eTables (dgrogan)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Table layout refactor, putting out fires with patch going to stable.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working through list of highly starred table bugs.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Much digging into tables for \u003c/span\u003e\u003ca href\u003d\"https://crbug.com/427994\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://crbug.com/427994\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://crbug.com/178369\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://crbug.com/178369\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e which are different but related issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e mstensho has been consulting.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued to work on font-variant-caps, blocked on rebaseline bot\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e being offline. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- font-variant property into a shorthand, CL up for review. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Contributed to Koji's document on implementation/shipping plan for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e hyphenation. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Implemented font-variant property parsed as CSS shorthand (as opposed\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to being a CSSPrimitive Value before), working well. Font-variant now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e accepts font-variant-ligatures and font-variant-caps values, and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e combines synthetic small caps with ligatures \\o/. Up for review.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed bug where we sometimes omitted tab characters to due incorrect\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e rounding in LineWidth::\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003esnapUncommittedWidth. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed crash in Font::\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003ecomputeCanShapeWordByWord. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of very large transforms in ContainerNode::boundingBox.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbiesinger is now a core OWNER, congratulations!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes out until end of the month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- eae in Tokyo until end of week, Zurich next week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott in Zurich next week.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-25-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/500333560836195814"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/500333560836195814"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/500333560836195814"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-25-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1258903887919541397"},"published":{"$t":"2015-09-14T22:43:16.647Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T22:43:22.817Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 17, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, August 10th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Moved scrolled-by-user flag out of FrameView. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Custom scrollbars are now working with root layer scrolling. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got go-ahead to unprefix intrinsic sizing keywords (min-content,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e max-content, fill and, fit-content). Will go ahead and unprefix all\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e but fill (currently -webkit-fill-available) as there is still some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e open questions around it and the CSS working group doesn't quite think\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e it's ready for prime time yet.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added use counter for prefixed intrinsic size keywords.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on refactoring min/max ContentForChild calls to share more\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e code and logic.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed initial support for nested multicol layout. Column balancing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e still needs work but the most common use cases work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Plan to hook up printing code once I'm more confident about the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e implementation. Will finally enable multicol for printing for the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e first time ever in Blink. :) (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed several API patches and finishing up API conversion for box\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e model object. Estimate about a weeks worth of work remains. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Debugging font matching issue on windows, looks like Skia is not\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e returning the full font name. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Implemented tab characters for complex path, one of the blockers to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e unify simple path to complex path. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed font fallback cleanup to fix a crash bug with support from the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e memory team. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Enabled Unicode Variation Selector for Chrome OS. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Eliminated the last remaining direct caller to HarfBuzzShaper for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e better layering. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of invalid and unmatched UTF-16 surrogate pairs, we now\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e replace invalid pairs with a replacement glyph and keep processing the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e rest of the text node while before we would abort after the first\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e invalid character and not paint the remaining text. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of tabs in complex path in cases where tabs are not\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e supported. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Cleaned up PageBoundaryRule and nextPageLogicalTop. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed issue with auto-height table cells and percentage heights that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e broke a couple of popular legacy websites. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Issue with win10 bots where hundreds of tests where failing and tools\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e not yet updated to support win8 or win10 specific results, since\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e resolved. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Got go-ahead to upstream layout tests to W3C. (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussion around layout test standards and guidelines, jsbell gave\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e update on plan to support web platform tests and will send out further\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e information when ready.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Wrapping up custom properties. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- cbiesinger gardening last week (Thu-Fri).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- leviw gardening this week (Mon-Tue).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Pre-CSS F2F meeting in SF on Tuesday.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-17-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1258903887919541397"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1258903887919541397"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1258903887919541397"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-17-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1353815750711812884"},"published":{"$t":"2015-09-14T22:42:20.770Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T22:42:30.786Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 24, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, August 17th):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on an issue where Element.clientWidth and clientHeight are not\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e excluding the width/height of scrollbars as expected. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- There is logic for coordinates scrollbars in the compositor that has a\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e check in scrolling coordinator that only applies to the main frame on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e some platforms. Needs investigation as we'd like this to apply for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e root layer scrolling on all platforms. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Trying to land a fix for scroll bounds but encountered a couple of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e test failures that only occur on Mac and Windows. Do not have access\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to either platform at the moment (working remotely). Looks like off-by\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e -one errors. Will work with skobes to track it down. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have been continuing to struggle with flexbox scrollbar change. Had\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e perf regression that prevented landing it. Fixed regression mostly,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e is close but is a great deal of variance in inspector tests between\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e runs. Working on getting tracing information from running layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tests. Will reach out to tracing-team. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added use counters for flexbox intrinsic size change and for the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e prefixed intrinsic size keywords.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Unprefixed the intrinsic size keywords, with the exception of fill.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e Will be in M 46.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looked into deprecating the old prefixed intrinsic size keywords,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e only supported by us and webkit, fairly low usage.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- fill-avalible will be kept as prefixed, pending spec changes to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e unprefix. Oddly seems to be the most used one.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No update since last week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Refactoring the multicol balancing implementation. It currently\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e assumes that the layout engine feeds the balancer with accurate data\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (space shortage and explicit breaks) for each layout object once and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e only once for each layout pass. This is an incorrect assumption,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e because sometimes we relayout a subtree (typically because the initial\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e logical top estimate was wrong) (in which case what the balancer got\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e during the first pass is most likely wrong). Sometimes we also just\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e skip an entire subtree as an optimization (which may mean that the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e balancer doesn't get all the data it's supposed to get). Trying to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e change it to performing everything related to column balancing after\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout of a flow thread, instead of partially during layout and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e partially after layout.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed several API patches. Estimate a couple of days worth of work\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e remains. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed font-stretch and better matching for font-style, had some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e issues that delayed landing it but it's in now and we have great test\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e coverage for it. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Discussed font mathcing tests with adobe. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Will continue work on font fallback this week. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Encountered a skia bug where the full font name wasn't returned as\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e expected on windows, was quickly fixed by bungeman, thank you!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on blink/harfbuzz integration, plan is to have harfbuzz do the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e font fallback instead of doing it prior to shaping. That way combining\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e marks, among other things, can be better supported and we avoid having\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to reinvent the wheel given that harfbuzz already has support for font\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e fallback. Long process and complicated dependencies. Will require\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e changes to how we handle variance (like small caps and emphasis marks)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e as our current implementation cannot be supported and will need to be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e updated. Should also result in cleaner code. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed handling of CSS word-spacing for non-breaking spaces. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Investigating test changes required for enabling complex text\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e everywhere. Might be able to disable kerning and ligatures for some\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scripts temporarily to avoid having to rebaseline all tests and to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e make the change in two stages; (1) enable complex text everywhere,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (2) enable kerning \u0026amp; ligatures. Not sure it's worth the effort. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on blockers for unifying simple path and complex path. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Enabled Unicode Variation Selector in ChromeOS/Linux. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fix line breaking issue around ruby. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on CSS Writing Modes issues. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Subpixel bugs. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Burning down Mac OS 10.10 test expectations, down 900 lines last week\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e alone! (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- leviw goes on vacation (that thing in the desert) on Wed + two weeks.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes goes on vacation on Thu + one week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- szager on vacation Wed and Fri. Back in SF on Mon.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- esprehn, ojan, ikilpatrick in Paris for CSS F2F meeting this week.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-24-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1353815750711812884"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1353815750711812884"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1353815750711812884"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-24-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3748538267803028295"},"published":{"$t":"2016-04-04T18:24:18.967Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-04T18:24:26.419Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 4, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, March 28, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eShort update this week as a lot of people are due to Edge conf.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Restored ScopedLogger.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued to work on on getting ScrollAnchor to work during smooth\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scroll animation. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed a scrolling bug, caused a small regression, looking into it now.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed a work-around to allow DI into branch, have a better patch\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e that I'll keep working on this week. Currently breaks one of our\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tests.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Might be helpful to have scroll behavior better defined in spec.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Bunch of progress on layout view item, working on getting rid of\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e anything that touches LocalFrame and LayoutObject. Moving to new\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e shiny LayoutItem. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Have about ten files left, some pending review. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sent out hackathon report for initial review. (leviw)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started working on design doc. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Getting back into Intersection observer, dotting the i's and crossing\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e the t's before branch point on Friday, Have one significant patch to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e land, today, hopefully. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Figure out behavioral difference between actual implementation and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e polyfill. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Prep work for shipping. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Looking into android memory regression with mixed success, getting the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tests working locally have proven to be quite challenging. Working\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e with the Chrome Android team to resolve. (eae, drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed crash in localCaretRectForEmptyElement. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogisitcs:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes out until end of the month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- eae out Wed-Fri.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott, leviw, ikilpatrick at edge conf Mod-Tue.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-4-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3748538267803028295"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3748538267803028295"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3748538267803028295"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-4-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4814988857417962658"},"published":{"$t":"2015-04-06T19:12:39.303Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-06T19:12:53.449Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 6, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eMost offices had the day off due to Easter so this update is limited\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eto the SFO, MTV and NYC offices.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdates since last meeting (on Monday, March 30th):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- About to land a LayoutMetric rewrite that should give more details.\u003c/div\u003e\u003cdiv\u003e- Started working on LayoutAnalyzer UMA histograms after discussion\u003c/div\u003e\u003cdiv\u003e with chrishtr.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [crbug.com/417782]\u003c/div\u003e\u003cdiv\u003e- Fixed a positioning bug affecting scrollToAnchor.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Started thinking about the grand block layout refactoring and smaller\u003c/div\u003e\u003cdiv\u003e cleanup tasks that can be done in parallel.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/div\u003e\u003cdiv\u003e- Working on positioning of position: absolute elements.\u003c/div\u003e\u003cdiv\u003e- Working on importing w3c test suite for flexbox.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBlink componentization (pilgrim) [crbug.com/428284]\u003c/div\u003e\u003cdiv\u003e- Started working on moving clipboard from core to modules.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, wjmaclean, eae, rune)\u003c/div\u003e\u003cdiv\u003e- Removed incorrect optimization for fixed-pitch fonts. (eae)\u003c/div\u003e\u003cdiv\u003e- Renamed SurrogatePairAwareTextIterator to UTF16TextIterator and added\u003c/div\u003e\u003cdiv\u003e support for multi character glyphs which was previously handled separately. (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCleanup/code health\u003c/div\u003e\u003cdiv\u003e- Removed canHaveGeneratedChildren from RenderObject and turned it into\u003c/div\u003e\u003cdiv\u003e a static function. (pilgrim)\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-6-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4814988857417962658"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4814988857417962658"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4814988857417962658"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-6-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7568775537377010137"},"published":{"$t":"2015-04-27T20:55:22.041Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-27T20:57:24.800Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 27, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- Preliminary LayoutAnalyzer-powered UMA findings. A few surprises\u003c/div\u003e\u003cdiv\u003e already, lots of opportunity for further analysis and more data.\u003c/div\u003e\u003cdiv\u003e- Working on LayoutTree trace object snapshots and various\u003c/div\u003e\u003cdiv\u003e LayoutAnalyzer improvements.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eScrolling (skobes) [\u003ca href\u003d\"http://crbug.com/417782\"\u003ecrbug.com/417782\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Reviewed bokan's RootFrameViewport change, and investigated a\u003c/div\u003e\u003cdiv\u003e background painting issue with root layer scrolling + slimming paint\u003c/div\u003e\u003cdiv\u003e (trchen is now working on a fix).\u003c/div\u003e\u003cdiv\u003e- Plan to work on testing root layer scrolling on Android this week.\u003c/div\u003e\u003cdiv\u003e Looking at failing layout tests related to fractional scroll offsets.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continued work on line layout LayoutUnit conversions. Have a patch\u003c/div\u003e\u003cdiv\u003e that sets the barrier between float and LayoutUnit at the InlineBox\u003c/div\u003e\u003cdiv\u003e level, which seems like the sensible place.\u003c/div\u003e\u003cdiv\u003e- There is still a performance regression that I haven't been able to\u003c/div\u003e\u003cdiv\u003e eliminate. Was able to get some small performance wins by looking at\u003c/div\u003e\u003cdiv\u003e profiling data, but I've hit a wall with that approach. Will discuss\u003c/div\u003e\u003cdiv\u003e next steps and come up with a plan this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- More flexbox updates.\u003c/div\u003e\u003cdiv\u003e- Trying to get answers to flexbox spec questions, was promised answers\u003c/div\u003e\u003cdiv\u003e this week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eList marker refactoring (dsinclair) [\u003ca href\u003d\"http://crbug.com/370461\"\u003ecrbug.com/370461\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Working on performance of list marker code. New version is slower\u003c/div\u003e\u003cdiv\u003e then old version. html5-full-render on ToT was ~16.5 seconds for me,\u003c/div\u003e\u003cdiv\u003e with ListMarkerPseudoElement is ~17.5 seconds.\u003c/div\u003e\u003cdiv\u003e- Discussions this week on how to proceed with ListMarkerPseudoElement.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Warden (dsinclair, pilgrim)\u003c/div\u003e\u003cdiv\u003e- Finishing work on decoratedName split, all annotations are moved\u003c/div\u003e\u003cdiv\u003e over, just finishing off rebaselines. (dsinclair)\u003c/div\u003e\u003cdiv\u003e- More renderer to layoutObject renames. (dsinclair)\u003c/div\u003e\u003cdiv\u003e- Wrapped up selection gap clipping rework. (wkorman)\u003c/div\u003e\u003cdiv\u003e- Working on slimming LayoutObject and pushing bits down to\u003c/div\u003e\u003cdiv\u003e descendants. (pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (eae)\u003c/div\u003e\u003cdiv\u003e- Added unit tests for complex text shaping (eae)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eStyle resolution (rune)\u003c/div\u003e\u003cdiv\u003e- Working on type selectors for SVG in HTML documents and picking up\u003c/div\u003e\u003cdiv\u003e componentized style resolver work again. There is some question\u003c/div\u003e\u003cdiv\u003e about whether the SVG bug is worth fixing.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRegion-based multi-column support (mstensho) [\u003ca href\u003d\"http://crbug.com/334335\"\u003ecrbug.com/334335\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Found a new crash. Maybe something changed on trunk. Will fix then\u003c/div\u003e\u003cdiv\u003e reenable multi-col.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLayout refactoring\u003c/div\u003e\u003cdiv\u003e- esprehn, ikilpatrick, cbiesinger, ojan, leviw working on coming up\u003c/div\u003e\u003cdiv\u003e with concrete proposals.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-27-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7568775537377010137"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7568775537377010137"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7568775537377010137"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-27-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8111478176780616443"},"published":{"$t":"2015-09-14T22:43:53.273Z"},"updated":{"$t":"2017-04-20T16:34:23.159Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T22:44:01.905Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, August 10, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, August 3rd):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling (skobes, szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed setPageSclaeFactor and anchor root layer scrolling. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Turned on scroll restoration tests for root layer scrolling. These\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e tests ensure that scroll positions are correctly restored on history\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e navigation. (skobes)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- A Samsung contributor has agreed to help with custom scrollbar work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Containing work cleaning up DepricatedPaintLayerScrollable\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eArea in an\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e effort to have sane scroll bounds for the root layer. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Helped szager with a flexbox scrollbar bug that triggered unspeced and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e untested behavior.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Sent intent to ship and intent two unprefix and will follow up on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e those this week. The intent to unprefix looks ready to go ahead with.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Had meeting with tabatkins about absolute position for flex items.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Flexbox bug triage.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed bug where grid containers reported the wrong preferred width.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- First patch for nested multicol is just around the corner.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Blocked on reviews for multicol improvements.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, ojan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Successfully posted several API patches after help from Levi. Converted\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e several more bits of line box and descendants to use the new line\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout API. Nothing broken. yay! (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Some weird edge cases and debugging code that relies on printing out\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout objects. Ongoing discussion. (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Follow up from text workshop in Helsinki, Behdad and Drott working on\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e optimizing the Blink/HarfBuzz integration.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed space normalization bug where cr/lf characters where incorrectly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e collapsed. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Debugging several crashers in line layout. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- drott on vacation until Friday.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-10-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8111478176780616443"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8111478176780616443"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8111478176780616443"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-august-10-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/390669831570577057"},"published":{"$t":"2015-03-02T23:03:52.475Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-03-02T23:17:29.961Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, March 2, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eWe had three new people joining the meeting this week:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Mark Pilgrim (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - Works on Blink in Chapel Hill. Much of his recent work falls under\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e code-health and Project Warden.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Nate Chapin (japhet)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - Works on Blink in Mountain View. Working on low-level blink platform\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e code cleanup and resource handling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Walter Korman (wkorman@google.com)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - New to the Blink team in SF, transfer from Glass. Getting up to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e speed on \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eBlink. Not sure which sub-team he'll end up on yet.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eUpdates since last meeting (on Monday, February 23rd):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Working ob exporting diagnostic information for performance tracking.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eScrolling (skobes) [crbug.com/417782]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e- Mostly understand the issues around fixed position.\u003c/font\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Dealing with layout tests failures and fallout.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eRename Rendering -\u0026gt; Layout (dsinclair) [crbug.com/450612]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Massive RendereBlock to LayoutBlock change landed, touched 50k+ files!\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Plan to move RenderLayer and Renderer this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eMeasure API (jchaffraix)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Addressed comments and concerns in Measure API proposal, started\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e circulating and soliciting feedback.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Working on typing information and fragments this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eLine Boxes (hartmanng, szager) [crbug.com/321237]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Back to work on layout unit conversion, working on text rendering and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e going through test failures fixing poorly written tests and getting\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e rid of float imprecision type failures.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eFlexbox (cbiesinger) [crbug.com/426898]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Working on updating flexbox implementation to match latest spec\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e revision. One of the changes involves rolling out a two year old CL\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e that removed a feature that has since been re-added to the spec.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Estimate another two weeks of work.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eIsolate core/fetch (japhet) [crbug.com/458222]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Working on isolating core/fetch from the rest of core. Currently\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e touches frame and document which it probably shouldn't.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e \u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eBlink componentization (pilgrim) [crbug.com/428284]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Moving things from core to modules; core/storage and core/timing.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eText (kojii, wjmaclean, eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Started looking into text iteration code in detail, discovered that\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e BitStack has been incorrect since day one. (wjmaclean)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Cleaning up text iteration code. (wjmaclean)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Continued work on HarfBuzz normalization performance improvements,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e CL ready but blocked on perf numbers.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Performance work for complex path with eae and Dominik. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - 5-9% gain for CJK text landed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - 3-4x gain for all languages close to land. With this we should be\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e pretty close to match the performance of the simple text path for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e vertical text.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e - Exploring a few more ideas.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Added shared shaper base class to ease the transition to the complex\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e path. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ePage scale handling (bokan) [crbug.com/459591]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Auditing window vs frame coordinates.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eAssertions/Regressions/blocking bugs\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Working through list of ClusterFuzz assertions (cbiesinger).\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Dealing with Mac core text crashers/blockers. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Help with git repository merge work. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Looking at regression relating to document life-cycle. (walterkroman)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eMisc\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Dealing with fallout from --dump-render-tree rename, heated discussion\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e following deprecation CL, will send out mail to blink-dev and\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e coordinate with eae. (paulmeyer)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- Helping philipj at Opera with syncing IDLs. (jsbell)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e \u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/march-2-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/390669831570577057"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/390669831570577057"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/390669831570577057"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"march-2-2015"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/485334041687429360"},"published":{"$t":"2015-01-08T23:32:25.274Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-01-08T23:34:28.393Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Q1 OKRs - Wednesday, January 7, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eAttendees: benjhayden, cbiesinger, dsinclair, eae, jchaffraix, nduca, szager, skobes\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e... Pleasantries, going over the list of proposed OKRs ...\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Have ten layout benchmarks with less than 1% variation between runs\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; For the benchmark OKR are you referring to to descriptive benchmarks?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Not necessarily, the goal is to have reliable benchmarks to guide our work. Short term that likely means silk-style measuring layout times.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; We do want to move to descriptive benchmarks (new type of benchmark using recipes) eventually.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Improve two benchmarks by 10%\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; How will we choose which tests to improve by 10%?\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Any of the tests really.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Will be guided by our findings when adding benchmarks and doing profiling.\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; We should make the objective more precise, what kind of benchmark?\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Make it two key_silk cases\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Support subpixel layout during animation\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; What is involved with subpixel layout during animation?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Today we snap to CSS pixels during layout, which ensures crisp rendering, but during animations this causes animations to move on full pixel boundaries which isn't ideal.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; It's all about enabling natural animations.. without that layout animations looks bad.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; ...really bad.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Do we have any idea how hard it will be?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Technically all we need to do is not pixel-snap during animations but doing that without complicating the code and introducing a separate code path for animations could be tricky.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; We don't want to add \"if (animation)\" checks everywhere.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Move line layout to LayoutUnits\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; How is the work to move line layout to LayoutUnits coming along, is finishing it in Q1 a realistic goal?\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; Should be doable, making good progress. Stefan has started helping out.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; A lot of it is figuring out rounding errors and burning down the list of issues.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Prototype and propose Measure API\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Is the Measure API OKR about Element.measure\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; It is really too early to tell. We don't know Element.measure is the right API yet, hence the need for a prototype.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; The idea is to create a prototype, possibly based on Element.measure, implement it and see if it solves the problem.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; So basically talk to Tab, spec the API and send out an \"Intent to Implement\"? It doesn't have to be faster, it just needs to be separate from layout.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; An intent to implement might be premature, we need to figure out if we can support the proposed API first and if it actually works as expected.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; We have a lot of requests for this and it is really important. Nothing is sure or has been decided but we need to do something in the space.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Julien and I talked about it earlier and think it is important to have a prototype and have someone from Docs or another client experiment with it to make sure it fits their use cases.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; This isn't for Docs or desktop apps, they already have working solutions and use native apps on android. It is more about animations between layout states.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Check with [ internal team, redacted ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; This is important for people doing transition animations from one layout to another. They have to do the new layout and measure it, doing that today requires jiggling and hacks when all they need to know is the final state. We don't have to make it faster, just needs to support doing the measurements without invalidating the universe.\u003c/div\u003e\u003cdiv\u003e[ internal discussion, redacted ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; If that is the end goal there are other ways we could approach it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Let's change the OKR to \"Create a prototype and write-up of lessons learned\"\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Finish root layer scrolling\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Is finishing root layer scrolling this quarter a realistic goal?\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Making good progress, should be able to finish this quarter.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed ClusterFuzz OKRs ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; How many clusterfizz asserts are you seeing now?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; About 4 pages, burning down, not sure if more will surface. Some are on the chrome side and out of scope but there are a good number of them.\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Actually, make that 18 pages, 10 per page...\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; The OKR might be a bit too optimistic then, just triaging that many will take quite a while.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Triage and fix 50%?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; More reasonable.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Can we do the auto triage?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Abhishek said the ClusterFuzz team would help with that.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; How about team warden specific OKRs?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have 'scrolling' and 'line layout'. Do we need more?\u003c/div\u003e\u003cdiv\u003e\u0026lt;julien\u0026gt; Ok. What other warden tasks are ongoing?\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Fullscreen and single item list selectbox (also on android) are ongoing tasks in that realm.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Should we have a code health objective that captures what you are doing Dan?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Next quarter the the boundary between layout and style needs to be better defined, we should help with that.\u003c/div\u003e\u003cdiv\u003e\u0026lt;julien\u0026gt; By defining an API?\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Code health and new features are separate concerns. We can make our lives and the life of the style team easier by being healthier, paying down technical debt. Making people faster is good investment.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Agreed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing position sticky ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Gmail, docs doesn't see it as top priority.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Mobile first matters for this, apps do not... ads, mobile apps matters.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Seems to have fizzled out from a year ago, is it still relevant? Do we have anyone asking for it?\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; We can likely punt it for bit longer but it will come up. We might have to bite the bullet and do it eventually.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; The extensible web approach (layout hooks) might be better.\u003c/div\u003e\u003cdiv\u003e[ internal discussion, redacted ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Agree that solving the larger problem would be better. Let's revisit position sticky in Q2.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Wouldn't layout hooks disable the compositor?\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; By delegating to js we would lose compositor hotness.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Already moving in that direction with delayed scrolling, other concepts. Certain features disables the compositor wins. Trade-offs.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing the proposed \"Improve two tests by 10%\" OKR ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Who would be responsible for the 10% perf wins?\u003c/div\u003e\u003cdiv\u003e\u0026lt;benjhayden\u0026gt; Would be everyone? I have some things that would imrpove performance. I think Emil can deliver some wins though the text optimization work. Text shows up prominently in profiling runs.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Is that simple vs complex text?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; not really, in the short term. Long term there are a lot of things we can do to speed up complex text and (eventually) move to one text path. In the short term there is a lot of room for improvement by simplifying things and avoiding unnecessary work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Some of Ben's work, like short-circuiting the float handling in layout, could have a big perf impact.\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; Everyone should try.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Agreed, with new the new tests it is easier to track.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;nduca\u0026gt; How about having a weekly meeting to keep on track?\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; We have one already, Mondays at 11. Re-purposed the Team Warden stand-up.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/20150107"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/485334041687429360"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/485334041687429360"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/485334041687429360"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"20150107"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1707632907174872119"},"published":{"$t":"2016-04-11T20:29:25.541Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-11T20:29:32.072Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 11, 2016"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eUpdates since last meeting (on Monday, April 4, 2016):\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eScrolling\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Focus on root layer scrolling for now. The top most element, the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e layout view, (frame view contains layout view, both are scrollable\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e areas. Frame view has special magic, plan is to have LayoutView handle\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scrolls using the standard ScrollableContainer logic. Been ongoing for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e awhile, skobes has done most of the work but has been pulled into\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e other things. (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Flexbox (cbiesinger)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Spent way too much time on scrolling and will have to spent more time\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e on scrolling. Still haven't found a good solution, trying to move\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e scroll clamping to after the layout phase.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Landed a few cleanup patches.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Focus on other flexbox issues this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Grid Layout (svillar, jfernandez, rego, javif) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/79180\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/79180\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Multi-column (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Fixed multicol assertion failures. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Improved the forced fragmentainer break implementation: Only allow\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e those at class A break points. (mstensho)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://drafts.csswg.org/css-break/#possible-breaks\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ehttps://drafts.csswg.org/css-break/#possible-breaks\u003c/a\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Houdini\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Last week got custom paint end to end working, out for review.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Working on style invalidation this week. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Next up, spec stuff for houdini. (ikilpatrick)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eAdd API for layout (leviw, pilgrim, dgrogan) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/495288\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/495288\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- As promised, spent last week working on layout view. Migrated callers\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e to use the new block layout API (LayoutViewItem). (pilgrim)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLayoutNG [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/591099\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/591099\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- mstensho getting up to speed.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eCSS Containment (leviw) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/312978\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/312978\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- No updates since last week -\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eIntersection Observer (szager, mpb) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/540528\" rel\u003d\"noreferrer\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8px\" target\u003d\"_blank\"\u003ecrbug.com/540528\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Intersection observer on by default in M51. Yay! (szager)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eText (eae, drott, kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Attended Edge Summit, interesting discussion on potential underlying\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e issue with system font cache. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Submitted Conference Abstract to 40th Unicode Conference. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Worked with dpranke@ to get hb-ot-font linkage issue out of the way,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e and landed hb-ot-font change. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Continued work on Small Caps Implementation. (drott)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Started looking into hyphenation support and sent out a outline for\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a implementation proposal. (kojii)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- Added comma and dot segmentation for shaping cache in order to fix\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e a perf regression for minimized js in devtools. (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eLogistics:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- skobes out until end of the month.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e- leviw leaving the team and Blink in a month. Will be trying to offload\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e knowledge and transfer ownership. Get your questions and code reviews\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e in while you can!\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-11-2016"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1707632907174872119"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1707632907174872119"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1707632907174872119"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-11-2016"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5181016840852113751"},"published":{"$t":"2014-12-10T18:25:12.934Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2014-12-11T19:09:11.279Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tuesday, December 9, 2014"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eAttendees: benjhayden, cbiesinger, dsinclair, dglazkov, eae, jchaffraix, nduca, szager, skobes\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eIntroductions, quick updates:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eeae: In SFO, currently working on text and line layout cleanup/performance\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eszager: In SFO, recently transferred to blink from chrome infrastructure.\u003c/font\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003edan: In WAT, working on paint invalidation and not mutating the render tree during layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ecbiesinger: In NYC, working on all sorts of things, mostly cleanup at the moment.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ejchaffraix: In MTV, working on rendering and project warden\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eskobes: In MTV, scrolling cleanup, warden\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003ebenjhayden: In MTV, recently transferred to blink to work on layout performance.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eProject Warden update from Dan:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eWarden is a project to clean up long standing issues, mostly in the layout/rendering space, including:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- widget tree hierarchy\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- asserts, clusterfuzz\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- fixing full screen to work correctly\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- avoiding render tree mutations during layout\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- move line layout to layout unit\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- unify scrolling paths\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e- type system for blink (screen vs layout coordinates)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\" /\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eProject warden is a project under the layout team and will continue as is. With the additional resources of the entire layout team we can now take on additional tasks. Performance is a key goal but we are currently suffering from reliable metrics and limitations when it comes to performance testing.\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eLegacy webkit performance tests are non-ideal in that they are sampling based and do properly account for scheduled cpu time. Modern telemetry tests account for scheduling and measures time on a low, fine grained level resulting in more reliable metrics. We should investigate converting existing tests to telemetry-style or creating new layout performance tests to guide our work. We also need to profile the layout code based on these tests and real world websites to determine performance bottlenecks and hot code paths.\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003eOverhead:\u003cbr /\u003e- Weekly stand-up meetings?\u003cbr /\u003e - Re-purpose the existing project warden meetings (Mondays at 11am PST)\u003cbr /\u003e- Bi-quarterly OKR meetings (beginning of quarter to grade last quarters OKRs and set new objectives, mid-quarter check-in).\u003cbr /\u003e- Set up team mailing list? Decided not to and use blink-dev for the time being.\u003cbr /\u003e- Set up team web site? Yes.\u003cbr /\u003e\u003cbr /\u003eOKR candidates:\u003cbr /\u003e- position sticky?\u003cbr /\u003e- measurement api\u003cbr /\u003e- better perf tets\u003cbr /\u003e- report on whats slow\u003cbr /\u003e- performance work\u003cbr /\u003e- layout hooks (from glitter)\u003cbr /\u003e- natural animations\u003cbr /\u003e- subpixel when animating\u003cbr /\u003e\u003cbr /\u003eAction items:\u003cbr /\u003e- Add all layout team members to weekly stand-up [dsinclair]\u003cbr /\u003e- Schedule OKR meeting for [eae]\u003cbr /\u003e- Come up with short list of proposed OKRs in preparation for next meeting [eae, jchaffraix]\u003cbr /\u003e- Set up web site for team [eae]\u003cbr /\u003e- Discuss performance testing strategies [benjhayden, nduca, eae]\u003cbr /\u003e- Explain team role in overall blink [deferred until after OKR meeting]\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/20141209"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5181016840852113751"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5181016840852113751"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5181016840852113751"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"20141209"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5217410374048051694"},"published":{"$t":"2015-10-07T10:54:00.856Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-10-07T10:57:20.008Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Friday, October 2, 2015 (Q3/Q4 OKRs)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eAttendees: eae, cbiesinger, jchaffraix, leviw, ojan, skobes, and\u003c/div\u003e\u003cdiv\u003eszager (with ikilpatrick, drott, and kojii giving updates offline)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Good morning everyone. I know it feels like just yesterday we\u003c/div\u003e\u003cdiv\u003eset our Q3 OKRs but the quarter has already come to an end. Let's\u003c/div\u003e\u003cdiv\u003espend the next 20 minutes going though our KRs and see how we did and\u003c/div\u003e\u003cdiv\u003ethen use the rest of the time to discuss Q4.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Update flexbox implementation to match latest version of\u003c/div\u003e\u003cdiv\u003especification\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Christian, this one falls on you. Would you mind giving an update?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; I've updated some aspects of it to match the latest\u003c/div\u003e\u003cdiv\u003especification and sent numerous \"Intent to Ship\" announcements to\u003c/div\u003e\u003cdiv\u003eblink-dev. For one of the biggest changes I added a use counter to\u003c/div\u003e\u003cdiv\u003eensure that we don't break too many websites, now waiting for it to\u003c/div\u003e\u003cdiv\u003ereach a stable release to get numbers. As for the second big change I\u003c/div\u003e\u003cdiv\u003edidn't do a very good job prioritizing and all of a sudden it was\u003c/div\u003e\u003cdiv\u003emid-October. Will carry over into Q4.\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Spent a lot of time on importing css test suites which\u003c/div\u003e\u003cdiv\u003ewasn't captured in OKRs.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Sounds like a 0.5?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Agreed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Remove page zoom\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This one falls on me, shared with the style team. We determined\u003c/div\u003e\u003cdiv\u003eto be feasible, vast majority of usage in the wild is for \"zoom: 1\",\u003c/div\u003e\u003cdiv\u003ei.e. a no-op used to trigger \"has layout\" in older version of IE. No\u003c/div\u003e\u003cdiv\u003eprogress on implementation. Wasn’t a priority for either the style nor\u003c/div\u003e\u003cdiv\u003ethe layout team. It's used extensively by layout tests so requires\u003c/div\u003e\u003cdiv\u003equite a few tests to be updated before we can remove it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score: 0.0\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Updated Unicode Bidirectional Algorithm\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;kojii\u0026gt; Had some progress on investigations, but not enough to write\u003c/div\u003e\u003cdiv\u003eup. Propose score 0.2?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Sounds reasonable.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Unprefix CSS Writing modes\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;kojii\u0026gt; All spec issues and critical code issues were resolved, design\u003c/div\u003e\u003cdiv\u003edoc and consensus to ship in blink-dev and in CSS WG done. Patches\u003c/div\u003e\u003cdiv\u003eare WIP.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Spec issues and intent to unprefix took longer than expected, not\u003c/div\u003e\u003cdiv\u003edue to any fault of ours. Let's call it 0.8.\u003c/div\u003e\u003cdiv\u003e\u0026lt;kojii\u0026gt; Good. Should ship in early Q4.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Improve font fallback\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Drott couldn't make this meeting but reported the following earlier.\u003c/div\u003e\u003cdiv\u003e\u0026lt;drott\u0026gt; Issue breaks down into better CSS font matching, better shaper\u003c/div\u003e\u003cdiv\u003eintegration, and better usage of user preference and system fallback\u003c/div\u003e\u003cdiv\u003eAPIs. Precondition, better CSS font matching done. Font fallback APIs\u003c/div\u003e\u003cdiv\u003eon all platforms surveyed, shaper integration see below. After shaper\u003c/div\u003e\u003cdiv\u003eintegration is done, we can move to making better use of preference\u003c/div\u003e\u003cdiv\u003efont, perhaps add per-script fallback fonts and make better use of\u003c/div\u003e\u003cdiv\u003esystem fallback APIs/Lists.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Was a bit more work than anticipated, making solid progress.\u003c/div\u003e\u003cdiv\u003eWill carry forward into Q4.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score: 0.5\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Spec work for houdini block \u0026amp; line custom layout\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt; ikilpatrick\u0026gt; Mainly concentrated on the other aspects of Houdini\u003c/div\u003e\u003cdiv\u003ethis quarter being custom paint and related specs. Groundwork is being\u003c/div\u003e\u003cdiv\u003edone for layout w.r.t. Isolated Workers \u0026amp; CSSOM 2.0.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ikilpatrick \u0026gt; Had some more discussions with other browser vendors\u003c/div\u003e\u003cdiv\u003ew.r.t. what this API would actually look like. Expect that more spec\u003c/div\u003e\u003cdiv\u003ework will be done for layout in Q1/2 next year.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ikilpatrick\u0026gt; 0.1?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Have all calls into block layout go through well defined API\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This one was shared between Levi and Ian K. Could you give an\u003c/div\u003e\u003cdiv\u003eupdate here Levi?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; So, we got line layout almost entirely buffered form block\u003c/div\u003e\u003cdiv\u003elayout. But we didn't get anywhere to style, editing or dom. I didn't\u003c/div\u003e\u003cdiv\u003eexpect us to get to all of that but we're still making solid progress.\u003c/div\u003e\u003cdiv\u003eHave haven't started on the other vectors.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Should we continue full steam ahead or stop and evaluate the\u003c/div\u003e\u003cdiv\u003eline layout API before continuing?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I think there is value in doing that once we've completely\u003c/div\u003e\u003cdiv\u003efinished the line layout API work, which we're close to, and have\u003c/div\u003e\u003cdiv\u003einclude guards in place. Then we should spend a few days to see how\u003c/div\u003e\u003cdiv\u003emuch we can do to clean up the API before going forward and maybe, if\u003c/div\u003e\u003cdiv\u003eit seems really difficult, we could take a step back. That's my take\u003c/div\u003e\u003cdiv\u003eon it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; This ended up being a bigger API that I was hoping for. On the\u003c/div\u003e\u003cdiv\u003eother hand there are places where we can simplify it, a lot.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; I also think line layout is the chattiest one, right?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Right, the other ones should be simpler. So, to answerer your\u003c/div\u003e\u003cdiv\u003equestion, I think we should continue full steam ahead.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Great. How does 0.7 sound for a score?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Sounds about right.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Have a clear understanding of the cost/complexity of\u003c/div\u003e\u003cdiv\u003ecustom layout.\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; We should continue. A lot of understanding the cost will be\u003c/div\u003e\u003cdiv\u003efiguring out what the API will be like. That's why we're planning to\u003c/div\u003e\u003cdiv\u003esit down with the IE Edge team to help clarify the API. The ultimate\u003c/div\u003e\u003cdiv\u003ecost and complexity of getting it into our engine is entirely\u003c/div\u003e\u003cdiv\u003edependent on what the API ends up being. So it's hard to say right\u003c/div\u003e\u003cdiv\u003enow.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Would it be fair to say that our plan is to continue our work on\u003c/div\u003e\u003cdiv\u003ea layout API boundary and have discussions with other browser vendors\u003c/div\u003e\u003cdiv\u003eto help steer and influence the custom layout APIs?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Getting agreement and knowing the scope, yes. Beyond the work\u003c/div\u003e\u003cdiv\u003ewe are doing with the API it's hard to get further ahead without broad\u003c/div\u003e\u003cdiv\u003eagreement,.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Are we doing everything we can to help this?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; The most important thing we can do is to engage other vendors.\u003c/div\u003e\u003cdiv\u003eWe could always do more but we're in a good place.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; So, it sounds like we've done all we can here even though we\u003c/div\u003e\u003cdiv\u003edon't yet have a clear understanding. 0.6?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I'd say 0.5, just because the ultimate goal was only inched\u003c/div\u003e\u003cdiv\u003etowards, though we know the path to get there it has a lot of external\u003c/div\u003e\u003cdiv\u003edependencies.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; All we can do is try and drive it as much as possible.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; 0.5 it is.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Finish root layer scrolling\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; So we landed a bunch of stuff here, the two I'm most excited\u003c/div\u003e\u003cdiv\u003eabout would be that it now works for inner and outer viewports on\u003c/div\u003e\u003cdiv\u003eAndroid. The second one being coordinates scrollbars which is pretty\u003c/div\u003e\u003cdiv\u003eawesome. So it's not done yet but made solid progress.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Still a bit worried about a tree walk for overflow scroll. We\u003c/div\u003e\u003cdiv\u003ewalk the entire deprecated paint tree underneath scrollable area for\u003c/div\u003e\u003cdiv\u003eoverflow scroll. Tried to get rid of it but it's complicated.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Would give a score of 0.7.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Sounds fair.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Remove simple text code path\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; The performance of complex path now exceeds that of simple path\u003c/div\u003e\u003cdiv\u003eand all remaining functionality blockers have been resolved. All that\u003c/div\u003e\u003cdiv\u003eis left to do is flip the switch. Sadly that will involve updating\u003c/div\u003e\u003cdiv\u003eabout 50 tests and rebaselining _all_ of our layout tests. So, we did\u003c/div\u003e\u003cdiv\u003eall of the hard work, what remains is easy but labor intensive.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score 0.4?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Improve integration between Blink and Harfbuzz\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;drott\u0026gt; Implementation done, an issue with (anyway broken) small caps\u003c/div\u003e\u003cdiv\u003eand an edge case with ZWJ and ZWNJs for Arabic and AAT font remains so\u003c/div\u003e\u003cdiv\u003efar. Needs code cleanup, and performance evaluation, but functions\u003c/div\u003e\u003cdiv\u003ewell. Then should be ready for landing in steps.\u003c/div\u003e\u003cdiv\u003e\u0026lt;drott\u0026gt; Perhaps 0.8-0.9?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's say 0.8.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Triage all incoming layout bugs within one week\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Next up, the first of our goals around bug health.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have procedures are in place to triage all incoming bugs\u003c/div\u003e\u003cdiv\u003ewithin a week. Mostly a manual process for now due to lack of better\u003c/div\u003e\u003cdiv\u003etooling but is working fine. For the latter part of the quarter we’ve\u003c/div\u003e\u003cdiv\u003emanage to adhere to the SLA and triage all bugs within five to six\u003c/div\u003e\u003cdiv\u003edays. Takes me about two hours a week which isn't too bad.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score: 1.0\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Reduce bug count by 30%\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; So, this one was definitively more ambitious....\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; How did we do? 3%?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; 2%?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We actually did a lot better than I feared. We reduced the total\u003c/div\u003e\u003cdiv\u003ebug count by 16%, just over half of our goal. We did much better for\u003c/div\u003e\u003cdiv\u003ehigh-priority bugs where the count was reduced by over 75%.\u003c/div\u003e\u003cdiv\u003e Total: From 2742 down to 2301, a reduction of 441, ~16%\u003c/div\u003e\u003cdiv\u003e Untriaged: From 860 down to 479, a reduction of 381, ~44%\u003c/div\u003e\u003cdiv\u003e P0/P1: From: 247 down to 56, a reduction of 191, ~77%\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; That's really impressive.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Reduction of over 400? Nice!\u003c/div\u003e\u003cdiv\u003e\u0026lt; jchaffraix \u0026gt; The fact that we still have over 50 P0/P1 bugs is\u003c/div\u003e\u003cdiv\u003epretty telling though, probably means we're using the priority labels\u003c/div\u003e\u003cdiv\u003ewrong.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have a bunch of larger blink team level goals around bugs in\u003c/div\u003e\u003cdiv\u003eQ4, we'll come back to that in a bit.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Does a score of 0.6 sound reasonable? We did a little over half\u003c/div\u003e\u003cdiv\u003eof as well as we set out but better for the bugs where it really\u003c/div\u003e\u003cdiv\u003ematters.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Sounds about right.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Reduce unnecessarily forced layouts\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This was overly vague and we didn't really make any progress\u003c/div\u003e\u003cdiv\u003ehere. Plan to work with dev-rel to get a couple of examples of\u003c/div\u003e\u003cdiv\u003econcrete cases where this is a problem on real world web sites and\u003c/div\u003e\u003cdiv\u003ethen make specific goals around that.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; The goals should probably be around either reducing or making\u003c/div\u003e\u003cdiv\u003ethe layouts cheaper.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; That's a very good point, if we cannot avoid it than making it\u003c/div\u003e\u003cdiv\u003echeaper/more predictable is certainly a worthy goal.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; I'd score this as a solid 0.0.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Add UMA tracking \u0026amp; monitoring for different types of layout\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This is the work than Ben started before he left the team.\u003c/div\u003e\u003cdiv\u003eDominik had signed up to take it on but he was oversubscribed last\u003c/div\u003e\u003cdiv\u003equarter and this was deemed the lowest priority. Will carry over and\u003c/div\u003e\u003cdiv\u003ecould use a new owner.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score: 0.0\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Brainstorm/plan devtools/rail score/layout integration\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have some ideas here but implementation is blocked on the\u003c/div\u003e\u003cdiv\u003eactual rail integration into dev tools. This goal was about coming up\u003c/div\u003e\u003cdiv\u003ewith ideas and thinking about what we might want to include, things\u003c/div\u003e\u003cdiv\u003elike forced layouts, layout costs etc.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score 0.4\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Trace layout on some popular websites in US, Europe,\u003c/div\u003e\u003cdiv\u003eBrazil, India\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We held a number of rather productive tracing parties in MTV,\u003c/div\u003e\u003cdiv\u003eSFO and WAT. Very useful and something we should continue doing.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Score 0.8.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Spin up effort around spatial\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; We spun up an effort. Most of the work is pretty low priority.\u003c/div\u003e\u003cdiv\u003eHave roadmap but it hasn't been staffed as it isn't considered to be\u003c/div\u003e\u003cdiv\u003esuper high priority at the moment. We don't want to starve other\u003c/div\u003e\u003cdiv\u003eefforts.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; There is a set of use cases about where things are on a page,\u003c/div\u003e\u003cdiv\u003emostly about delay loading things not on the screen. Other things on\u003c/div\u003e\u003cdiv\u003ethe list include the CSS contain property, Will sent out a list. There\u003c/div\u003e\u003cdiv\u003eare a few smaller things.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Mostly a bunch of P2 work, nothing that we HAVE to do next\u003c/div\u003e\u003cdiv\u003equarter but if we don't do any then next year we'll be in a really sad\u003c/div\u003e\u003cdiv\u003estate.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Spun up, 1.0.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Thanks everyone. Before we start talking about Q4 goals let's\u003c/div\u003e\u003cdiv\u003etake a moment to think about things we did particularly well or\u003c/div\u003e\u003cdiv\u003eparticularly bad.\u003c/div\u003e\u003cdiv\u003e* silence *\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Please, don't all speak at once.\u003c/div\u003e\u003cdiv\u003e* further silence *\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; I think that the steady progress we made on reducing the bug\u003c/div\u003e\u003cdiv\u003ecount and fixing important bugs was great.\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; I like that we keep our weekly meetings short and to the\u003c/div\u003e\u003cdiv\u003epoint. Is around 15 minutes which is about perfect.\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; It's been nice having people from other offices come up to SF\u003c/div\u003e\u003cdiv\u003eevery now and then. Would be great if we could coordinate that better.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; We have BlinkOn coming which is a great excuse for everyone to\u003c/div\u003e\u003cdiv\u003ehang out here for a few days.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Is that in SF?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Yes, it was just announced.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Christian will be in SF for the full week of BlinkOn, as will\u003c/div\u003e\u003cdiv\u003eDominik. He'll also be there the week before. Not sure about Koji yet.\u003c/div\u003e\u003cdiv\u003eAlways great to have everyone in the same room. Especially given how\u003c/div\u003e\u003cdiv\u003edistributed we are.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Discussing \"Q4 OKR Ideas \u0026amp; Suggestions\" ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's move on. It sounds like we want to continue the flexbox\u003c/div\u003e\u003cdiv\u003ework, right Christian?\u003c/div\u003e\u003cdiv\u003e\u0026lt;cbiesinger\u0026gt; Yes.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; And continue on fullscreen, bokan has recently signed up to take\u003c/div\u003e\u003cdiv\u003ethat over.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Right, he'll take it over from Dan. Dan is about to land\u003c/div\u003e\u003cdiv\u003ehis big fullscreen fix which is really exciting.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We should have an item about houdini.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I put a tentative okr in there, should get Ian in on that\u003c/div\u003e\u003cdiv\u003econversation. Will follow up.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Stefan, do you still want to drive the hyphenation work? We've\u003c/div\u003e\u003cdiv\u003ehad a couple of meetings with the Android team and it looks like we'll\u003c/div\u003e\u003cdiv\u003edo a push to add hyphenation support and better line breaking in Q1.\u003c/div\u003e\u003cdiv\u003eQ4 is too much of a push. We'll still need to do some design work and\u003c/div\u003e\u003cdiv\u003ework with the Android text team in Q4 however.\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; Sounds sane, hyphenation is the number one user request in\u003c/div\u003e\u003cdiv\u003eGermany. Q1 sounds good, I'm fine with doing the required design work\u003c/div\u003e\u003cdiv\u003ein Q4.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; How about other browsers, do they all support hyphenation?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; All other browsers support it. We had some support but ripped\u003c/div\u003e\u003cdiv\u003eit out after the fork from WebKit.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Finish root layer scrolling?\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Yup.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Do you think we could finish it in Q4 or will it carry over into Q1?\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Think so.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Another idea we've been toying with is reimplementing ruby on\u003c/div\u003e\u003cdiv\u003etop of custom layout.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Isn't that blocked on implementing custom layout?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; The idea is to use the internal API we've been working on and\u003c/div\u003e\u003cdiv\u003ethen develop it in conjunction with the API. That way we ensure the\u003c/div\u003e\u003cdiv\u003evalidity of the API.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; To be clear, this goal is not about _shipping_ a custom layout\u003c/div\u003e\u003cdiv\u003ebased ruby implementation. It's about seeing if it is feasible to use\u003c/div\u003e\u003cdiv\u003esome of the custom layout APIs to implement it internally and then, if\u003c/div\u003e\u003cdiv\u003eit is a successes, we'll see about shipping it. Would be nice if we\u003c/div\u003e\u003cdiv\u003ecould as the current ruby implementation is a bit of a mess and isn't\u003c/div\u003e\u003cdiv\u003ecomplete. If we need to reimplement it I'd rather do it in a\u003c/div\u003e\u003cdiv\u003eextensible way. Having a custom for custom layout would be nice.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Next up, remove simple text. It's all about the rebaselines.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Font fallback, continue shaper integration and pref fonts and\u003c/div\u003e\u003cdiv\u003esystem fallback improvements. Falls on Dominik and he wants to\u003c/div\u003e\u003cdiv\u003econtinue this work.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; As for bug health we've had a number of discussions in the\u003c/div\u003e\u003cdiv\u003elarger blink team and we've agreed to some common goals. What it comes\u003c/div\u003e\u003cdiv\u003edown to for us is the following:\u003c/div\u003e\u003cdiv\u003e - Continue to triage all bugs within one week\u003c/div\u003e\u003cdiv\u003e - Fix all (new) P0/P1 within one release\u003c/div\u003e\u003cdiv\u003e - Reduce untriaged bug count by 50%\u003c/div\u003e\u003cdiv\u003e - Reduce total bug backlog by 15%\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; The two last goals are ambitious but doable.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; I'll be helping with bug triage in addition to documentation.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Thanks Julien! We should also make sure to have a goal around\u003c/div\u003e\u003cdiv\u003edocumentation.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; For those that haven't been following along, I've been\u003c/div\u003e\u003cdiv\u003eadding google style class level comments documenting the design and\u003c/div\u003e\u003cdiv\u003eimplementation details for many of our core classes.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leiw\u0026gt; I have a very long bug list, if we triage by just assigning\u003c/div\u003e\u003cdiv\u003ethem I'll have an even longer list. That's not very helpful. Might\u003c/div\u003e\u003cdiv\u003emake more sense to have a bucket or label of sorts rather than\u003c/div\u003e\u003cdiv\u003eassigning more bugs?\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Does triage imply assignment?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; No\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; The way it used to work is that assigned means it's something\u003c/div\u003e\u003cdiv\u003eyou will work on in the next week or so. Used to be standard practice\u003c/div\u003e\u003cdiv\u003eon Chrome, not any more. We should move back to it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I don't mind having them assigned, for these specific bugs I'm\u003c/div\u003e\u003cdiv\u003ea good fit and the right person to work on it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; cc:ing would be fine for that, no?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Yeah, should be fine. Hard to prioritize, I work off things\u003c/div\u003e\u003cdiv\u003ethat are assigned to me.\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; I also think that, we use bug tracker for work items, bugs\u003c/div\u003e\u003cdiv\u003eand feature requests are intermingled.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Sorry to derail the discussion, we could talk about this offline.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Not at all, this is super useful. We need to understand what\u003c/div\u003e\u003cdiv\u003etriage means and come up with a way to handle the backlog.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; How about we add a set of hot-lists or labels to help with this\u003c/div\u003e\u003cdiv\u003ewithout giving an illusion of forward progress?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Would make me feel less like I'm drowning in bugs. Would be helpful.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; I have the same problem with text auto size bugs, mix of\u003c/div\u003e\u003cdiv\u003eassigned and watching label. There are too many for me to look at,\u003c/div\u003e\u003cdiv\u003eneed way to filter.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; How about you use a label for this? like \"important-text-autosizing\".\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; How about two separate triage passes, one to delegate and one\u003c/div\u003e\u003cdiv\u003eto set priority?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; As for priority we need to have a team wide definition of what\u003c/div\u003e\u003cdiv\u003eP1 vs P2 vs P3 means, today P1 is essentially for blockers, P2 for\u003c/div\u003e\u003cdiv\u003eeverything else and P3 means it'll never be looked at. Dru is driving\u003c/div\u003e\u003cdiv\u003ean effort to define the priorities.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We should continue this discussion and see what we can do to\u003c/div\u003e\u003cdiv\u003emake this work better.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Who should drive this?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; any volunteers?\u003c/div\u003e\u003cdiv\u003e* crickets *\u003c/div\u003e\u003cdiv\u003e\u0026lt; jchaffraix\u0026gt; I'm fine volunteering a little but seems to big for one person.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Might not need a formal owner.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Let's try a few things and sync back in a month.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Great, once we have something that works we can expand to\u003c/div\u003e\u003cdiv\u003elarger blink team. This is a team-wide problem but fixing it probably\u003c/div\u003e\u003cdiv\u003eneeds to start in the sub-teams. Grassroots.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's talk about RAIL and the work we'd like to do in that space.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Implement CSS containment from Ojans spatial list seems like a\u003c/div\u003e\u003cdiv\u003egood candidate. Question is how to prioritize. Do you want to give a\u003c/div\u003e\u003cdiv\u003esixty second summary Ojan?\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Sure, it's a feature where you can say contains: and a bunch of\u003c/div\u003e\u003cdiv\u003evalues. Specifies that a div fully contains all of its children. No\u003c/div\u003e\u003cdiv\u003eposition absolute can escape, no overflow outside the div. Also\u003c/div\u003e\u003cdiv\u003edoesn't auto-size. What this allows us to do is when you hit a contain\u003c/div\u003e\u003cdiv\u003ething, if it's outside the screen, you can completely ignore doing\u003c/div\u003e\u003cdiv\u003elayout on the children. Might not even need style recald and certainly\u003c/div\u003e\u003cdiv\u003eno layout.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Today you cannot do that without detailed knowledge of the\u003c/div\u003e\u003cdiv\u003echildren. It's our proposal, it's has gone through the working group\u003c/div\u003e\u003cdiv\u003eand is ready to implement. Mozilla is about to start implementing it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Skipping style recalc work is tricky but possible. Skipping\u003c/div\u003e\u003cdiv\u003elayout is easy.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; V1 would not do the majority of optimizations, would implement\u003c/div\u003e\u003cdiv\u003ethe correct behavior (no auto-size, reset list numbering, clip\u003c/div\u003e\u003cdiv\u003econtent), Super easy. Small amount of work. The only optimization\u003c/div\u003e\u003cdiv\u003ewould be the subtree layout root. Plugging in to existing system.\u003c/div\u003e\u003cdiv\u003eEasy. Get performance benefit form that. In future quarters we could\u003c/div\u003e\u003cdiv\u003eplug in more performance work. As web devs get aboard we get more\u003c/div\u003e\u003cdiv\u003evalue from doing the performance work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Useful for delayed loading, infinitive list etc. Also useful\u003c/div\u003e\u003cdiv\u003efor things like text editors where typing in a text box doesn't\u003c/div\u003e\u003cdiv\u003etrigger layout for the full page. Only the text area.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; Positioned content?\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Changes behavior. Performance wise, nothing bad will happen.\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; What if we have a lot of subree layout roots?\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Might require some fixes on our side, i.e. not having a flat\u003c/div\u003e\u003cdiv\u003estructure. Work should be guided by usage. Also, as you cannot have\u003c/div\u003e\u003cdiv\u003einlines or auto sizer for this it naturally limits the places it can\u003c/div\u003e\u003cdiv\u003ebe used.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Not a p1, new feature. Helps in short term in building\u003c/div\u003e\u003cdiv\u003elibraries. Long game.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Also not much work, would be good to get started given the long\u003c/div\u003e\u003cdiv\u003eterm goals and benefits.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; It's the one big thing I want to do from spatial in Q4.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Do you want to talk about smooth scrolling Steve?\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; This is one of chromes oldest bug, issue 575, every other\u003c/div\u003e\u003cdiv\u003ebrowser has had this for a long time.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Do we have the pieces? Can we do this?\u003c/div\u003e\u003cdiv\u003e\u0026lt;skobes\u0026gt; All pieces are in place, doable in Q4.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Let's do it!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Finally, we should have a goal around forced layouts. Will\u003c/div\u003e\u003cdiv\u003ediscuss specifics with devrel and come up with a set of concrete goals\u003c/div\u003e\u003cdiv\u003ethat we can iterate on. Paul mentioned requesting window size as one\u003c/div\u003e\u003cdiv\u003ecandidate.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[ Wrapping up ]\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Anything on this list you think we should _NOT_ be doing?\u003c/div\u003e\u003cdiv\u003e\u0026lt;szager\u0026gt; Maybe the rail work should be prioritized. Was mentioned last\u003c/div\u003e\u003cdiv\u003ebut seems like the most important.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Ordering not indicative of priority, agree that it's one of the\u003c/div\u003e\u003cdiv\u003etop priorities.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; How about the other way around, anything we should be doing that\u003c/div\u003e\u003cdiv\u003ewe haven't talked about?\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkorman\u0026gt; Flipped box writing mode that Levi and Ojan talked about?\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkorman\u0026gt; The proposal to unprefixing vertical writing mode triggered\u003c/div\u003e\u003cdiv\u003ea discussion where some of the paint folks where saddened by the\u003c/div\u003e\u003cdiv\u003ecomplexity of vertical wiring mode combined with RTL combined with\u003c/div\u003e\u003cdiv\u003eflipped blocks. Could we simplify this around a sane path. Starting\u003c/div\u003e\u003cdiv\u003ethinking about it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; RTL isn't too bad but the others are a bit of a mess, also a\u003c/div\u003e\u003cdiv\u003ecombinatorial explosion.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Can't do much about RTL due to UBA, flipped blocks and\u003c/div\u003e\u003cdiv\u003evertical writing mode shouldn't be as much overhead though.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I think for somebody that would be a fun project to re-think.\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkorman\u0026gt; Flipped blocks and vertical writing mode.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Make it not suck.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Please include me in the discussion.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkroman\u0026gt; How about document life cycle?\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; I don't think anyone has worked on that in a long time.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Mostly blocked on paint team, mostly compositor related.\u003c/div\u003e\u003cdiv\u003eSlimming paint v2.\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkorman\u0026gt; There are some comments along we can come back to this node\u003c/div\u003e\u003cdiv\u003emultiple times, surprising but ok. We should fix these things and\u003c/div\u003e\u003cdiv\u003eenforce lifecycle. Editing code in particular is really quite bad.\u003c/div\u003e\u003cdiv\u003eFixing might invoke adding another phase to the life cycle.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Not a new phase, push computing rect until end of operation.\u003c/div\u003e\u003cdiv\u003eCould potentially do less work.\u003c/div\u003e\u003cdiv\u003e\u0026lt;wkorman\u0026gt; What about your high dpi work?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Captured in the windows teams OKRs, my involvement is mostly\u003c/div\u003e\u003cdiv\u003eadvisory at this point now that we've decided on the design and\u003c/div\u003e\u003cdiv\u003eintegration. Implementation is handled by the windows team.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Thanks everyone. I'll be following up with each one of you\u003c/div\u003e\u003cdiv\u003eoffline over the next week or two.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/friday-october-2-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5217410374048051694"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5217410374048051694"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5217410374048051694"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"friday-october-2-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5780031788401098561"},"published":{"$t":"2015-05-29T00:26:27.634Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-06-01T21:34:24.997Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Thursday, May 28, 2015: Layout Moose post BlinkOn Sync Up"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ea.k.a. the project formerly known as \"the grand layout re-factoring\" and briefly as \"layout slimming\"\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAttendees: eae, leviw, esprehn, jchaffraix, ojan, cbiesinger, dsinclair\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Thanks for organzing Levi, I'd like to get a quick update, hear concerns and discuss logistics.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; I'm concerned about a lack of transparency, meeting notes not getting out and key people being excluded from meetings.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Been meaning to send out notes from BlinkOn sessions, oversight that they weren’t. Not intentioanlly exlcuding anyone.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; How do we ensure everyone’s on board?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; I’ve stayed out of the technical part of the discussion to avoid having yet another cook in the kitchen. Now I want to make sure we have a plan, circulate it, and ensure we’re moving forward.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; We need to ensure we have a concrete roster and include all steakholders.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We have that.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; We just didn’t have a chance post-BlinkON to send out the notes. We weren’t trying to be exclusive.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Dan, it sounded like maybe you wanted to be included too?\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; I’m interested because it seems like the future, but couldn’t go to the meetings because of timezones.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Sydney + Waterloo is hard.\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; Ian K will be moving here so we won’t have to keep having Sydney time zone involved.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; For future reference voice if you want to be involved. I’ll try to keep sending emails to layout-dev to tell people ahead of time when there will be meetings.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Things will be easier when discussion go from being predementantly brainstorming and turn into more of a concrete plan. Circulating an actual design will help guide the discussion.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Let me summarize our discussions and current thinking:\u003c/div\u003e\u003cdiv\u003e- There are a certain set of features we want to achieve (measure, fragments, async append).\u003c/div\u003e\u003cdiv\u003e- All these have require things that are hard to do in the current codebase\u003c/div\u003e\u003cdiv\u003e- We also want more sanity and understanding in the codebase.\u003c/div\u003e\u003cdiv\u003e- We took our brainstorm and turned it into a slightly more concrete set of proposals (v1, v2, etc.)\u003c/div\u003e\u003cdiv\u003e- Added psuedocode\u003c/div\u003e\u003cdiv\u003e- Result proves some of our ideas, but not necessarily the feasibility of the approach.\u003c/div\u003e\u003cdiv\u003e- Doc still isn’t really ready for external consumption\u003c/div\u003e\u003cdiv\u003e- Next step is to put current box layout code behind an API, then there’s the controversial step of re-implementing that api behind a flag.\u003c/div\u003e\u003cdiv\u003e- Unsure of the sense of time required here (somewhere between 3 months and 3 years).\u003c/div\u003e\u003cdiv\u003e- Important to see the API requirements ahead of time to understand.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; Implementing the various box layout algorithms is a relatively easy exercise.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; We all agree what the first step is an API. We should do that then see about next steps.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchafrraix\u0026gt; We don’t *need* that API.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; We don't but I think we want it regardless.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; Do we really want to put this in the critical path since we’re now gating everything on this?\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; It fits with our overall goals of a layered platform and it isn't necesarrily gating other work. Other than opertunity cost of work we could be doing instead.\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; This will allow us to enforce sanity.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; You don’t need to sell me on the API. My point is whether or not this should be the priority.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; That is a discussion for our OKR meetings. We don't need to resolve that here today.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; What happened in Sydney was that we had had a hackathon meeting where we started working on a Line Layout API. It’s possible that we’ll get 1/3rd the way through this and decide that it doesn't work and have to start over. We ended up with a patch that moves a handful of Line Layout accessors into the box tree into an API.\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; We should do Paint next.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; My perspective is the next step is to get someone to own the line layout api patch and get it landed.\u003c/div\u003e\u003cdiv\u003e\u0026lt;jchaffraix\u0026gt; It seems odd we’re not designing this api, but just grabbing the things we’re using.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Designing it is step 2.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; We didn’t know exactly what methods are currently in use. The next step is refactor how the API is used and make it sane.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Next thing I'd like to see is a 1-pager of our plan, shared with layout-dev, and a high level overview of what we want in terms of an evental API.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; That’s hard to plan ahead of time, we don't know what the API is going to look like it.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; This could be a living document, maybe that section is blank to start. Having a document would be super useful as would having an owner.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Someone should draft this document and share it around.\u003c/div\u003e\u003cdiv\u003e* ojan stares at levi *\u003c/div\u003e\u003cdiv\u003e* levi is volunteered *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Assuming this is something we want to work on in Q3, we should have this document ready in the next couple weeks. It would also be useful to have something like this for the “v2 rewrite the world” approach.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; On my todo list is to take the doc we have today and turn it into something an outsider can read.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; Great! Current doc unreadable unless you where in all the meetings. Would be useful to have something more concise.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Seperate tasks (from nduca); taking all our layout-related rendering leads items and drawing a chart that tells us what we need to do to implement all of them. Here’s this proposal that let’s us do them, here’s what it would take to do it incrementally and how long, etc.\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; I agree but having the API doc is the highest properity for me.\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; Boundaries would exist between layout, paint, dom, editing APIs. Woudln’t be super disruptive. Then we’d have a real list of where we’re actually interacting with the layout tree.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Sounds like someone else will own all clusterfuzz bugs -- hooray!\u003c/div\u003e\u003cdiv\u003e* everyone hooray! We haz plan! *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; As for the API document, I'd really like to see it ready for circulation in the next week or two to allow it to be circulated and reasoned about in time for setting the Q3 OKRs.\u003c/div\u003e\u003cdiv\u003e* eae looks at Levi *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; This shouldn’t block anything.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; Mark pilgrim would be a good guy to run with the layout stuff once it’s started.\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; I keep hearing people say “Should I not do this because Moose” and I say Noooooooooooo.\u003c/div\u003e\u003cdiv\u003e\u0026lt;leviw\u0026gt; Ties in with much of our, and Dans, previous work. Should not block.\u003c/div\u003e\u003cdiv\u003e\u0026lt;dsinclair\u0026gt; Do we know what all our API boundaries are?\u003c/div\u003e\u003cdiv\u003e\u0026lt;ojan\u0026gt; We know the big ones. We don’t necessarily need to know *all* of them. (line, paint, dom, editing)\u003c/div\u003e\u003cdiv\u003e\u0026lt;esprehn\u0026gt; Chris says they’re aiming for 45-46 to rip out paint stuff. Is optimistic. Hope that by December we should be able to take out tons of compositor-related stuff. Shouldn’t focus on that api surface. Editing will be so gross we’ll have plenty to do without the compositor.\u003c/div\u003e\u003cdiv\u003e* levi makes moose noise *\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u0026lt;eae\u0026gt; That’s a wrap!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/may-28-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5780031788401098561"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780031788401098561"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780031788401098561"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"may-28-2015"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6419540245255553038"},"published":{"$t":"2015-04-13T19:20:35.917Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-13T19:22:04.068Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 13, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003ePerformance Tracking (benjhayden)\u003c/div\u003e\u003cdiv\u003e- LayoutAnalyzer-based UMA histograms.\u003c/div\u003e\u003cdiv\u003e- Benchmark metric work.\u003c/div\u003e\u003cdiv\u003e- Made progress understanding bug 369123 (Absolute position and display:\u003c/div\u003e\u003cdiv\u003e inline-block are order-dependant)\u003c/div\u003e\u003cdiv\u003e- Experimenting with data-mining traces\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFirst letter refactoring (dsinclair) [\u003ca href\u003d\"http://crbug.com/391288\"\u003ecrbug.com/391288\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Fixed bug where a block and an inline both used first-letter.\u003c/div\u003e\u003cdiv\u003e- Fixed bug where changing the text content didn't updated the layout\u003c/div\u003e\u003cdiv\u003e resulting in the first-letter disappearing.\u003c/div\u003e\u003cdiv\u003e- Broke first-letter hit testing while trying to fix the same. Added a\u003c/div\u003e\u003cdiv\u003e bunch of new tests for hit testing pseudo classes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMeasure API (jchaffraix)\u003c/div\u003e\u003cdiv\u003e- Working on proposal/brainstorming document for layout refactoring.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlexbox (cbiesinger) [\u003ca href\u003d\"http://crbug.com/426898\"\u003ecrbug.com/426898\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Added check to ensure that min-size cannot be negative.\u003c/div\u003e\u003cdiv\u003e- Changes to bring min-width auto up to spec in review.\u003c/div\u003e\u003cdiv\u003e- Working on positioning of position: absolute elements.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLine Boxes (szager) [\u003ca href\u003d\"http://crbug.com/321237\"\u003ecrbug.com/321237\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Eliminating wrapper classes helped improve performance but there is\u003c/div\u003e\u003cdiv\u003e still a performance regression.\u003c/div\u003e\u003cdiv\u003e- Trying to figure out the right place to draw the line between floats\u003c/div\u003e\u003cdiv\u003e and layout units. Text metrics still uses (and will continue to use)\u003c/div\u003e\u003cdiv\u003e floats, box layout uses (and will continue to use) layout units.\u003c/div\u003e\u003cdiv\u003e Doing most text metric in floats and converting at the boundary\u003c/div\u003e\u003cdiv\u003e between the block and inline trees might make sense.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIsolate core/fetch (japhet) [\u003ca href\u003d\"http://crbug.com/458222\"\u003ecrbug.com/458222\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing work to isolate core/fetch from the rest of core.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eRenderObject cleanup (pilgrim) [\u003ca href\u003d\"http://crbug.com/436473\"\u003ecrbug.com/436473\u003c/a\u003e]\u003c/div\u003e\u003cdiv\u003e- Continuing to pull things out of RenderObject.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eText (kojii, eae)\u003c/div\u003e\u003cdiv\u003e- Started work to improve caching for complex text shaping results.\u003c/div\u003e\u003cdiv\u003e (eae)\u003c/div\u003e\u003cdiv\u003e- Running/writing tests to check where we are; in some cases complex\u003c/div\u003e\u003cdiv\u003e text is already faster than simple text. In others it is up to 5x\u003c/div\u003e\u003cdiv\u003e slower. (eae)\u003c/div\u003e\u003cdiv\u003e- Worked on CSS Writing Mode test suites with contributors. (kojii)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMisc Warden\u003c/div\u003e\u003cdiv\u003e- Cleaning up bindings, replacing custom bindings with auto-generated.\u003c/div\u003e\u003cdiv\u003e (jsbell)\u003c/div\u003e\u003cdiv\u003e- Started to plan storage type cleanup. (jsbell, pilgrim)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-13-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6419540245255553038"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6419540245255553038"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6419540245255553038"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-13-2015"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7036954823839321504"},"published":{"$t":"2015-04-22T10:46:06.645Z"},"updated":{"$t":"2017-04-20T16:34:23.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-22T10:46:15.804Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Monday, April 20, 2015"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003ePerformance Tracking (benjhayden)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Audit trace view for layout analyzer.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Split LayoutAnalyzer::\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eLayoutBlockRectangleChanged into X/Y/Width/\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e HeightChanged.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- LayoutTreeAsText as JSON.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eScrolling (skobes) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/417782\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/417782\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Crashing bugs, fixed use after free in FrameView.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Issue with the interaction between painting the viewport and view\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e scrolling.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Don't force layout for scrollTo(0, 0). (rune)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eList marker refactoring (dsinclair) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/370461\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/370461\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- List element pseudo elements, marker inside wasn't getting the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e correct side for the parent container, need to notify parent.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Found issue where if you modify the subtree you may need to reinsert\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e the elements as it needs to be in a specific place of the tree, i.e.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e inside a form element.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eFlexbox (cbiesinger) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/426898\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/426898\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Landed min-width auto, handful of regressions as expected, burning\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e down one by one.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Identified a performance regression, computeLogicalWidthUsing is\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e slow, caused a 25% slowdown for flexbox as it calls the compute\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e method more frequently. Have a fix that should be landed by now.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eLine Boxes (szager) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/321237\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/321237\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Going after perf regressions. Got a CPU profile and did some work to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e allow perf tools to run on render process only in multi process\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e chrome.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Have made progress on performance, still some regressions for floats.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eBlink componentization (pilgrim) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/428284\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/428284\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Slimming down render object (aka layout object), expect to continue\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e this week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eText (eae, rune)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Started work on implementing a word-cache for complex text shaper,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e first step is to add unit tests for existing and desired behavior.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e (eae)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Don't clear FontFaceCache if no @font-face were removed. (rune)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eStyle resolution (rune)\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- Various selector matching issues.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eRegion-based multi-column support (mstensho) [\u003c/span\u003e\u003ca href\u003d\"http://crbug.com/334335\" style\u003d\"color:rgb(17,85,204);font-family:arial,sans-serif;font-size:12.8000001907349px\" target\u003d\"_blank\"\u003ecrbug.com/334335\u003c/a\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e]\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- New multi-col implementation was reverted due to clusterfuzz issues,\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e working on identifying and fixing the potential problems. Aim to\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e re-land before the end of the week.\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003eLayout refactoring\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e- jchaffraix, esprehn, ojan working on coming up with concrete proposals\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e for changes to how we do layout based on ideas and concepts from the\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e last few weeks of discussions on the topic. Will be shared with wider\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8000001907349px\"\u003e blink team.\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-20-2015"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7036954823839321504"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7036954823839321504"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7036954823839321504"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"monday-april-20-2015"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2744741179571033645"},"published":{"$t":"2016-07-18T18:31:39.134Z"},"updated":{"$t":"2017-04-20T16:34:23.157Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-13T07:20:06.551Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Bug Triage Instructions"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n\u003cdiv\u003eThe layout team has a bug triage rotation where for a week at a time a member of the team is responsible for triaging bugs associated with parts of the code that the team is responsible for. This document outlines the policy and suggestions surrounding bug triage.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eOur SLA is to triage all incoming bugs within one week and to fix all P1 regressions within one release.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Suggested-workflow:\" /\u003eSuggested workflow:\u003c/h2\u003e\r\n\r\n\u003col\u003e\r\n \u003cli\u003e\r\n Every other day check the list of \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830509\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\"\u003eUntriaged bugs\u003c/a\u003e with the aim to reduce the number to zero.\r\n \u003cbr /\u003e\r\n For each bug, check whether the issue can be reproduced.\r\n \r\n\u003cul\u003e\r\n \u003cli\u003eIf not either mark as WontFix or add the \"Needs-Feedback\" label and ask for follow up information.\u003c/li\u003e\r\n \u003cli\u003eIf it can be reproduced, determine if it's a valid bug. Check behavior in other browsers and the relevant specifications.\u003c/li\u003e\r\n \u003cli\u003eIf it is a valid bug determine whether it is a regression or not. Set type to Bug-Regression if it is and determine \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/bisect-builds-py\"\u003ewhen it broke\u003c/a\u003e. Set relevant sub category and assign to the person that introduced the regression.\u003c/li\u003e\r\n \u003cli\u003eIf valid and not a regression determine severity. For P0 and P1 assign to owner for specific area. For P2 set status to Available.\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/li\u003e\r\n \u003cli\u003e\r\n At least once a week check the list of regressions (\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830592\u0026amp;q\u003dPri%3D0%2C1\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\" style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eP0/P1\u003c/a\u003e, \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830592\u0026amp;q\u003d-Pri%3D0%2C1\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\" style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eP2/P3\u003c/a\u003e).\u003cbr /\u003e\r\n For each P0 or P1 regression, check if it can still be reproduced.\r\n \r\n\u003cul\u003e\r\n \u003cli\u003eIf not mark as Fixed and add comment to CL that fixed it.\u003c/li\u003e\r\n \u003cli\u003eIf the issue persists ping the owner or assign one as needed.\u003c/li\u003e\r\n \u003c/ul\u003e\r\n Continue with P2 and P3 regressions as time allows. Don't spend more than\r\n ~1h/week on regression triage.\r\n \u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Relevant-Links\" /\u003eRelevant Links\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830509\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eUntriaged bugs\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830592\u0026amp;q\u003dPri%3D0%2C1\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eP0 and P1 regressions\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?can\u003d37830592\u0026amp;q\u003d-Pri%3D0%2C1\u0026amp;sort\u003d-id\u0026amp;colspec\u003dID+Pri+M+Status+Owner+Summary+Modified\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eP2 and P3 regressions\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/bisect-builds-py\"\u003eBisecting builds\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250862627189304315"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/bug-triage"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2744741179571033645"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2744741179571033645"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2744741179571033645"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"bug-triage"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"XCl7JmA6\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},"published":{"$t":"2014-12-10T18:24:34.584Z"},"updated":{"$t":"2017-04-20T16:34:23.157Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-30T00:29:47.547Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Layout Team Meeting Notes"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eMeeting notes in reverse chronological order:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-29-2016\"\u003eMonday, August 29, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-18-2016\"\u003eMonday, July 18, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-27-2016\"\u003eMonday, June 27, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-6-2016\"\u003eMonday, June 6, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-may-16-2016\"\u003eMonday, May 16, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-25-2016\"\u003eMonday, April 25, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-11-2016\"\u003eMonday, April 11, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-4-2016\"\u003eMonday, April 4, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-28-2016\"\u003eMonday, March 28, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-21-2016\"\u003eMonday, March 21, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-march-15-2016\"\u003eTuesday, March 15, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-7-2016\"\u003eMonday, March 7, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-29-2016\"\u003eMonday, February 29, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-22-2016\"\u003eMonday, February 22, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-february-16-2016\"\u003eTuesday, February 16, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-8-2016\"\u003eMonday, February 8, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-1-2016\"\u003eMonday, February 1, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-january-11-2016\"\u003eMonday, January 11, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-january-4-2016\"\u003eMonday, January 4, 2016\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-november-30-2015\"\u003eMonday, November 30, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-november-23-2015\"\u003eMonday, November 23, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-october-19-2015\"\u003eMonday, October 19, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-october-12-2015\"\u003eMonday, October 12, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-october-5-2015\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, October 5, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/friday-october-2-2015\"\u003eFriday, October 2, 2015\u003c/a\u003e (Q3/Q4 OKRs)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-september-28-2015\"\u003eMonday, September 28, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-september-14-2015\"\u003eMonday, September 14, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-31-2015\"\u003eMonday, August 31, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-24-2015\"\u003eMonday, August 24, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-17-2015\"\u003eMonday, August 17, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-10-2015\"\u003eMonday, August 10, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-august-3-2015\"\u003eMonday, August 3, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-20-2015\"\u003eMonday, July 20, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-july-13-2015\"\u003eMonday, July 13, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-22-2015\"\u003eMonday, June 22, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-june-16-2015\"\u003eTuesday, June 16, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-8-2015\"\u003eMonday, June 8, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/thursday-june-4-2015\"\u003eThursday, June 4, 2015\u003c/a\u003e (Q2 OKR mid-quarter check-in)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-june-1-2015\"\u003eMonday, June 1, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/may-28-2015\"\u003eThursday, May 28, 2015\u003c/a\u003e (Layout Moose post BlinkOn Sync Up)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/tuesday-may-26-2015\"\u003eTuesday, May 26, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-may-4-2015\"\u003eMonday, May 4, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-27-2015\"\u003eMonday, April 27, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-20-2015\"\u003eMonday, April 20, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-13-2015\"\u003eMonday, April 13, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-april-6-2015\"\u003eMonday, April 6, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/thursday-april-2-2015\"\u003eThursday, April 2, 2015\u003c/a\u003e (Q1/Q2 OKRs)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-30-2015\"\u003eMonday, March 30, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-23-2015\"\u003eMonday, March 23, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-9-2015\"\u003eMonday, March 9, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-16-2015\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, March 16, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-march-9-2015\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, March 9, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/march-2-2015\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, March 2, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-23-2015\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, February 23, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/wednesday-february-18\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eWednesday, February 18, 2015\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e (Q1 OKR mid-quarter check-in)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-9\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, February 9, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/monday-february-2\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMonday, February 2, 2015\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/20150107\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eWednesday, January 7, 2015\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e (Q1 OKRs)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes/20141209\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eTuesday, December 9, 2014\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250862627189304315"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/meeting-notes"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9083668330931739427"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9083668330931739427"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"meeting-notes"},"sites$revision":{"$t":"65"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9146647775906495762"},"published":{"$t":"2015-04-02T22:42:14.342Z"},"updated":{"$t":"2017-04-20T16:34:23.157Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-14T23:08:29.155Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Eliminating Simple Text"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin:0;padding:0;max-width:100ex;text-align:justify\"\u003e\r\n\u003cdiv style\u003d\"text-align:center\"\u003e\r\n\u003ca href\u003d\"mailto:eae@chromium.org\"\u003eeae\u003c/a\u003e, \u003ca href\u003d\"mailto:drott@chromium.org\"\u003edrott\u003c/a\u003e, \u003ca href\u003d\"mailto:behdad@chromium.org\"\u003ebehdad\u003c/a\u003e, \u003ca href\u003d\"mailto:kojii@chromium.org\"\u003ekojii\u003c/a\u003e\u003cbr /\u003e\r\nApril 2, 2015\r\n\u003c/div\u003e\r\n\r\n\u003cp\u003eBlink currently has two separate text paths, the simple path and the complex path. The simple path is an optimization and is used for a handful of scripts, most notably latin-1, when no advanced typesetting features are used.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Complex-Text-Performance\" /\u003eComplex Text Performance\u003c/h2\u003e\r\n\u003cp\u003e\r\nWe'd like to eliminate the simple text path and have all text use the current complex text path. Doing so would allow us to support kerning and ligatures everywhere, have similar performance regardless of script and, more importantly, greatly reduce code complexity and reduce bugs resulting from differences in the two code paths.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003eIn order to do that though we must first improve the performance of the complex path to match, or exceed, the performance of the simple path. Early measurements here or here suggests that hb_shape() itself is not anything nearly the bottleneck at all, and a lot of churn happens in HarfBuzzShaper, which can and should be streamlined.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Ideas-for-improving-complex-text-performance:\" /\u003eIdeas for improving complex text performance:\u003c/h3\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eReplace current (broken) run cache with a word cache (see below for more ideas on how to cache width info), ala Firefox.\u003c/li\u003e\r\n\u003cli\u003eNormalize text directly on harfbuzz buffer, avoiding extra copy of string.\u003c/li\u003e\r\n\u003cli\u003eAdd support for latin-1 text to shaper, avoiding upconverting latin-1 text to utf-16.\u003c/li\u003e\r\n\u003cli\u003eRemove overhead of deciding which code path to use.\u003c/li\u003e\r\n\u003cli\u003eDo not repeatedly setFontFeatures on each shaper construction\u003c/li\u003e\r\n\u003cli\u003eDo not create list of HarfBuzzRun’s, etc, just to free them after iterating over them once. Copy to output buffer directly from hb_buffer().\u003c/li\u003e\r\n\u003cli\u003eSwitch to HarfBuzz-based itemization; this, if done properly, will result in improved performance; but is mainly a correctness feature.\u003c/li\u003e\r\n\u003cli\u003eKeep information about HarfBuzzRun segmentation in a parallel data structure, see below.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Keeping-Word-Length-Measurements-Thoughts-on-Caching\" /\u003eKeeping Word Length Measurements / Thoughts on Caching\u003c/h3\u003e\r\n\u003cp\u003eWord length measurements are a function of a styled font instance, language information, script information, and a string of text and it’s surrounding text or context.\r\n\u003c/p\u003e\r\n\r\n\u003cpre\u003elength \u003d f(font, language, script, text, context)\u003c/pre\u003e\r\n\r\n\u003cp\u003eInstead of continuously calling constructTextRun and textWidth during layout, then doing this all over again for selections, dirty rectangles and so on, we can perhaps keep a separate text tree that contains the information required for length measurements and the strings. Then RenderObjects would just reference portions of this text tree, and can directly derive width information.\r\n\u003c/p\u003e\r\n\u003cp\u003e\r\nInstead of a “singleton word cache” somewhere with only an eviction heuristic or a fixed size, we could have stricter lifecycle control over the objects in such a tree - they would stay in sync with the RenderObjects that reference them. When more text containing nodes are added to the DOM, new objects in the text tree are created. When DOM Nodes are deleted, we no longer need portions of the text tree.\r\n\u003c/p\u003e\r\n\u003cp\u003e\r\nNote that the size of a word is not always easy to define for languages that do not necessarily use an explicit word separator such as a space character.\r\n\u003c/p\u003e\r\n\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-HarfBuzzRun-Segmentation\" /\u003eHarfBuzzRun Segmentation\u003c/h3\u003e\r\n\u003cp\u003e\r\nThe parallel data structure as outlined above, should also keep information about shaping run segmentation, and - if needed - recompute that on a finer granularity, if text changes.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Optimize-hb_shape-\" /\u003eOptimize hb_shape()\u003c/h3\u003e\r\n\u003cp\u003eHarfBuzz’s OpenType processing is much faster than alternatives we have measured. Still, the kerning feature in Roboto takes half of the shaping time. That’s way too excessive. In general, comparing hb-shape’s performance with --shaper\u003dot against --shaper\u003dfallback shows how far off we are from a barebone fastpath. Currently this number stands at about 10x, depending on what font and what font_funcs implementation. More measurement and optimizations here are possible.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Benchmarks\" /\u003eBenchmarks\u003c/h3\u003e\r\n\u003cp\u003eWe should restructure our telemetry benchmarks specifically for text measurement performance, perhaps have a separate group of tests besides blink_perf.Layout.\u003c/p\u003e\r\n\u003cp\u003eIn addition to that, we need to develop new test cases, to better cover real world text-performance heavy use cases.\u003c/p\u003e\r\n\r\n\u003cp\u003eOut of that effort we could develop a publicly available text layout benchmark, to compare Blink performance against other engines. The Sunspider, Kraken of text layout.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Unit-Testing\" /\u003eUnit Testing\u003c/h3\u003e\r\n\r\n\u003cp\u003eWe should create a native test harness for the Font.cpp and HarfBuzzShaper.cpp logic.\u003c/p\u003e\r\n\u003cp\u003eIn order to improve our shaping correctness and perhaps do performance tests on a level that cuts out blink layout etc. we should try to create a test harness for Font.cpp where we can instantiate fonts by name, size and font features. Then we can test for how runs are formed, shaping results, etc.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Eliminating-Simple-Text\" /\u003eEliminating Simple Text\u003c/h2\u003e\r\n\u003cp\u003e\r\nOnce the complex text path is as fast (or nearly as fast) as the current simple text path we should force all text down the complex text path and (eventually) eliminate the simple text path entirely. This will give us an extra performance win as it allows all text path branching to be removed, including costly string scans. It would also allow us to enable typesetting features, such as kerning and ligatures, for all text. More importantly though it would allow us to have a single unified text layout path which in turn would reduce complexity and maintenance costs as well as as ensure consistent performance regardless of script.\u003c/p\u003e\r\n\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250862627189304315"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/teams/layout-team/eliminating-simple-text"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9146647775906495762"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9146647775906495762"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9146647775906495762"}],"author":[{"email":{"$t":"eae@chromium.org"}}],"sites$pageName":{"$t":"eliminating-simple-text"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7832983298878609177"},"published":{"$t":"2017-04-18T02:13:14.155Z"},"updated":{"$t":"2017-04-18T02:13:14.189Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-18T02:13:14.155Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"PPS Tiny - 0x0 after.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7832983298878609177"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/PPS%20Tiny%20-%200x0%20after.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7832983298878609177"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7832983298878609177"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7832983298878609177"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7832983298878609177"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6731636159775737041"},"published":{"$t":"2017-04-18T02:12:59.753Z"},"updated":{"$t":"2017-04-18T02:12:59.787Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-18T02:12:59.753Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"PPS Tiny - 0x0 before.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6731636159775737041"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/PPS%20Tiny%20-%200x0%20before.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6731636159775737041"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6731636159775737041"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6731636159775737041"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6731636159775737041"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7959122663247929694"},"published":{"$t":"2017-04-18T02:06:11.572Z"},"updated":{"$t":"2017-04-18T02:06:11.605Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-18T02:06:11.572Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Daily Actives - Update Apr 15.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7959122663247929694"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20Apr%2015.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7959122663247929694"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7959122663247929694"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7959122663247929694"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7959122663247929694"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5603901028034691433"},"published":{"$t":"2017-04-18T02:00:03.413Z"},"updated":{"$t":"2017-04-18T02:00:03.448Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-18T02:00:03.413Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Volume - Update Apr 15.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5603901028034691433"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20Apr%2015.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5603901028034691433"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5603901028034691433"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5603901028034691433"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5603901028034691433"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6901627616944374440"},"published":{"$t":"2017-04-17T18:31:04.711Z"},"updated":{"$t":"2017-04-17T23:13:44.153Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-04-17T23:13:42.331Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Pre-requirements of issue creation"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBefore filing an issue, please confirm you’ve completed actions below:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYour moblab is using recommended equipments. ( https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/overview-of-moblab?pli\u003d1 )\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUpdate Moblab to latest version and powerwashed.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDUTs are loaded with test images.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMoblab and DUTs are in dev mode (able to enter VT2 by Ctrl-Alt-F2).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e(Optional if Servo board is involved in test) \u003c/span\u003e\u003cspan style\u003d\"font-size:12pt;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003eDUT can reboot after \"dut-control warm_reset:on\".\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cfont size\u003d\"3\"\u003ePlease have all screenshots ready and rename to descriptions in bold.\u003c/font\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eScreenshot of \u003cb\u003eMoblab admin\u003c/b\u003e ( [YOUR_MOBLAB_IP]/moblab_setup/#tab_id\u003dconfig_Wizard )\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003eScreenshot of \u003cb\u003eHost List\u003c/b\u003e (if DUT state is concerned. \u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e[YOUR_MOBLAB_IP]/\u003c/span\u003emoblab_setup/#tab_id\u003ddut_manage)\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:12pt;font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003eScreenshot of \u003c/span\u003e\u003cb style\u003d\"color:rgb(0,0,0)\"\u003eMobMonitor \u003c/b\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003eDownload Moblab logs via Mob*Monitor page by clicking \"Collect Log\"\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"3\"\u003eNow you're ready to file issue. \u003c/font\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:12pt;font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6163425214481340131"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/pre-requirements-of-issue-creation"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6901627616944374440"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6901627616944374440"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6901627616944374440"}],"author":[{"name":{"$t":"Rick Lin"},"email":{"$t":"chlin@chromium.org"}}],"sites$pageName":{"$t":"pre-requirements-of-issue-creation"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},"published":{"$t":"2008-08-30T20:41:39.525Z"},"updated":{"$t":"2017-03-31T21:24:44.794Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-31T21:24:42.504Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"UI Mirroring Infrastructure"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Objective\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eObjective\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Windows-UI-mirroring-architecture\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eWindows UI mirroring architecture\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-An-example\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eAn example\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-does-Windows-do-it-\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eHow does Windows do it?\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-ChromeViews-mirroring-infrastructure\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eChromeViews mirroring infrastructure\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-ChromeViews::View-mirroring-support\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eChromeViews::View mirroring support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Chromium-support-for-native-mirroring\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eChromium support for native mirroring\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-to-write-RTL-ready-Chromium-UI\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eHow to write RTL-ready Chromium UI\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-to-test-a-mirrored-Chromium-UI-element\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eHow to test a mirrored Chromium UI element\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Objective\" /\u003e\r\n \r\n Objective\r\n\u003c/h2\u003e\u003cp\u003eOne of the goals for the launch of Chromium is to support 40 UI languages; that is, the UI needs to be localized for each language such that any UI text element (menus, titles, labels, etc.) is displayed in the target language. In order to make sure that Chromium can be easily localized to different languages (an effort known as \u003ci\u003elocalizability\u003c/i\u003e), the Chromium source code is structured such that localizable strings are stored in locale-specific DLLs. This way, the actual UI strings are loaded from the right DLL, depending on the target locale. There is one more localizability aspect which applies only to right-to-left (RTL) languages, such as Hebrew and Arabic. In such languages, translating the strings to the target language is not enough. In order to provide a perfect right-to-left look and feel to the browser, the entire UI needs to be mirrored.\u003c/p\u003e\r\n\u003cp\u003eThis document starts by providing a brief overview of the UI mirroring technology in general and in particular the Windows support for UI mirroring. Then, the newly added ChromeViews mirroring infrastructure is described. Using this new infrastructure, the Chromium UI elements can be easily mirrored for RTL locales. Finally, and most importantly, the document provides a set of guidelines for writing Chromium UI elements that don't break when mirrored in RTL UIs.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Windows-UI-mirroring-architecture\" /\u003eWindows UI mirroring architecture \u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-An-example\" /\u003eAn example \u003c/h3\u003e\r\n\u003cp\u003eThe Windows operating system itself has been localized for a large set of languages, including right-to-left languages like Hebrew. Thus, users of the Hebrew version of Windows are presented with a mirrored version of the English OS UI. Before we examine the mirroring Windows API available to application developers, it will be helpful to compare the mirrored and the non-mirrored versions of a fundamental Windows UI component - Windows Explorer. Looking at the manner in which the Windows OS mirrors its core UI elements will shed some light on the ChromeViews Mirroring Infrastructure design. The following diagram shows the English version of Windows Explorer we are all familiar with:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197834541/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eThe first thing to note about the English version is that left alignment is used for all the text elements. Also, there are two groups of highlighted UI elements (the red group and the black group) that behave differently when displayed in a mirrored UI. The elements in both groups contain an image (a bitmap or an icon). All the elements in the red group (elements 1, 2 and 3) contain direction sensitive images; that is, the images in these elements must be flipped horizontally when displayed in mirrored UIs. Not flipping direction sensitive graphics can cause various UI problems. For example, not flipping the resize bitmap (item 3) will cause the UI to appear incorrectly - a Southeast-oriented resize bar will appear in the Southwest corner of the window. Not flipping the back button (item 1) will result in a confusing user experience - the button will say 'Back' but the arrow will point to a direction indicating going 'Forward'. All the elements in the black group (elements A, B and C) do not contain direction sensitive images. Thus, the images in these elements must look the same in mirrored and non-mirrored UIs. Generally, legal trademarks, logos, favicons, etc. are not direction sensitive and flipping them horizontally in mirrored UIs does not make sense. Following is the Hebrew (and therefore mirrored) version of Windows Explorer:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197834922/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eThe first thing to note about the Hebrew version is that right alignment is used for all the text elements (English and Hebrew). Also, all the UI text (menus, buttons, status bar info, etc.) is translated to Hebrew. All the UI elements and sub-elements are mirrored recursively. For example, the position of the folder tree view is mirrored (it is on the right-hand side of the window and not the left-hand side). The elements in the tree view (the plus signs, the directory icons, etc.) also appear in their mirrored position within the tree view. Note how even though the position of all the highlighted elements is mirrored, the elements in the black group look exactly the same as they did in the English version while the elements in the red group are flipped horizontally.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-How-does-Windows-do-it-\" /\u003eHow does Windows do it? \u003c/h3\u003e\r\n\u003cp\u003eThe Windows API provides a set of useful techniques for dealing with RTL UI localization. The goal of the Windows UI mirroring API is to allow GUI developers to write UI code without having to worry about mirroring the UI for right-to-left locales. The UI is created using well known Windows GUI constructs (HWNDs, Device Contexts, Dialog Boxes, etc.) and then an RTL layout property can be applied to individual elements in order to mirror their UI. For example, the property WS_EX_LAYOUTRTL can be applied to an HWND in order to mirror the UI of the underlying window. When an RTL layout is applied to a GUI element, the element's coordinate system is transformed in the following manner:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197836357/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eWhen using an RTL layout, the right-most horizontal coordinate value is 0 (instead of the leftmost) and the coordinate values increase (instead of decrease) when moving from right to left on the X axis. Using this transformation, a UI element the application positions in the top left corner will be positioned on the top right corner when the UI is mirrored. The concept of coordinate transformation is extremely powerful since it doesn't require the GUI application's logic to change in order to support mirroring. In reality, however, more often than not mirroring a GUI application involves much more than just setting a few flags. There are a few bad programming practices that cause the GUI application to appear incorrectly when mirrored. For the most part these have to do with incorrect conversions between screen and window coordinates. To learn more about the Windows mirroring API and about how to avoid programming techniques that don't work well in mirrored UIs, see the following \u003ca href\u003d\"http://msdn2.microsoft.com/en-us/goglobal/bb688119.aspx\" rel\u003d\"nofollow\"\u003eMSDN article\u003c/a\u003e.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-ChromeViews-mirroring-infrastructure\" /\u003eChromeViews mirroring infrastructure \u003c/h2\u003e\r\n\u003cp\u003eChromium has a portable, object oriented UI framework (aka \u003ci\u003eChromeViews\u003c/i\u003e) that allows developers to write Chromium UI elements. In order to allow the Chromium UI to be mirrored easily, a mirroring infrastructure needed to be added to the \u003ci\u003eChromeViews\u003c/i\u003e framework. The inherent Windows support could not be used by itself to mirror the Chromium UI for a few different reasons:\u003c/p\u003e\r\n\u003cul\u003e\r\n\t\r\n\u003cli\u003eIn order to render the Chromium UI elements inside a Windows HWND (such as the window created by XPFrame), the entire Chromium UI is rendered into a DIB and then the DIB is being \u003ci\u003eBitBlt\u003c/i\u003eed into the underlying HWND's device context (or HDC). Setting the WS_EX_LAYOUTRTL property of the top level Chromium HWND means that any text drawn into the DIB (using Windows' DrawText API) will need to be drawn such that each and every glyph is mirrored (so that flipping the DIB into the mirrored HDC will display the correct text). The problem with this method is that it will break ClearType because ClearType text rendering is direction dependant (which subpixels the ClearType algorithm sets depends on where the subpixels are relative to the drawn glyphs); in other words, flipping a bitmap containing ClearType is guaranteed to break the cripsness of the text.\r\n\t\u003c/li\u003e\r\n\u003cbr /\u003e\r\n\t\r\n\u003cli\u003e\u003ci\u003eChromeViews\u003c/i\u003e is a portable framework and therefore it does not make much sense to use a platform-specific solution for mirroring in code that needs to remain portable.\u003c/li\u003e\r\n\t\u003cbr /\u003e\r\n\t\r\n\u003cli\u003eThe Windows mirroring applies to the HWND hierarchy of windows and controls. \u003ci\u003eChromeViews\u003c/i\u003e has its own concept of UI elements hierarchy and it is not possible to use the Windows API for mirroring and still have the flexibility of controlling mirroring in a \u003ci\u003eView\u003c/i\u003e subclass granularity; in other words, not every \u003ci\u003eView\u003c/i\u003e subclass is associated with a Windows HWND handle and it is therefore not possible to control the setting of each and every Chromium UI element by only using HWND mirroring. As we'll see later on, the Chromium mirroring infrastructure does use Windows native mirroring for the Chromium native UI controls.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-ChromeViews::View-mirroring-support\" /\u003eChromeViews::View mirroring support \u003c/h3\u003e\r\n\u003cp\u003eThe Chromium mirroring infrastructure and API resides mostly in the \u003ci\u003eChromeViews::View\u003c/i\u003e class since it is the base class for the majority of the Chromium browser UI elements. Before describing the interface, it is important to note that whenever we refer to the concept of 'locale' or 'current locale' we refer to the Chromium UI language. The locale concept entails more than just the UI language, but for the purpose of explaining the mirroring infrastructure, it is OK to ignore the other locale aspects or the logic Chromium uses in order to set the default locale.\u003c/p\u003e\r\n\u003cp\u003eJust like the Windows mirroring API, the corresponding Chromium API is designed in a way that frees individual GUI developers from the burden of programmatically mirroring UI elements and sub elements. However, the API has certain limitations and in some cases more mirroring-related code needs to be written for specific Chromium UI elements. Chromium \u003ci\u003eView\u003c/i\u003e subclasses that follow a certain set of conventions (described in \u003cb\u003eHow to write RTL-ready Chromium UI\u003c/b\u003e, below), are going to work well in mirrored UIs and won't need to have additional code for handling right-to-left layout issues. For a complete documentation of the mirroring API, refer to the comments in \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eview.h\u003c/span\u003e. Here is a brief description of the new mirroring functions:\u003c/p\u003e\r\n\u003cul\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eGetBounds(), GetX()\u003c/b\u003e overloaded versions were added that take a parameter indicating whether to apply the mirroring coordinate transformation to the X coordinate of the \u003ci\u003eView\u003c/i\u003e. Most \u003ci\u003eView\u003c/i\u003e subclasses don't need to use these new methods and should continue using the version of these two functions that don't take the new transformation parameter.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eUILayoutIsRightToLeft()\u003c/b\u003e determines whether the layout for the \u003ci\u003eView\u003c/i\u003e is right-to-left. The \u003ci\u003eView\u003c/i\u003e's layout is RTL if the locale's language is a right-to-left language AND the RTL layout is not disabled for the \u003ci\u003eView\u003c/i\u003e.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eFlipCanvasOnPaintForRTLUI()\u003c/b\u003e determines whether the \u003ci\u003eChromeCanvas\u003c/i\u003e used by the \u003ci\u003eView\u003c/i\u003e to draw graphics (when the \u003ci\u003eView::Paint()\u003c/i\u003e is invoked) should be transformed such that bitmaps are automatically flipped horizontally. This function returns true if the UI layout for the \u003ci\u003eView\u003c/i\u003e is RTL AND if canvas flipping has been enabled for the \u003ci\u003eView\u003c/i\u003e using\u003ci\u003eEnableCanvasFlippingForRTLUI\u003c/i\u003e (see later).\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eEnableUIMirroringForRTLLanguages()\u003c/b\u003e allows RTL UI layout to be enabled/disabled for the \u003ci\u003eView\u003c/i\u003e. This is useful if a specific \u003ci\u003eView\u003c/i\u003e subclass instance needs to use an LTR layout regardless of the locale.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eEnableCanvasFlippingForRTLUI()\u003c/b\u003e allows RTL canvas flipping to be enabled/disabled for the \u003ci\u003eView\u003c/i\u003e. Using this method, it is easy to control whether or not the graphics drawn by the \u003ci\u003eView\u003c/i\u003e is going to be flipped horizontally when the locale is RTL. Generally, canvas flipping is enabled for \u003ci\u003eViews\u003c/i\u003e representing direction sensitive UI elements and it is disabled for direction insensitive\u003ci\u003eViews\u003c/i\u003e.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eMirroredX()\u003c/b\u003e returns the mirrored X coordinate for the \u003ci\u003eView\u003c/i\u003e. There is generally no need for subclasses to use this method.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eMirroredLeftPointForRect()\u003c/b\u003e returns the mirrored X coordinate of a given region relative to the \u003ci\u003eView\u003c/i\u003e's bounds. This method is used only when the \u003ci\u003eView\u003c/i\u003e is drawing different UI elements on the canvas and thus needs to 'manually' mirror the position of each such element if the UI layout is RTL.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eMirroredXCoordinateInsideView()\u003c/b\u003e allows mirroring a given X coordinate inside the \u003ci\u003eView\u003c/i\u003e bounds. Generally, this functionality is needed only for handling drag/drop operations, to make sure that the drop position is aligned with the display position of the \u003ci\u003eViews\u003c/i\u003e in question.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eGetViewForPoint(), ConvertPointForView(), etc.\u003c/b\u003e the various point-to-view methods have been modified to use the mirrored position of the \u003ci\u003eView\u003c/i\u003e so that things like mouse events use the mirrored point of the \u003ci\u003eView\u003c/i\u003e inside the parent.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cp\u003e\u003cb\u003eNOTE: unlike Windows, the mirroring infrastructure in Chromium does not rely on coordinate transformations. Regardless of the locale, mouse events are always relative to the top left corner of the View.\u003c/b\u003e\u003c/p\u003e\r\n\u003cp\u003eThe best way to demonstrate how the API works is to look at a hypothetical \u003ci\u003eView\u003c/i\u003e subclass named Foo that contains three child \u003ci\u003eView\u003c/i\u003es. Here is the code snippet from the header file:\u003c/p\u003e\r\n\u003cpre style\u003d\"color:rgb(0,96,0);white-space:pre-wrap\"\u003eclass BitmapView : public ChromeViews::View {\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e\u003cbr /\u003e public:\u003cbr /\u003e BitmapView() {\u003cbr /\u003e // By default, we want to flip the canvas so that the bitmap is flipped\u003cbr /\u003e // when the UI layout is right-to-left.\u003cbr /\u003e EnableCanvasFlippingForRTLUI(true);\u003cbr /\u003e }\u003cbr /\u003e\u003cbr /\u003e virtual void Paint(ChromeCanvas* canvas) {\u003cbr /\u003e canvas-\u0026gt;DrawBitmapInt(bitmap_, 0, 0);\u003cbr /\u003e }\u003cbr /\u003e\u003cbr /\u003e private:\u003cbr /\u003e\u003cbr /\u003e // The bitmap we draw on the canvas.\u003cbr /\u003e SkBitmap bitmap_;\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e}\u003cbr /\u003e\u003cbr /\u003eclass Foo : public ChromeViews::View {\u003cbr /\u003e\u003cbr /\u003e public:\u003cbr /\u003e\u003cbr /\u003e // Layout the three child bitmap Views diagonally from top left to bottom\u003cbr /\u003e // right.\u003cbr /\u003e virtual void Layout() {\u003cbr /\u003e ...\u003cbr /\u003e }\u003cbr /\u003e\u003cbr /\u003e private:\u003cbr /\u003e\u003cbr /\u003e BitmapView* bitmap_one_;\u003cbr /\u003e BitmapView* bitmap_two_;\u003cbr /\u003e BitmapView* bitmap_three_;\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e\u003cbr /\u003e}\u003cbr /\u003e\r\n\u003c/pre\u003e\r\n\u003cp\u003eThe \u003ci\u003eFoo\u003c/i\u003e class contains three child \u003ci\u003eView\u003c/i\u003es that are laid out diagonally from top left to bottom right. Each child is an instance of the \u003ci\u003eBitmapView\u003c/i\u003e subclass which represents a single bitmap. The following diagram visualizes the impact of different API calls on the manner in which \u003ci\u003eFoo\u003c/i\u003e is rendered. Note that in the example, children one, two, and three contain a bitmap with the corresponding number.\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197835664/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eIt is important to emphasize that even though the mirroring API contains quite a few elements, \u003ci\u003eView\u003c/i\u003e subclasses don't need to explicitly use the API in the majority of the cases. As an example, consider \u003ci\u003eBrowserToolbarView\u003c/i\u003e, which is a \u003ci\u003eView\u003c/i\u003e subclass with several child \u003ci\u003eViews\u003c/i\u003e. Here is a snippet from \u003cspan style\u003d\"font-family:courier new,monospace\"\u003etoolbar_view.h\u003c/span\u003e with the definition of the different Toolbar controls:\u003c/p\u003e\r\n\u003cpre style\u003d\"color:rgb(0,96,0);white-space:pre-wrap\"\u003eclass BrowserToolbarView : public ChromeViews::View,\u003cbr /\u003e public Menu::BaseControllerDelegate,\u003cbr /\u003e public ChromeViews::ViewMenuDelegate,\u003cbr /\u003e public ChromeViews::DragController,\u003cbr /\u003e public LocationBarView::Delegate {\u003cbr /\u003e ...\u003cbr /\u003e\u003cbr /\u003e // Controls\u003cbr /\u003e ChromeViews::Button* back_;\u003cbr /\u003e ChromeViews::Button* forward_;\u003cbr /\u003e ChromeViews::Button* reload_;\u003cbr /\u003e ChromeViews::ToggleButton* star_;\u003cbr /\u003e LocationBarView* location_bar_;\u003cbr /\u003e GoButton* go_;\u003cbr /\u003e ChromeViews::MenuButton* page_menu_;\u003cbr /\u003e ChromeViews::MenuButton* app_menu_;\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e}\u003cbr /\u003e\r\n\u003c/pre\u003e\r\n\u003cp\u003eAll the toolbar's UI sub elements are child \u003ci\u003eView\u003c/i\u003es and the toolbar class does not render any UI elements itself. Instead, it delegates painting to its sub elements (we'll explain later why this is the preferred way to structure a \u003ci\u003eView\u003c/i\u003e subclass). Here is a snippet from the code in \u003ci\u003eBrowserToolbarView::Layout()\u003c/i\u003e:\u003c/p\u003e\r\n\u003cpre style\u003d\"color:rgb(0,96,0);white-space:pre-wrap\"\u003evoid BrowserToolbarView::Layout() {\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e\u003cbr /\u003e back_-\u0026gt;GetPreferredSize(\u0026amp;sz);\u003cbr /\u003e back_-\u0026gt;SetBounds(kControlIndent,\u003cbr /\u003e kControlVertOffset,\u003cbr /\u003e sz.cx,\u003cbr /\u003e sz.cy);\u003cbr /\u003e\u003cbr /\u003e forward_-\u0026gt;GetPreferredSize(\u0026amp;sz);\u003cbr /\u003e forward_-\u0026gt;SetBounds(back_-\u0026gt;GetX() + back_-\u0026gt;GetWidth(),\u003cbr /\u003e kControlVertOffset,\u003cbr /\u003e sz.cx,\u003cbr /\u003e sz.cy);\u003cbr /\u003e\u003cbr /\u003e ...\u003cbr /\u003e\u003cbr /\u003e}\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cp\u003eThe toolbar lays out its child elements using the normal \u003ci\u003eView\u003c/i\u003e positioning API (GetX(), GetBounds(), etc.) and does not have to special case the layout for RTL locales. Finally, here is what the toolbar looks like in RTL and LTR locales:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197834369/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eThe toolbar's code didn't need to change at all in order to appear correctly in an RTL UI. The toolbar is an example of a \u003ci\u003eView\u003c/i\u003e subclass for which UI mirroring is taken care off automatically by the new framework. This is unfortunately not the case for all the Chromium UI elements.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Chromium-support-for-native-mirroring\" /\u003eChromium support for native mirroring \u003c/h3\u003e\r\n\u003cp\u003eMost of the Chromium mirroring infrastructure resides in \u003ci\u003eChromeViews\u003c/i\u003e. However, since Chromium also uses Windows native UI controls, the mirroring infrastructure includes interfaces that allow mirroring these controls easily. Here is a brief description of the interface:\u003c/p\u003e\r\n\u003cul\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eNativeControl::GetAdditionalExStyle()\u003c/b\u003e when \u003ci\u003eNativeControl\u003c/i\u003e subclasses invoke \u003ci\u003e::CreateWindowEx\u003c/i\u003e in order to create the underlying Windows control, they must bitwise-or the value returned from this function with the control's extended style. This way, if mirroring is turned on for the control, then WS_EX_LAYOUTRTL will be passed when creating the control.\u003c/li\u003e\r\n\t\r\n\u003cli\u003e\u003cb\u003eMenuHostWindow::Delegate::IsRightToLeftUILayout()\u003c/b\u003e this virtual method lets the menu delegate control the directionality of the menu. By default, the direction is derived from the locale's direction so generally subclasses don't need to override this method.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-write-RTL-ready-Chromium-UI\" /\u003eHow to write RTL-ready Chromium UI \u003c/h2\u003e\r\n\u003cp\u003eThe mirroring infrastructure described in this document is designed to be transparent to GUI developers. However, this is true only if the UI elements adhere to a certain set of conventions. Not following these rules when writing a UI element generally means that mirroring-specific code will need to be added to the element so that it is displayed correctly in right-to-left locales. This section describes the rules together with examples that demonstrate why not following these rules is problematic. Even though it is discouraged to put mirroring-specific code in a UI element (it is better to just follow the rules), this section shows how to handle mirroring manually in UI components. This is useful for UI component that, for whatever reason, can not be written in a manner that allows the mirroring infrastructure to display the component correctly in RTL locales.\u003c/p\u003e\r\n\u003cp\u003e\u003cb\u003eRule #1: represent UI sub elements as child \u003ci\u003eView\u003c/i\u003es\u003c/b\u003e\u003c/p\u003e\r\n\u003cp\u003eThe Chromium toolbar example presented earlier is an example of a Chromium \u003ci\u003eView\u003c/i\u003e subclass that contains several child \u003ci\u003eView\u003c/i\u003es as its sub elements. The toolbar lays out the sub elements, but it does not do any rendering. Instead, rendering is done by the individual sub elements. In other words, for the toolbar, the 'leaf' elements in the UI tree are the only elements that draw graphics on the canvas during \u003ci\u003eView::Paint()\u003c/i\u003e. This method plays well with the mirroring infrastructure since the coordinate transformation can be easily applied to the bounds of the child elements. One of the Chromium UI components that does not adhere to this rule is the \u003ci\u003eTab\u003c/i\u003e (see chrome/browser/tabs/tab.h). The \u003ci\u003eTab\u003c/i\u003e contains three UI sub elements. A 'close' button, a title and a favicon. The button is represented as a \u003ci\u003eChromeView::Button\u003c/i\u003e child \u003ci\u003eView\u003c/i\u003e. The title and the favicon are both drawn directly on the canvas by the \u003ci\u003eTab\u003c/i\u003e class during \u003ci\u003eView::Paint()\u003c/i\u003e. While the tabs look correctly on left-to-right locales, they don't on RTL locales:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197836223/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eAs the image shows, the button is positioned correctly on the left-hand side of the tab because during \u003ci\u003eTab::Layout()\u003c/i\u003e, it is positioned on the right-hand side (which becomes left when applying the coordinate transformation). The title and the favicon, on the other hand, are not positioned in the same manner since they are not child views. During \u003ci\u003eTab::Paint()\u003c/i\u003e, they are still drawn on the left-hand side, instead of the right-hand side. Readers of this (already long and boring) document are probably thinking the following right now: \"This can probably be solved if \u003ci\u003eView::EnableCanvasFlippingForRTLUI(true);\u003c/i\u003e is invoked in \u003ci\u003eTab\u003c/i\u003e's constructor so that the canvas is transformed.\". Well, think again:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197836070/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003eFlipping the canvas makes sense only for 'leaf' \u003ci\u003eView\u003c/i\u003es that draw graphics on their entire area. When drawing different elements on the canvas, it is not possible to use the mirroring infrastructure in order to control the appearance of each element. The best way to fix the problem is to represent the title and the favicon as child views. If that's not possible, the position of these elements needs to be mirrored manually:\u003c/p\u003e\r\n\u003cpre style\u003d\"color:rgb(0,96,0);white-space:pre-wrap\"\u003efavicon_bounds_.set_x(MirroredLeftPointForRect(favicon_bounds_));\u003cbr /\u003etitle_bounds_.set_x(MirroredLeftPointForRect(title_bounds_));\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cp\u003eWith this change, the tabs are displayed properly:\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197835880/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cp\u003e\u003cb\u003eRule #2: don't make assumptions such as top-left is always northwest\u003c/b\u003e.\u003c/p\u003e\r\n\u003cp\u003eWhen your \u003ci\u003eView\u003c/i\u003e subclass is being mirrored, its coordinate system is transformed and therefore if you are processing a mouse event for the point (0,0), the actual mouse position is the Northeast corner of your control. Thus, you should not write your GUI code assuming a left-to-right coordinate system. If the logic of your code depends on the actual position of the mouse event, then you should use the mirroring API in order to find out whether or not the coordinate system is transformed. See \u003cspan style\u003d\"font-family:courier new,monospace\"\u003echrome\\views\\custom_frame_window.cc\u003c/span\u003e for an example.\u003c/p\u003e\r\n\u003cp\u003e\u003cb\u003eMore rules will be added later on as I continue analyzing the cause of the most common Chromium mirroring bugs. For now, try to adhere to the initial rules.\u003c/b\u003e.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-test-a-mirrored-Chromium-UI-element\" /\u003eHow to test a mirrored Chromium UI element \u003c/h2\u003e\r\n\u003cp\u003eIf you write a new Chromium UI element or modify an existing element, it is highly important that you make sure the element is mirrored correctly in right-to-left locales. In order to do that, you can either change the UI language of Chromium via the \u003cb\u003eOptions\u003c/b\u003e dialog, or you can run Chromium from the command line such that the Hebrew UI is used:\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cp\u003eWindows: \u003cspan style\u003d\"color:rgb(0,96,0);white-space:pre-wrap;font-size:10pt;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003echrome.exe --lang\u003dhe\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cp\u003eLinux: Confirm the \u003cb\u003ehe_IL\u003c/b\u003e locale is installed on the system by running `locale -a` to list. Then: \u003cspan style\u003d\"color:rgb(0,96,0);font-size:13.3333330154419px;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eLANG\u003dhe_IL.UTF-8 LANGUAGE\u003dhe_IL chrome\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cp\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eMac: Use the Language and Region settings to change OS X to Hebrew. Then restart Chrome.\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eOnce you do that, you can look at your control and make sure it doesn't have layout bugs. Note that your machine probably doesn't include the files required for displaying right-to-left languages and therefore all the Hebrew strings will be rendered from left to right which will make them unreadable. It will also make certain Unicode control characters to appear as little squares surrounding the text. This does not impact the layout of the Chromium UI elements so it shouldn't prevent you from making sure your UI element is properly laid out. If you want the Hebrew strings to appear correctly and you want the annoying squares to go away, you can easily install the required Windows right-to-left language files by going to \u003c/span\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003eControl Panel \u0026gt; Regional and Language Options\u003c/b\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, selecting the \u003c/span\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003eLanguages\u003c/b\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e tab, and selecting the option to \u003c/span\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003eInstall files for complex script and right-to-left languages (including Thai)\u003c/b\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. Note that installing the right-to-left files requires a restart.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003eI am still trying to figure out if there is a way to write a UI test that makes sure UI mirroring is not broken so that people can make sure they don't break anything before a check-in. Suggestions are welcome!\u003c/p\u003e\r\n\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/300751399675976417"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"ui-mirroring-infrastructure"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"WSl7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7635529167330397808"},"published":{"$t":"2014-04-22T08:08:07.588Z"},"updated":{"$t":"2017-03-24T18:38:48.119Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-08T05:24:10.688Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Service workers"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-two-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-For-Web-Developers\" /\u003eFor Web Developers\u003c/h2\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cdiv style\u003d\"font-size:13px;font-weight:normal\" /\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-What-is-service-worker-\" /\u003e\u003cfont size\u003d\"3\"\u003eWhat is service worker?\u003c/font\u003e\u003c/h2\u003eSee the \u003ca href\u003d\"https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\" rel\u003d\"nofollow\"\u003eservice worker\u003c/a\u003e documentation at Mozilla Developer Network.\u003ch3 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-Debugging\" /\u003eDebugging\u003c/h3\u003e\u003cdiv style\u003d\"text-align:left\"\u003eWorking with a service worker is a little different than normal debugging. Check out \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/serviceworker/service-worker-faq\"\u003eService Worker Debugging\u003c/a\u003e for details.\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cdiv style\u003d\"font-size:13.63636302948px\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Track-Status\" /\u003e\u003cfont size\u003d\"3\"\u003eTrack Status\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.63636302948px\"\u003eService workers shipped in Chrome 40 (which was promoted to stable channel in January 2015).\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.63636302948px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.63636302948px\"\u003e\u003ca href\u003d\"https://jakearchibald.github.io/isserviceworkerready/\" rel\u003d\"nofollow\"\u003eIs Service Worker Ready?\u003c/a\u003e tracks the implementation status of service worker at a fine-grained, feature-by-feature level in many popular browsers.\u003c/div\u003e\u003c/div\u003e\u003ch3 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-File-Bugs\" /\u003eFile Bugs\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eGo to \u003ca href\u003d\"http://crbug.com/new\"\u003ehttp://crbug.com/new\u003c/a\u003e and include \"service worker\" in the summary. You should get a response from an engineer in about one week.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf the browser \u003cb\u003ecrashed\u003c/b\u003e while you were doing Service Worker development, go to chrome://crashes and cut and paste the Crash ID into the bug report. This kind of bug report is very valuable to us. (If you do not see crashes in chrome://crashes it may be because you chose not to send usage statistics and crash reports to Google. You can change this option in chrome://settings .)\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eTo give feedback about service worker that is not specific to Chromium, use \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eW3C's \u003c/span\u003e\u003ca href\u003d\"http://lists.w3.org/Archives/Public/public-webapps/\" style\u003d\"font-size:10pt;background-color:transparent\" rel\u003d\"nofollow\"\u003epublic-webapps mailing list\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. Use \u003c/span\u003e\u003ca href\u003d\"https://github.com/slightlyoff/ServiceWorker\" style\u003d\"font-size:13.63636302948px;background-color:transparent\" rel\u003d\"nofollow\"\u003ethe spec issue tracker\u003c/a\u003e\u003cspan style\u003d\"font-size:13.63636302948px;background-color:transparent\"\u003e to f\u003c/span\u003e\u003cspan style\u003d\"font-size:13.63636302948px;background-color:transparent\"\u003eile bugs against the service worker spec.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.63636302948px;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Discuss\" /\u003eDiscuss\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eFor detailed questions about usage: ask us on \u003c/span\u003e\u003ca href\u003d\"http://stackoverflow.com\" style\u003d\"font-size:10pt;background-color:transparent\" rel\u003d\"nofollow\"\u003eStackOverflow\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e with the \"\u003c/span\u003e\u003ca href\u003d\"http://stackoverflow.com/questions/tagged/service-worker\" style\u003d\"font-size:10pt;background-color:transparent\" rel\u003d\"nofollow\"\u003eservice-worker\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\" tag.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003eFor important announcements and technical discussion about Service Worker, \u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/service-worker-discuss\"\u003ejoin us at service-worker-discuss@chromium.org\u003c/a\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-2\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-For-Chromium-Blink-Contributors\" /\u003eFor Chromium \u0026amp; Blink Contributors\u003c/h2\u003e\u003cdiv\u003e...interested web developers are welcome to poke around too!\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Links\" /\u003eLinks\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eSpec \u003ca href\u003d\"https://github.com/slightlyoff/ServiceWorker\" rel\u003d\"nofollow\"\u003eissues\u003c/a\u003e, \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"http://www.w3.org/TR/2014/WD-service-workers-20140508/\" rel\u003d\"nofollow\"\u003eFPWD\u003c/a\u003e, \u003ca href\u003d\"https://slightlyoff.github.io/ServiceWorker/spec/service_worker/\" rel\u003d\"nofollow\"\u003eED\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/serviceworker/testing\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eTesting\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eImplementation bugs use the \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?q\u003dcomponent:Blink%3EServiceWorker\"\u003eBlink\u0026gt;ServiceWorker\u003c/a\u003e component.\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e If you sign-in, you can subscribe to get e-mail updates at Profile \u0026gt; Saved Queries.\u003c/span\u003e\u003c/li\u003e\u003cli\u003eMailing lists: we use \u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev\"\u003eblink-dev@chromium.org\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e for public discussion.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eCode reviews: subscribe to the \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/serviceworker-reviews\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eserviceworker-reviews@chromium.org\u003c/a\u003e group to get a copy of all code review requests.\u003c/li\u003e\u003cli\u003eDocs:\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1DoueYsm-UOvqDyqIPd9aGAWWQ1XZKX89CsJXDF7j_2Q/edit\"\u003eHitchhiker's guide to Service Worker classes\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1cBZay5IbPHFLtDpFPu7q9XevtydiuTKbqXKIFaBZDJQ/edit?usp\u003dsharing\"\u003eHow to Implement a Web Platform Feature on Service Workers\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/serviceworker"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7635529167330397808"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7635529167330397808"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7635529167330397808"}],"author":[{"name":{"$t":"Kinuko Yasuda"},"email":{"$t":"kinuko@chromium.org"}}],"sites$pageName":{"$t":"serviceworker"},"sites$revision":{"$t":"50"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8523460844799976527"},"published":{"$t":"2014-10-25T00:11:03.899Z"},"updated":{"$t":"2017-03-23T15:49:28.563Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-23T15:49:26.914Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Building and using PNaCl components for Chromium distribution packagers"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eOverview\u003c/span\u003e\u003c/h2\u003eChromium's support for NaCl includes a runtime component called the IRT (integrated runtime) that is built as untrusted NaCl code with a NaCl compiler. Currently the PNaCl compiler is required for building this component on x86-64, and is used on other architectures as well for consistency.\u003cdiv\u003eChromium's automated builders download binary tarballs of the NaCl compilers, to avoid having to rebuild them on every run. However distributors of Chromium may be unwilling to do this and wish to build the toolchain from source (and possibly even package the toolchain itself). Also, the toolchain binary is built for the x86_64 architecture and won't run on systems with i686 kernels.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSo this document describes how to build the PNaCl toolchain from source, (for someone who doesn't necessarily want to modify it) and build Chromium using a locally-built toolchain.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ePNaCl toolchains are built using a set of scripts in the Native Client repository, whose entry point is \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003etoolchain_build/toolchain_build_pnacl.py\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eThis script is mostly optimized for use for day-to-day toolchain development and for our automated builders, so some non-default flags are needed.\u003c/div\u003e\u003cdiv\u003eFor now this script must also be used to fetch the PNaCl toolchain sources. In the future we hope to provide source tarballs and/or patches against upstream sources.\u003c/div\u003e\u003cdiv\u003eTo see a full list of supported flags, use the -h flag. The toolchain consists of many \"packages\" for different components such as the host LLVM and binutils binaries, PNaCl driver scripts, and target libraries for each supported target.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTL;DR: You can build all of the required components from a checkout of the native_client source tree (which could be the one DEPSed in by Chromium)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e$ toolchain_build/toolchain_build_pnacl.py --verbose --sync --clobber --gcc [--no-nacl-gcc] --no-use-cached-results --no-use-remote-cache --disable-git-cache --build-sbtc\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e$ build/package_version/package_version.py --packages pnacl_newlib --tar-dir toolchain_build/out/packages --dest-dir toolchain/ extract --skip-missing\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e$ \u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003ebuild/package_version/package_version.py --packages pnacl_translator --tar-dir toolchain_build/out/packages --dest-dir toolchain/ extract --skip-missing\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen you run Chromium's gyp to configure the build, add the following to your gyp defines:\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003epnacl_newlib_toolchain\u003d\u0026lt;/path/to/native_client\u0026gt;/toolchain/linux_x86/pnacl_newlib\u003c/code\u003e\u003c/div\u003e\u003ccode\u003epnacl_translator_dir\u003d\u0026lt;/path/to/native_client\u0026gt;/toolchain/linux_x86/pnacl_translator\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003eWhen the gyp-generated ninja build prepares the toolchain to build the IRT, it will copy the specified directory rather than extracting the binary tarballs.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Explanation\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eExplanation\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003eThe first command builds the host toolchain components. It\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e fetches the sources (--sync) into the toolchain_build/src directory without relying on tools specific to Chromium's depot_tools package (--disable-git-cache). It clobbers any existing build working directories (--clobber), builds the PNaCl host toolchain using the system compiler (--gcc) and does not use our automated build infrastructure for caching build artifacts (--no-cache-results,--no-use-cached-results). Its output is an install directory for each package in \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003etoolchain_build/out/{packagename}_install\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, a set of tarballs in \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003etoolchain_build/out/cache\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and a set of JSON files that describe the packages and their contents in \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003etoolchain_build/out/packages\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe contents of these install directories can be copied \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e(or the tarballs can be extracted together)\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e into any directory, and the toolchain can be used from that directory. This is what the second command does: it takes the JSON file describing the pnacl_newlib package and extracts its tarballs into the \u003ccode\u003etoolchain/linux_x86/pnacl_newlib\u003c/code\u003e directory.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOne caveat is that nacl-clang uses gcc's exception handling runtime (libgcc_eh) on x86 architectures. This in turn requires {i686,x86_64}-nacl-gcc to build. This toolchain has a separate build script see (\u003cfont face\u003d\"courier new, monospace\"\u003etools/Makefile\u003c/font\u003e) or can be installed as a binary in the same way that the PNaCl compilers can. Alternatively the --no-nacl-gcc flag can be used when building the PNaCl, which will allow the build to complete but will result in a non-functional C++ exception handling runtime (this EH runtime is not needed to build any Chrome components, so you'd only need to build it if you want to also create a NaCl SDK for developers to use).\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-PNaCl-in-browser-translator\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003ePNaCl in-browser translator\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003eIf you want to enable PNaCl as well as NaCl in Chromium, the last component that needs to be built is the in-browser PNaCl translator component. The third command does that, and leaves its output in \u003ccode\u003etoolchain/linux_x86/pnacl_translator\u003c/code\u003e. It consists of 2 NaCl modules and a few NaCl object/archive files (per supported architecture), and these are packaged (munging the filenames) into a directory called \u003ccode\u003epnacl\u003c/code\u003e in Chromium's build output directory by a python script that runs as part of Chromium's build (e.g. in \u003ccode\u003e/path/to/chromium/src/out/Release/pnacl/pnacl_public_foo\u003c/code\u003e). For desktop Google Chrome official builds, these artifacts are not packaged with Chrome's installer, and are instead delivered after install by the component updater code. However for locally-built Chromium binaries, distribution packages, and ChromeOS (where the entire OS image is updated at once) the PNaCl translator in this directory is used.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you also want to avoid using the \u003ccode\u003epackage_version.py\u003c/code\u003e tool after running \u003ccode\u003etoolchain_build_pnacl.py\u003c/code\u003e you can manually copy the contents of all of the \u003ccode\u003etoolchain_build/out/\u0026lt;packagename\u0026gt;_install\u003c/code\u003e directories into a location of your choosing, and make the \u003ccode\u003epnacl_newlib_toolchain\u003c/code\u003e gyp variable point to that directory. If you do so, you will also have to create a stamp file in that directory; by default it is called \u003ccode\u003epnacl_newlib.json\u003c/code\u003e but that name can be overridden with the \u003ccode\u003epnacl_newlib_stamp\u003c/code\u003e gyp variable. Only the modified time of the stamp file matters, not the content; if you change the contents of the toolchain directory and want to rebuild Chromium, you will need to touch the stamp file.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Network-Access\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eNetwork Access\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003eSometimes distributions want to be able to build from locally-available sources without requiring network access during the build. Ideally we would have source tarballs or patches against upstream sources available for this purpose, but today we do not. However the sources can be fetched separately from the build: the \u003ccode\u003e--sync-only\u003c/code\u003e flag for \u003ccode\u003etoolchain_build_pnacl.py\u003c/code\u003e causes the sources to be fetched into the \u003ccode\u003etoolchain_build/src\u003c/code\u003e directory without building anything. Then the build can be done later by a separate invocation which does not require network access.\u003c/div\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ toolchain_build/toolchain_build_pnacl.py --verbose --sync --sync-only --disable-git-cache\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e$ toolchain_build/toolchain_build_pnacl.py --verbose --clobber --gcc --no-use-cached-results --no-use-remote-cache \u003c/code\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Other-flags\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eOther flags\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003eA listing of all the available package names and the supported flags for \u003ccode\u003etoolchain_build_pnacl.py\u003c/code\u003e can be seen by using the \u003ccode\u003e--help\u003c/code\u003e flag. Other flags that may be of interest in this context include \u003ccode\u003e--output\u003d\u003c/code\u003e, \u003ccode\u003e--source\u003d\u003c/code\u003e, and \u003ccode\u003e--cache\u003d\u003c/code\u003e which allow changing the default directories for the fetched sources and build artifacts.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-More-information\" /\u003eMore information\u003c/h2\u003e\u003cdiv\u003eThere is a tracking bug for work to help enable this use case at \u003ca href\u003d\"https://code.google.com/p/nativeclient/issues/detail?id\u003d3954\" target\u003d\"_blank\"\u003ehttps://code.google.com/p/nativeclient/issues/detail?id\u003d3954\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2062405729464790262"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8523460844799976527"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8523460844799976527"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8523460844799976527"}],"author":[{"name":{"$t":"Derek Schuff"},"email":{"$t":"dschuff@google.com"}}],"sites$pageName":{"$t":"building-pnacl-components-for-distribution-packagers"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8274221347570308905"},"published":{"$t":"2017-03-21T03:21:22.249Z"},"updated":{"$t":"2017-03-21T03:21:22.417Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-21T03:21:22.249Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"cap"},"summary":{},"content":{"type":"application/cap","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8274221347570308905"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1140447999003262300"},{"rel":"alternate","type":"application/cap","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/cros-autotest/cap"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8274221347570308905"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8274221347570308905"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8274221347570308905"},{"rel":"edit-media","type":"application/cap","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8274221347570308905"}],"author":[{"name":{"$t":"Chung-yih Wang"},"email":{"$t":"cywang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1140447999003262300"},"published":{"$t":"2017-03-21T02:28:50.445Z"},"updated":{"$t":"2017-03-21T02:28:50.590Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-21T02:28:50.528Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#filecabinet","label":"filecabinet"}],"title":{"$t":"cros-autotest"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/cros-autotest"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1140447999003262300"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1140447999003262300"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1140447999003262300"}],"author":[{"name":{"$t":"Chung-yih Wang"},"email":{"$t":"cywang@chromium.org"}}],"gd$feedLink":{"href":"https://sites.google.com/feeds/content/chromium.org/dev?parent\u003d1140447999003262300"},"sites$pageName":{"$t":"cros-autotest"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/560965506222183635"},"published":{"$t":"2010-12-15T22:38:49.002Z"},"updated":{"$t":"2017-03-21T01:13:38.395Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-21T01:13:36.736Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Network Stack Use in Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Overview\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eOverview\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-ChromeURLRequestContext\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eChromeURLRequestContext\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-ChromeURLRequestContextGetter:\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eChromeURLRequestContextGetter:\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-URLRequest-usages\"\u003e\u003cstrong\u003e1.2.1 \u003c/strong\u003eURLRequest usages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-NetworkChangeNotifier\"\u003e\u003cstrong\u003e1.2.2 \u003c/strong\u003eNetworkChangeNotifier\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Network-predictor\"\u003e\u003cstrong\u003e1.2.3 \u003c/strong\u003eNetwork predictor\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\u003cdiv\u003eChromium is the primary consumer of the Chromium network stack. While there are other consumers, the main one is the Chromium browser process. For the most part, the network stack runs in the browser process's IO thread, and interfaces with the Chromium network stack via \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e and \u003ccode\u003eURLRequest\u003c/code\u003e/\u003ccode\u003eURLFetcher\u003c/code\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-ChromeURLRequestContext\" /\u003eChromeURLRequestContext\u003c/h3\u003e\u003cdiv\u003eThe Chromium browser process uses several instances of \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e, a subclass of \u003ccode\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack#TOC-Overview\"\u003eURLRequestContext\u003c/a\u003e\u003c/code\u003e. For a given profile, there are a number of \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e instances:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe \"main\" \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e. The majority of \u003ccode\u003eURLRequest\u003c/code\u003es are associated with this \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e instance.\u003c/li\u003e\u003cli\u003eThe \"media\" \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e. This one uses a different \u003ccode\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache\"\u003eHttpCache\u003c/a\u003e\u003c/code\u003e instance that is optimized for large media requests (video). It shares many objects, such as the \u003ccode\u003eHostResolver\u003c/code\u003e, \u003ccode\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster\"\u003eCookieMonster\u003c/a\u003e\u003c/code\u003e, etc. with the main \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eThe \"extension\" \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e. It shares many objects with the main \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e. This instance helps service chrome-extension:// requests.\u003c/li\u003e\u003c/ul\u003eThere are also some other \u003ccode\u003eChromeURLRequestContext\u003c/code\u003es, such as sync's \u003ccode\u003eHttpBridge::RequestContext\u003c/code\u003e, the \u003ccode\u003eConnectionTester\u003c/code\u003e's \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e, etc. These are not tied to the profile, although with a multiple profile Chromium, sync's \u003ccode\u003eHttpBridge::RequestContext\u003c/code\u003e likely would have to be tied to a profile.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote that the \"off the record\" (Incognito) profile uses a special OTR \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e, in addition to the media and extension contexts, that shares some objects, although notably not the \u003ccode\u003eHttpCache\u003c/code\u003e or \u003ccode\u003eCookieMonster\u003c/code\u003e etc that are important to be separated for an off the record profile. The \u003ccode\u003eHostResolver\u003c/code\u003e is shared.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMany of the objects in \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e use \u003ccode\u003escoped_refptr\u003c/code\u003es to share ownership. This causes a lot of problems with object destruction ordering and reference cycles. Many of these members are being moved towards being owned externally, by the \u003ccode\u003eIOThread\u003c/code\u003e, although that choice may have to change to \u003ccode\u003eProfileImpl\u003c/code\u003e or something to support multiple profiles in Chromium.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote that currently \u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px\"\u003eChromeURLRequestContext\u003c/span\u003e contains a lot of extra members that don't exist in \u003ccode\u003eURLRequestContext\u003c/code\u003e. These are being moved out, because they have nothing to do with \u003ccode\u003eURLRequestContext\u003c/code\u003e and were only placed in \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e because it was a convenient per-profile object, and originally there weren't many \u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003eChromeURLRequestContext\u003c/span\u003e objects.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-ChromeURLRequestContextGetter:\" /\u003eChromeURLRequestContextGetter:\u003c/h3\u003e\u003cdiv\u003e\u003ccode\u003eChromeURLRequestContext\u003c/code\u003e is constructed and destroyed on the same thread. However, sometimes other threads need to hold references to them, even before they get constructed. \u003ccode\u003eChromeURLRequestContextGetter\u003c/code\u003e is a handle for \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e that will lazily construct it on the first attempt to use it. Accesses to the contained \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e are only allowed on the IO thread.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-URLRequest-usages\" /\u003eURLRequest usages\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eResourceDispatcherHost\u003c/code\u003e creates \u003ccode\u003eURLRequests\u003c/code\u003e when the renderer or plugin processes issue resource requests. It retains pointers to all the \u003ccode\u003eChromeURLRequestContextGetters\u003c/code\u003e.\u003c/li\u003e\u003cli\u003e\u003ccode\u003eURLFetcher\u003c/code\u003e is another frontend for \u003ccode\u003eURLRequest\u003c/code\u003e. It allows any thread with access to the appropriate \u003ccode\u003eChromeURLRequestContextGetter\u003c/code\u003e to proxy requests to the IO thread. It provides a simplified delegate interface that returns the full response body as a single string. There are many users of \u003ccode\u003eURLFetcher\u003c/code\u003e in the Chromium browser process, including the omnibox, extensions, sync (which uses its own \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e), etc. Usually these objects use the \"main\" \u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003eChromeURLRequestContextGetter\u003c/span\u003e object.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-NetworkChangeNotifier\" /\u003eNetworkChangeNotifier\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIntranetRedirectDetector - Lets us probe the network to see if ISPs are trying to redirect requests to non-existent hosts.\u003c/li\u003e\u003cli\u003eGoogleURLTracker - Lets us probe Google to see the appropriate domain for the search engine.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Network-predictor\" /\u003eNetwork predictor\u003c/h4\u003e\u003cdiv\u003eIt uses \u003ccode\u003eURLRequest::Interceptor\u003c/code\u003e to hook into all \u003ccode\u003eURLRequests\u003c/code\u003e to watch them come and go, so it can analyze the referers to learn the subdomains used in subsequent requests. It uses this knowledge to predict network requests. For likely requests, it keeps around the pointer to the \"main\" \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e's \u003ccode\u003eHostResolver\u003c/code\u003e, so it can perform DNS prefetching. For requests that are almost guaranteed to happen, it goes even further and uses the \"main\" \u003ccode\u003eChromeURLRequestContext\u003c/code\u003e's \u003ccode\u003eHttpStreamFactory\u003c/code\u003e to preconnect a socket.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2187609824886192973"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/network-stack-use-in-chromium"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/560965506222183635"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/560965506222183635"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/560965506222183635"}],"author":[{"name":{"$t":"William Chan"},"email":{"$t":"willchan@chromium.org"}}],"sites$pageName":{"$t":"network-stack-use-in-chromium"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5072186806584032361"},"published":{"$t":"2017-03-20T23:11:46.784Z"},"updated":{"$t":"2017-03-21T01:05:02.421Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-20T23:11:46.847Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"arcplusplus-testing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/arcplusplus-testing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5072186806584032361"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5072186806584032361"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5072186806584032361"}],"author":[{"name":{"$t":"Derek Basehore"},"email":{"$t":"dbasehore@chromium.org"}}],"sites$pageName":{"$t":"arcplusplus-testing"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"WCl7JmA4\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7581770669156251778"},"published":{"$t":"2012-04-18T14:12:54.984Z"},"updated":{"$t":"2017-03-20T20:40:48.819Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-20T20:40:47.577Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autotest for Chromium OS developers"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis content has moved to:\u003cdiv\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/docs/user-doc.md\"\u003ehttps://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/docs/user-doc.md\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-user-doc"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7581770669156251778"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7581770669156251778"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7581770669156251778"}],"author":[{}],"sites$pageName":{"$t":"autotest-user-doc"},"sites$revision":{"$t":"41"}},{"gd$etag":"\"Wyl7JmA4\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7001524370948795063"},"published":{"$t":"2015-07-22T22:04:19.544Z"},"updated":{"$t":"2017-03-16T19:03:51.347Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-16T19:03:48.985Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Build Instructions (Android)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eThis page has been replaced by \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md\" style\u003d\"font-size:13.3333px\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003col\u003e\r\n\u003c/ol\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/android-build-instructions"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7001524370948795063"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7001524370948795063"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7001524370948795063"}],"author":[{"name":{"$t":"Newton Allen"},"email":{"$t":"newt@chromium.org"}}],"sites$pageName":{"$t":"android-build-instructions"},"sites$revision":{"$t":"42"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1467454892409878953"},"published":{"$t":"2011-09-19T17:40:10.777Z"},"updated":{"$t":"2017-03-15T20:53:51.429Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-15T20:53:50.077Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Open Network Configuration"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont size\u003d\"3\"\u003eThe Open Network Configuration specification describes a network and certificate configuration format that could be used across operating systems. Chromium OS will support it natively. \u003c/font\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eThe specification can be found here:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md\u003c/a\u003e\u003cbr /\u003e\u003c/font\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/open-network-configuration"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1467454892409878953"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1467454892409878953"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1467454892409878953"}],"author":[{"name":{"$t":"Ken Mixter"},"email":{"$t":"kmixter@chromium.org"}}],"sites$pageName":{"$t":"open-network-configuration"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"Xil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7575192847733958161"},"published":{"$t":"2012-03-02T17:20:26.837Z"},"updated":{"$t":"2017-03-10T18:46:04.561Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:46:02.919Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"packages"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003eWe have many packages in the Chromium OS tree. While many come from upstream Gentoo (which can be browsed \u003ca href\u003d\"http://packages.gentoo.org/\" rel\u003d\"nofollow\"\u003ehttp://packages.gentoo.org/\u003c/a\u003e), there are a good number which are specific to our project. Here you can dive down into them.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Core-system\" /\u003eCore system\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003echromeos: meta package to pull in all dependencies for a Chromium OS install\u003c/li\u003e\r\n\u003cli\u003echromeos-base: Chromium OS specific config files (usually /etc) and user/group id management\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/libchrome\"\u003elibchrome\u003c/a\u003e: the base / utility library from the Chromium browser (used by many Chromium OS projects)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/libchromeos\"\u003elibchromeos\u003c/a\u003e: custom Chromium OS utility library\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003emetrics: simplify metrics gathering by other packages\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003echromeos-chrome: the Chromium browser\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Debug-Development\" /\u003eDebug/Development\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/debugd/\"\u003edebugd\u003c/a\u003e: daemon for debugging issues\u003c/li\u003e\r\n\u003cli\u003echromeos-dev: set of packages used in developer images and available by running \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images\"\u003edev_install\u003c/a\u003e in release images\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/crash-reporting\"\u003ecrash-reporter\u003c/a\u003e: crash processing program/uploader\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/crosh/\"\u003ecrosh\u003c/a\u003e: interactive shell for running low level commands, running ssh, etc...\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images\"\u003edev_install\u003c/a\u003e: install dev packages into a base (release) image\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/using-the-dev-server\"\u003egmerge\u003c/a\u003e: installing packages live onto your device\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/google-breakpad\"\u003egoogle-breakpad\u003c/a\u003e: crash reporting and symbol/stack analysis library\u003c/li\u003e\r\n\u003cli\u003essh-known-hosts: known ssh keys of Chromium OS servers\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Factory-Updates\" /\u003eFactory/Updates\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003echromeos-factoryinstall\u003c/li\u003e\r\n\u003cli\u003ememento_softwareupdate\u003c/li\u003e\r\n\u003cli\u003eupdate_engine\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware\" /\u003eFirmware\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003echromeos-coreboot: 1st stage boot loader on x86 platforms\u003c/li\u003e\r\n\u003cli\u003echromeos-ec: embedded controller firmware for many ChromeOS devices\u003c/li\u003e\r\n\u003cli\u003echromeos-u-boot: 2nd stage boot loader\u003c/li\u003e\r\n\u003cli\u003ecoreboot-utils: utilities for working with coreboot firmeware images\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://www.t2-project.org/packages/dtc.html\" rel\u003d\"nofollow\"\u003edtc\u003c/a\u003e: device tree (text files which describe hardware layouts) compiler\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://flashmap.googlecode.com\"\u003eflashmap\u003c/a\u003e: utility for manipulating firmware images\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/cros-flashrom\"\u003eflashrom\u003c/a\u003e: utility for reading/writing flash chips on devices (which store firmware/etc...)\u003c/li\u003e\r\n\u003cli\u003evboot_reference: tools for working with verified boot\u003c/li\u003e\r\n\u003cli\u003evboot_reference-firmware: firmware for supporting verified boot\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Graphics-Input\" /\u003eGraphics/Input\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003exf86-input-cmt: \u003cb\u003eC\u003c/b\u003ehromium OS \u003cb\u003em\u003c/b\u003eulti\u003cb\u003et\u003c/b\u003eouch driver (similar to xf86-input-synaptics, but better!)\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Misc\" /\u003eMisc\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003eentd: enterprise daemon -- deprecated in favor of libpolicy (in libchromeos package)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/README.md\"\u003epower_manager\u003c/a\u003e: userspace daemon for performing power-management-related tasks\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Media-Audio-Video-\" /\u003eMedia (Audio/Video)\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003eadhd: Chromium OS audio server\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Networking\" /\u003eNetworking\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003ecashew: network statistics package -- integrated into shill now\u003c/li\u003e\r\n\u003cli\u003ecromo: modemmanager compatible dbus interface to support closed source modem drivers (which are discouraged)\u003c/li\u003e\r\n\u003cli\u003eflimflam: network manager -- deprecated in favor of shill\u003c/li\u003e\r\n\u003cli\u003egobi3k-sdk: SDK for working with Qaulcomm's gobi3k devices\u003c/li\u003e\r\n\u003cli\u003egobi-cromo-plugin: plugin for supporting gobi3k modems with cromo (to be replaced \u0026amp; merged with modemmanager)\u003c/li\u003e\r\n\u003cli\u003eminifakedns: \u003c/li\u003e\r\n\u003cli\u003emobile-providers: \u003c/li\u003e\r\n\u003cli\u003emodem-diagnostics: \u003c/li\u003e\r\n\u003cli\u003emodem-utilities: \u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://cgit.freedesktop.org/ModemManager/ModemManager/\" rel\u003d\"nofollow\"\u003emodemmanager\u003c/a\u003e: daemon and libraries for managing modem/mobile devices (such as 3G cellular)\u003c/li\u003e\r\n\u003cli\u003eshill: network manager (similar to the NetworkManager project, but better)\u003c/li\u003e\r\n\u003cli\u003evpn-manager: \u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://hostap.epitest.fi/wpa_supplicant/\" rel\u003d\"nofollow\"\u003ewpa_supplicant\u003c/a\u003e: utilities for managing WiFi 802.11 connections\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Security-Crypto-etc...-\" /\u003eSecurity (Crypto/etc...)\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003echaps: \u003c/li\u003e\r\n\u003cli\u003echromeos-ca-certificates: certificates from \u003ca href\u003d\"http://en.wikipedia.org/wiki/Certificate_authority\" rel\u003d\"nofollow\"\u003ecertificate authorities\u003c/a\u003e that the browser in ChromeOS will trust (i.e. https://)\u003c/li\u003e\r\n\u003cli\u003echromeos-cryptohome: manager for per-user encrypted home storage\u003c/li\u003e\r\n\u003cli\u003echromeos-minijail: \u003c/li\u003e\r\n\u003cli\u003elibchrome_crypto: the crypto/ utility library from the Chromium browser (used by a few crypto-related Chromium OS projects)\u003c/li\u003e\r\n\u003cli\u003eroot-certificates: \u003c/li\u003e\r\n\u003cli\u003etpm: \u003c/li\u003e\r\n\u003cli\u003etrousers: \u003c/li\u003e\r\n\u003cli\u003everity: full disk encryption and verification (see dm_verity kernel driver)\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/biod\"\u003ebiod\u003c/a\u003e: biometrics daemon that is responsible for interfacing with kernel interfaces of biometric devices, securely storing biometric data, and capturing/authenticating biometric input.\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Testing\" /\u003eTesting\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003eautotest: Chromium OS tests\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7575192847733958161"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7575192847733958161"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7575192847733958161"}],"author":[{"name":{"$t":"Mike Frysinger"},"email":{"$t":"vapier@chromium.org"}}],"sites$pageName":{"$t":"packages"},"sites$revision":{"$t":"17"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},"published":{"$t":"2013-02-27T21:19:38.826Z"},"updated":{"$t":"2017-03-10T18:45:14.189Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:45:12.501Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Power Manager"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-This-documentation-has-been-moved-to-live-alongside-the-power-management-source-code.\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eThis documentation has been moved to live alongside the \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/README.md\"\u003epower management source code\u003c/a\u003e.\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7575192847733958161"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3635178625905419173"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"power_manager"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1543907676205706894"},"published":{"$t":"2014-06-29T13:51:16.038Z"},"updated":{"$t":"2017-03-10T18:43:42.047Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:43:40.278Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Input"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/input.md\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/input"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1543907676205706894"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1543907676205706894"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1543907676205706894"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"input"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1044369373228288159"},"published":{"$t":"2015-02-03T03:54:19.085Z"},"updated":{"$t":"2017-03-10T18:43:17.278Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:43:15.291Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Battery Notifications"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/battery_notifications.md\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/battery-notifications"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1044369373228288159"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1044369373228288159"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1044369373228288159"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"battery-notifications"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"WCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7673859401041175647"},"published":{"$t":"2013-10-02T20:04:44.183Z"},"updated":{"$t":"2017-03-10T18:42:27.358Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:42:25.298Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Inactivity Delays"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/inactivity_delays.md\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/inactivity-delays"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7673859401041175647"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7673859401041175647"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7673859401041175647"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"inactivity-delays"},"sites$revision":{"$t":"11"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3893390683863741265"},"published":{"$t":"2015-03-19T02:48:34.324Z"},"updated":{"$t":"2017-03-10T18:41:36.084Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:41:34.378Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Keyboard Backlight"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/keyboard_backlight.md\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/keyboard-backlight"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3893390683863741265"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3893390683863741265"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3893390683863741265"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"keyboard-backlight"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"Xyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1957232208344099455"},"published":{"$t":"2013-09-11T16:07:38.197Z"},"updated":{"$t":"2017-03-10T18:41:00.756Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:40:58.906Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Screen Brightness"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/screen_brightness.md\"\u003ehere\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/screen-brightness"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1957232208344099455"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1957232208344099455"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1957232208344099455"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"screen-brightness"},"sites$revision":{"$t":"16"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4637016293833556964"},"published":{"$t":"2014-06-29T14:09:42.909Z"},"updated":{"$t":"2017-03-10T18:39:56.668Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T18:39:54.826Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Suspend and Resume"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/docs/suspend_resume.md\"\u003ehere\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3635178625905419173"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/power_manager/suspend-and-resume"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4637016293833556964"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4637016293833556964"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4637016293833556964"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$pageName":{"$t":"suspend-and-resume"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5517885524662243406"},"published":{"$t":"2017-03-08T20:33:48.638Z"},"updated":{"$t":"2017-03-10T15:39:45.934Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-10T15:39:45.890Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Impact - Usage.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5517885524662243406"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Impact%20-%20Usage.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5517885524662243406"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5517885524662243406"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5517885524662243406"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5517885524662243406"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/259273822416175221"},"published":{"$t":"2017-03-08T20:34:00.704Z"},"updated":{"$t":"2017-03-08T20:34:43.814Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-08T20:34:43.772Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Impact.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/259273822416175221"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Impact.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/259273822416175221"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/259273822416175221"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/259273822416175221"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/259273822416175221"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},"published":{"$t":"2017-03-07T09:20:31.730Z"},"updated":{"$t":"2017-03-07T11:39:19.166Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T11:39:17.299Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chamelium Audio streaming"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Prepare-a-Chromebook-with-tick-noise\"\u003e\u003cstrong\u003e2 \u003c/strong\u003ePrepare a Chromebook with tick noise\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Play-sine-tone-on-Chromebook\"\u003e\u003cstrong\u003e3 \u003c/strong\u003ePlay sine tone on Chromebook\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Connect-the-audio-path\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eConnect the audio path\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Find-Chamelium-s-IP\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eFind Chamelium's IP\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Connect-to-Chamelium-server\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eConnect to Chamelium server\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Adjust-volume-on-Chromebook-or-adjust-the-parameter-of-detector\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eAdjust volume on Chromebook, or adjust the parameter of detector\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Check-the-recorded-defect-waveform\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eCheck the recorded defect waveform\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003eChamelium provides capturing and streaming feature so user can monitor audio playing from ChromeOS for a long time.\u003cdiv\u003eThis document provides the steps to demo this feature.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Prepare-a-Chromebook-with-tick-noise\" /\u003ePrepare a Chromebook with tick noise\u003c/h2\u003e\u003cdiv\u003eInstall an image on ChromeOS such that there will be tick noise caused by underrun.\u003c/div\u003e\u003cdiv\u003eKevin image R57-9178.0.0 is a good example.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Play-sine-tone-on-Chromebook\" /\u003ePlay sine tone on Chromebook\u003c/h2\u003ePlay a sine tone video on youtube, e.g. \u003ca href\u003d\"https://www.youtube.com/watch?v\u003ddZ5G13MEMgc\"\u003e1HR 528Hz sine tone\u003c/a\u003e\u003cbr /\u003eListen to it using headphone and find there is tick noise.\u003ch2\u003e\u003ca name\u003d\"TOC-Connect-the-audio-path\" /\u003eConnect the audio path\u003c/h2\u003e\u003cdiv\u003eConnect the Chromebook to Chamelium audio board using 4 ring audio cable.\u003c/div\u003e\u003cdiv\u003eConnect Chamelium blue port (LineIn) to audio board blue port using 3 ring audio cable.\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"300\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1488886092520/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg\" width\u003d\"400\" /\u003e\u003c/a\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"font-size:10pt\"\u003e\u003cimg border\u003d\"0\" height\u003d\"300\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1488886135517/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg\" width\u003d\"400\" /\u003e\u003c/a\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"font-size:10pt\"\u003e\u003cimg border\u003d\"0\" height\u003d\"300\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1488886155945/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Find-Chamelium-s-IP\" /\u003eFind Chamelium's IP\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eConnect the USB serial port to workstation.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eRefer to \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium#TOC-Verify-your-network-setup\"\u003enetwork setup\u003c/a\u003e \u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eto get the IP address of Chamelium.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Connect-to-Chamelium-server\" /\u003eConnect to Chamelium server\u003c/h2\u003e\u003cdiv\u003eAssume the IP address of Chamelium is 192.168.100.4\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn Chromium OS chroot, use test_server script to connect to Chamelium server.\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e$ cd ~/trunk/src/platform/chameleon/\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e$ ./client/test_server.py --chameleon_host\u003d192.168.100.4\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:36:47,219:INFO:Connected to http://192.168.100.4:9992 with MAC address 94:eb:2c:00:01:41\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:36:47,219:INFO:In interactive shell, p is the proxy to chameleond server\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:36:47,287:INFO:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 1 is DP.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 2 is DP.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 3 is HDMI.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 4 is VGA.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 5 is Mic.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 6 is LineIn.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 7 is LineOut.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 8 is USBIn.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 9 is USBOut.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 10 is USBKeyboard.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 11 is USBTouch.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 14 is ClassicBluetoothMouse.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Port 17 is Unknown.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e E.g.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e p.StartCapturingAudio(6) to capture from LineIn.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e p.StopCapturingAudio(6) to stop capturing from LineIn.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e p.Plug(3) to plug HDMI.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e p.Unplug(3) to unplug HDMI.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePython 2.7.10 (default, Oct 23 2016, 07:38:19) \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e[GCC 4.9.x 20150123 (prerelease)] on linux2\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(InteractiveConsole)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026gt;\u0026gt;\u0026gt; \u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003cb\u003e ConnectCrosToLineIn()\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026gt;\u0026gt;\u0026gt; \u003cb\u003ep.StartCapturingAudio(6, False)\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026gt;\u0026gt;\u0026gt; \u003cb\u003eDetectAudioValue0\u003c/b\u003e()\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,219:INFO:connecting to 192.168.100.4:9994\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,222:DEBUG:Major 1, minor 0\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,222:INFO:dump realtime audio page mode Best effort\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,224:INFO:Start to detect continuous 0s.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,224:INFO:Channels\u003d[0, 1], margin\u003d0.010000, continuous_samples\u003d5, duration\u003d3600 seconds, dump_frames\u003d48000.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,224:WARNING:Receive error code 7, 'Drop realtime audio page 52183'\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.125715\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,225:INFO:Value of channel 1 is 0.123948\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.134183\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,225:INFO:Value of channel 1 is 0.132190\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.142132\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.140410\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.149582\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.147740\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.156259\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.154545\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.162134\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.160298\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.167443\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.165158\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.171803\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.169648\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,227:INFO:Value of channel 0 is 0.175156\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.173238\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,227:INFO:Value of channel 0 is 0.178005\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.175745\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,102:WARNING:Detected continuous 5 0s of channel 0\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,102:WARNING:Detected continuous 5 0s of channel 1\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,103:WARNING:Save to detect0_20170307174627/audio_52511.wav\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,105:WARNING:Continuous 139 0s of channel 0\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,106:WARNING:Continuous 140 0s of channel 1\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e2017-03-07 17:46:28,106:WARNING:Save to detect0_20170307174627/audio_52512.wav\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e...\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe monitoring will keep running.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Adjust-volume-on-Chromebook-or-adjust-the-parameter-of-detector\" /\u003eAdjust volume on Chromebook, or adjust the parameter of detector\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf there is false alarm, adjust the volume on Chromebook to make it louder, or use a smaller value for \u003cb\u003emargin\u003c/b\u003e passed to DetectAudioValue0.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eUse help function to get the docstrings of DetectAudioValue0:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u0026gt;\u0026gt;\u0026gt;help(DetectAudioValue0)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eHelp on function DetectAudioValue0 in module __main__:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eDetectAudioValue0(channels\u003dNone, margin\u003d0.01, continuous_samples\u003d5, duration\u003d3600, dump_samples\u003d48000)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Detects if Chameleon captures continuous audio data close to 0.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e This function will get the audio streaming data from stream server and will\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e check if the audio data is close to 0 by the margin parameter.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e -margin \u0026lt; value \u0026lt; margin will be considered to be close to 0.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e If there are continuous audio samples close to 0 in the streamed data,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e test_server will log it and save the audio data to a wav file.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e E.g.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u0026gt;\u0026gt;\u0026gt; ConnectCrosToLineIn()\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u0026gt;\u0026gt;\u0026gt; p.StartCapturingAudio(6, False)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u0026gt;\u0026gt;\u0026gt; DetectAudioValue0(duration\u003d24*3600, margin\u003d0.001)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e Args:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e channels: Array of audio channels we want to check.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e E.g. [0, 1] means we only care about channel 0 and channel 1.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e margin: Used to decide if the value is closed to 0. Maximum value is 1.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e continuous_samples: When continuous_samples samples are closed to 0, trigger\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e event.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e duration: The duration of monitoring in seconds.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e dump_samples: When event happens, how many audio samples we want to\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e save to file.\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Check-the-recorded-defect-waveform\" /\u003eCheck the recorded defect waveform\u003c/h2\u003e\u003cdiv\u003eUse audacity to view the wav file.\u003c/div\u003e\u003cdiv\u003eThe first wav file is where underrun is detected.\u003c/div\u003e\u003cdiv\u003ePress the black arrow on the left of a channel and select \u003cb\u003eSpectrogram \u003c/b\u003eso the part where waveform dropped to zero is obvious.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017%3A51%3A43.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1488880331794/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017%3A51%3A43.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe second wav file is where normal playback is resumed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017%3A53%3A38.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1488880445437/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017%3A53%3A38.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8769782585095183944"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$pageName":{"$t":"chamelium-audio-streaming"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1542057918281591378"},"published":{"$t":"2017-03-07T11:29:15.780Z"},"updated":{"$t":"2017-03-07T11:29:15.945Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T11:29:15.780Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"IMG_0003.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1542057918281591378"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1542057918281591378"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1542057918281591378"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1542057918281591378"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1542057918281591378"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7790711187239661609"},"published":{"$t":"2017-03-07T11:28:55.356Z"},"updated":{"$t":"2017-03-07T11:28:55.517Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T11:28:55.356Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"IMG_0002.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7790711187239661609"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7790711187239661609"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7790711187239661609"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7790711187239661609"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7790711187239661609"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/730659153433395383"},"published":{"$t":"2017-03-07T11:28:12.365Z"},"updated":{"$t":"2017-03-07T11:28:12.520Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T11:28:12.365Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"IMG_0001.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/730659153433395383"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/730659153433395383"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/730659153433395383"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/730659153433395383"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/730659153433395383"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4353601201927221314"},"published":{"$t":"2017-03-07T09:54:05.274Z"},"updated":{"$t":"2017-03-07T09:54:05.437Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T09:54:05.274Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screenshot from 2017-03-07 17:53:38.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4353601201927221314"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017:53:38.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4353601201927221314"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4353601201927221314"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4353601201927221314"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4353601201927221314"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4197619056957056529"},"published":{"$t":"2017-03-07T09:52:11.627Z"},"updated":{"$t":"2017-03-07T09:52:11.794Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-07T09:52:11.627Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screenshot from 2017-03-07 17:51:43.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4197619056957056529"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8769782585095183944"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017:51:43.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4197619056957056529"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4197619056957056529"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4197619056957056529"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4197619056957056529"}],"author":[{"name":{"$t":"Cheng-Yi Chiang"},"email":{"$t":"cychiang@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WSl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8191782580396249944"},"published":{"$t":"2012-11-15T22:09:01.498Z"},"updated":{"$t":"2017-03-07T02:37:46.951Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-02-25T02:13:25.221Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Firmware Overview and Porting Guide"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ci\u003e\u003cfont color\u003d\"#e06666\"\u003e4/11/2013\u003c/font\u003e\u003c/i\u003e\u003cdiv\u003e\u003ci\u003e\u003cfont color\u003d\"#e06666\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/i\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware-Overview\" /\u003eFirmware Overview\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003eWhen you turn on an embedded device such as a Chromebook, the firmware is the first software that runs. It sets up the machine so that it can load the operating system and then transfers control to the OS. This general pattern applies to any architecture, but there are differences depending on the exact system architecture. For example, on ARM SoCs, it is common to have a boot ROM within the SoC that is capable of booting from various media and may set up basic clocks and peripherals. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOn x86 systems, only the boot system is in SPI flash, and the firmware must deal with every aspect of setting up the machine. Typically, a first stage firmware such as Coreboot (not covered in this guide) is used on x86 to deal with these complexities. On x86, part of the firmware stays resident even after the OS runs, whereas on ARM and most other architectures, the firmware is no longer in memory once control transfers to the OS.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Firmware-Tasks-on-Chrome-OS\" /\u003eFirmware Tasks on Chrome OS\u003c/h3\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe firmware sets up the basic peripherals such as the keyboard, display, mass storage, security chip (TPM), and SPI flash for its own use while it runs the steps to set up the machine. In Chrome OS, the firmware can be updated, so the system first checks whether an update exists and, if so, it loads the update and jumps to execute it. In normal cases, the OS is available and is loaded and started. If a problem exists (for example, the OS is corrupt), the firmware enters recovery mode, which allows the user to insert media with a new OS. In developer mode, users can bypass Chrome OS security, or even the entire OS.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-U-Boot\" /\u003eU-Boot\u003c/h3\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eU-Boot (Universal Boot) is a useful basis for firmware because it has wide architecture support and contains many drivers and subsystems. Chrome OS uses an upstream version of U-Boot and adds its own verified boot infrastructure, which is linked to U-Boot. Many of the drivers and features in U-Boot are used by verified boot. Some of the advantages of U-Boot are\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eIt is a relatively simple boot loader that is easy to modify and adjust to various needs. \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eIt is popular on Power PC and widely available on ARM.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eIt includes a comprehensive command-line interface and environment system that allows for persistent state across reboots.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eSupports a device tree structure that accommodates hardware differences\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eIt supports most common files systems, USB, SPI, I2C, displays, SD/MMC, SCSI, and NAND flash.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eIt has a large upstream community and active mailing list.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eU-Boot was started in 2002 by Wolfgang Denk, who based his work on previous Power PC development (PPCBoot) by Magnus Damm. Wolfgang Denk is the primary maintainer of U-Boot source code (see \u003ca href\u003d\"http://www.denx.de/wiki/U-Boot\" rel\u003d\"nofollow\"\u003ewww.denx.de\u003c/a\u003e). U-Boot is available in the Git tree. Patchwork is used to manage patches to the tree. All development is done in patches sent to the \u003ca href\u003d\"http://lists.denx.de/mailman/listinfo/u-boot\" rel\u003d\"nofollow\"\u003eu-boot mailing list\u003c/a\u003e.\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-U-Boot-Porting-Guide\" /\u003eU-Boot Porting Guide\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eThis guide describes how to port U-Boot to a new Chrome OS platform. Although it specifically describes using U-Boot with Chrome OS, the general process, information, and examples apply to using U-Boot with any Chromium OS. The guide provides a conceptual framework for U-Boot porting tasks as well as task-oriented guidance for the porting process.\u003c/span\u003e\u003c/div\u003e\u003cp\u003e1. \u003cb\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/firmware-porting-guide/1-overview\"\u003eOverview of the Porting Process\u003c/a\u003e\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eHigh-level view of the porting process\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eDevelopment flow\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e2. \u003cb\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/firmware-porting-guide/2-concepts\"\u003eConcepts\u003c/a\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eBoot process\u003c/li\u003e\u003cli\u003eVerified boot\u003c/li\u003e\u003cli\u003eDevelopment flow\u003c/li\u003e\u003cli\u003eFirmware image\u003c/li\u003e\u003cli\u003eFirmware development\u003c/li\u003e\u003cul\u003e\u003cli\u003eUSB firmware download\u003c/li\u003e\u003cli\u003eDevice Firmware Update (DFU) - over the air\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eBundled firmware\u003c/li\u003e\u003cli\u003eSecondary program loader (SPL)\u003c/li\u003e\u003cli\u003eFlat device tree\u003c/li\u003e\u003cli\u003eKeys and signing\u003c/li\u003e\u003cli\u003eEnvironment\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e3.\u003cb\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/firmware-porting-guide/u-boot-drivers\"\u003eDrivers for Chrome OS\u003c/a\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eAudio codec\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eClock\u003c/span\u003e\u003c/li\u003e\u003cli\u003eEthernet\u003c/li\u003e\u003cli\u003eGPIO (General Purpose Input/Output)\u003c/li\u003e\u003cli\u003eI2C (Inter-IC Communications)\u003c/li\u003e\u003cli\u003eI2S (Inter-IC Sound)\u003c/li\u003e\u003cli\u003eKeyboard\u003c/li\u003e\u003cli\u003eLCD (Liquid Crystal Display)\u003c/li\u003e\u003cli\u003eNAND (alternative to SDMMC if supported)\u003c/li\u003e\u003cli\u003ePinmux (Pin Multiplexing)\u003c/li\u003e\u003cli\u003ePower\u003c/li\u003e\u003cli\u003ePWM (Pulse Width Modulation)\u003c/li\u003e\u003cli\u003eSDMMC (Secure Digital Multimedia Memory Card) and eMMC\u003c/li\u003e\u003cli\u003eSPI\u003c/li\u003e\u003cli\u003eSPI Flash \u003cspan style\u003d\"font-size:10pt\"\u003e(Serial Peripheral Interface Flash)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eTimer\u003c/span\u003e\u003c/li\u003e\u003cli\u003eTMU (Thermal Management Unit)\u003c/li\u003e\u003cli\u003eTPM (Trusted Platform Module)\u003c/li\u003e\u003cli\u003eUART (Universal Asynchronous Receiver Transmitter)\u003c/li\u003e\u003cli\u003eUSB host\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eDSTREAM/ DS-5 - debug tools\u003c/span\u003e\u003c/li\u003e\u003cli\u003eICE/Trace - debug tools\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cb\u003eAppendix A.\u003c/b\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:6ae80f627ae80bf6\" class\u003d\"disabled\"\u003eUsing nv-U-Boot on the Samsung Chromebook\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/firmware-porting-guide"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8191782580396249944"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8191782580396249944"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8191782580396249944"}],"author":[{}],"sites$pageName":{"$t":"firmware-porting-guide"},"sites$revision":{"$t":"30"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3666635652154902336"},"published":{"$t":"2017-03-03T06:30:26.455Z"},"updated":{"$t":"2017-03-03T06:30:26.650Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-03T06:30:26.455Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chameleon Video - New Page (4).png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3666635652154902336"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3237111171154818375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium/Chameleon%20Video%20-%20New%20Page%20(4).png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3666635652154902336"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3666635652154902336"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3666635652154902336"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3666635652154902336"}],"author":[{"name":{"$t":"Tony Lin"},"email":{"$t":"tonycwlin@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/678998186334309712"},"published":{"$t":"2010-05-25T23:09:06.558Z"},"updated":{"$t":"2017-03-02T20:03:03.523Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-03-02T20:03:01.803Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Timechart how-to"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eDeveloper builds contain a performance analysis command called \u003ccode\u003eperf\u003c/code\u003e that can be used to create an SVG output file similar to \u003ccode\u003ebootchart\u003c/code\u003e; the chart shows how CPU cycles and I/O wait times are distributed across processes in the system over time.\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003cdiv\u003eBelow is a short primer in four lessons describing how to generate and view output from \u003ccode\u003eperf timechart\u003c/code\u003e.\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Lesson-1---a-simple-example\" /\u003eLesson 1 - a simple example\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eBoot Chromium OS, and open a terminal.\u003c/li\u003e\r\n\u003cli\u003eRun this command:\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003esudo perf timechart record\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eRun your workload. A workload isn't necessary if all you want to see is a chart of an idle system. :-)\u003c/li\u003e\r\n\u003cli\u003eWhen your workload is done, interrupt the process started in step 2 using ^C, or kill -2.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cdiv\u003e\u003cb\u003eExplanation\u003c/b\u003e: Without arguments, \u003ccode\u003eperf timechart record\u003c/code\u003e runs forever gathering data, until stopped by SIGINT. Note that only SIGINT works; SIGTERM will kill the process without producing the necessary output. When the command completes, you'll see two new files: \u003ccode\u003eperf.data\u003c/code\u003e and \u003ccode\u003etrace.out\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e.\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Lesson-2---how-to-generate-and-view-the-chart\" /\u003eLesson 2 - how to generate and view the chart\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eIn the directory where you ran Lesson 1, run this command:\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003esudo perf timechart\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eThe output image will be stored in a file named \u003ccode\u003eoutput.svg\u003c/code\u003e. Use \u003ccode\u003escp\u003c/code\u003e or some equivalent to copy the file to another system for viewing.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cb\u003eTips for viewing\u003c/b\u003e: Some browsers may have trouble displaying the image. The author of timechart recommends the Inkscape image editor:\u003c/div\u003e\r\n\u003cdiv\u003e \u003ca href\u003d\"http://www.inkscape.org/\" rel\u003d\"nofollow\"\u003ehttp://www.inkscape.org/\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003eInkscape does a good job of displaying the fine details, but it may be a bit slow for the large timechart images. You should exercise patience when opening, magnifying, or scroling images.\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Lesson-3---how-to-avoid-using-SIGINT\" /\u003eLesson 3 - how to avoid using SIGINT\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eRun this command: \r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003esudo perf timechart record sleep 5\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eRun a workload that will finish within 5 seconds; for longer workloads, use a more appropriate sleep time in step 1.\u003c/li\u003e\r\n\u003cli\u003eGenerate and view the output as described in Lesson 2.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cb\u003eExplanation\u003c/b\u003e: If there are arguments to \u003ccode\u003eperf timechart record\u003c/code\u003e, the arguments are treated as a command to run as a subprocess of \u003ccode\u003eperf. \u003c/code\u003e\u003ccode\u003eperf\u003c/code\u003e gathers data until the process terminates.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eIf your workload is triggered by a single command, that command can be used in place of 'sleep 5'. Note that if the workload acts as a daemon (that is, forks a child and exits), \u003ccode\u003eperf\u003c/code\u003e will terminate with the parent terminates; this likely isn't what you'd want.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Lesson-4---how-to-get-a-timechart-of-system-boot\" /\u003eLesson 4 - how to get a timechart of system boot\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eInstall bootchart on your workstation. For ubuntu: \u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003esudo apt-get install bootchart\u003c/code\u003e\u003c/div\u003e\u003c/li\u003e\u003cli\u003eemerge and install bootchart onto your DUT: \u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eemerge-$BOARD bootchart \u0026amp;\u0026amp; cros deploy $DUT bootchart\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003ereboot DUT\u003c/span\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003essh $DUT reboot\u003c/code\u003e\u003c/div\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003ebootchart will log events in \u003ccode\u003e/var/log\u003c/code\u003e\u003c/span\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:12.8px\"\u003e\u003ccode\u003e/bootchart/boot-\u0026lt;timestamp\u0026gt;.tgz\u003c/code\u003e. It will collect data until the DUT upstart sequence has fully completed. Retrieve the archive(s) with \u003c/span\u003e\u003c/font\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003escp $DUT:/var/log/bootchart/boot-\u0026lt;timestamp\u0026gt;.tgz /tmp\u003c/code\u003e\u003c/div\u003e\u003c/li\u003e\u003cli\u003egenerate SVG graphics\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\" /\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eF\u003dboot-\u0026lt;timestamp\u0026gt; ; bootchart --format\u003dsvg -o $F.svg $F.tgz\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/li\u003eor in a loop with\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"font-size:12.8px;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e\u003ccode\u003escp $DUT:/var/log/bootchart/boot-*.tgz . \u0026amp;\u0026amp; \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:12.8px;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e\u003ccode\u003efor i in *; do\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:12.8px;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e\u003ccode\u003e F\u003d${i%.tgz}\u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:12.8px;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e\u003ccode\u003e; bootchart --format\u003dsvg -o \"${F}.svg\" \"${F}.tgz\"; \u003c/code\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:12.8px;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e\u003ccode\u003edone\u003c/code\u003e\u003c/span\u003e\u003c/div\u003eThe svg file(s) are ready for viewing.\u003c/ol\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/678998186334309712"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/678998186334309712"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/678998186334309712"}],"author":[{"name":{"$t":"Richard Barnette"},"email":{"$t":"jrbarnette@chromium.org"}}],"sites$pageName":{"$t":"a-brief-perf-how-to"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"XCl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5371735260993034507"},"published":{"$t":"2013-11-25T18:02:15.620Z"},"updated":{"$t":"2017-02-15T22:27:28.432Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-15T22:27:26.347Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"ChromeVox on Desktop Linux"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eMoved to: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/chromevox_on_desktop_linux.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/chromevox_on_desktop_linux.md\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7789018718369490338"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/accessibility/chromevox-on-desktop-linux"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5371735260993034507"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5371735260993034507"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5371735260993034507"}],"author":[{"name":{"$t":"Dominic Mazzoni"},"email":{"$t":"dmazzoni@chromium.org"}}],"sites$pageName":{"$t":"chromevox-on-desktop-linux"},"sites$revision":{"$t":"25"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1333779193152488096"},"published":{"$t":"2015-04-06T23:31:48.764Z"},"updated":{"$t":"2017-02-15T22:27:17.310Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-15T22:27:15.403Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"ChromeVox (for developers)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.9871999999999999;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:13.3333px\"\u003eMoved to: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/chromevox.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/chromevox.md\u003c/a\u003e\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7789018718369490338"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/accessibility/chromevox"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1333779193152488096"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1333779193152488096"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1333779193152488096"}],"author":[{"name":{"$t":"Dominic Mazzoni"},"email":{"$t":"dmazzoni@chromium.org"}}],"sites$pageName":{"$t":"chromevox"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3391506005424173247"},"published":{"$t":"2012-02-28T06:06:19.798Z"},"updated":{"$t":"2017-02-10T02:13:18.310Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-10T02:13:16.499Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Java"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eThe style guide has moved to being checked in to the source tree.\u003c/font\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-See-the-general-Chromium-coding-style-and-the-specific-Chromium-Java-style-guide.\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:normal\"\u003e\u003cfont\u003eSee the general \u003c/font\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md\" style\u003d\"background-color:transparent\"\u003eChromium coding style\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e and the specific \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/styleguide/java/java.md\" style\u003d\"background-color:transparent\"\u003eChromium Java style guide\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1724331143067532806"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/coding-style/java"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3391506005424173247"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3391506005424173247"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3391506005424173247"}],"author":[{}],"sites$pageName":{"$t":"java"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"Wyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4630915186204802210"},"published":{"$t":"2011-01-13T22:51:33.172Z"},"updated":{"$t":"2017-02-09T18:22:17.363Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-09T18:22:15.441Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"OWNERS Files"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"5\"\u003eThis documentation has \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/code_reviews.md\"\u003emoved to the source tree\u003c/a\u003e.\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/owners-files"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4630915186204802210"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4630915186204802210"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4630915186204802210"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$pageName":{"$t":"owners-files"},"sites$revision":{"$t":"32"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4754867422455923710"},"published":{"$t":"2016-12-06T16:13:12.325Z"},"updated":{"$t":"2017-02-06T22:17:03.695Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-02-06T22:17:01.873Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"WebView FAQ for Symantec Certificate Transparency Issue"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:16pt\"\u003e\u003cspan style\u003d\"font-size:20px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Issue:\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStarting with version 53, \u003c/span\u003e\u003ca href\u003d\"https://developer.android.com/reference/android/webkit/WebView.html\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eWebView\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e required that all certificates issued by Symantec Corporation after 1 June 2016 must comply with Chrome's Certificate Transparency policy. This was \u003c/span\u003e\u003ca href\u003d\"https://security.googleblog.com/2015/10/sustaining-digital-certificate-security.html\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eannounced last year\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and implemented in Chrome and WebView 53 which was released at the beginning of September 2016. More information about Certificate transparency is available \u003c/span\u003e\u003ca href\u003d\"https://www.certificate-transparency.org/\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehere\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eDue to a bug in Chrome’s implementation of Certificate Transparency, \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003epages served with Symantec certificates will not load in WebView versions 53 or 54\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e, starting 10 weeks after each WebView release. More details are available\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/detail?id\u003d664177\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ein this public bug\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe chromium-dev group also includes extra information \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/_ZILH704AVU\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehere.\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:16pt\"\u003e\u003cspan style\u003d\"font-size:20px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:20px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGeneral Questions and Answers\u003c/span\u003e\u003c/p\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhich versions of WebView are impacted?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe impacted versions are 53 and 54 builds of Android WebView. Versions 52 and earlier, or 55 and later, do not exhibit the problem. For affected versions, all channels including stable, beta, dev, canary releases are impacted.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003col start\u003d\"2\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen does the issue start occurring?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe issue manifests 10 weeks after the build date. For 53 stable builds, 10 weeks have already passed. For 54, builds will expire as follows:\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"margin-left:69pt\"\u003e\u003ctable style\u003d\"border:none;border-collapse:collapse\"\u003e\u003ccolgroup\u003e\u003ccol width\u003d\"220\" /\u003e\u003ccol width\u003d\"162\" /\u003e\u003c/colgroup\u003e\u003ctbody\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBuild ID\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExpiration Date\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e54.0.2840.68\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e12/27/2016\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e54.0.2840.85\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border-width:1px;border-style:solid;border-color:rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e1/7/2017\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003col start\u003d\"3\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDoes this issue occur if WebView is up to date?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWebview is released approximately every 6 weeks. Since the bug takes effect 10 weeks after a new version is built, up-to-date versions of WebView are not impacted.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003col start\u003d\"4\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhich Android versions are impacted?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAll versions of Android L and above are impacted. This is true even when WebView is provided by Chrome (Android N and above).\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHow can users check their WebView version?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is different for Android versions. For Android L-M, users can check the version using:\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSettings-\u0026gt;Apps-\u0026gt;Show system (top right 3 dots)-\u0026gt;Android System WebView\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor Android N, by default WebView is provided by Chrome. Users can check it in Settings-\u0026gt;Apps -\u0026gt; Chrome\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor Android TV devices, there is no Chrome, so WebView version should be checked just like Android L-M devices. However, the settings menu is slightly different. Use\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSettings-\u0026gt;Apps-\u0026gt;scroll down to Android System WebView\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor Android N devices, where users disable Chrome, WebView is provided by Android WebView package. So version should be checked similar to L-M devices.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are users who enable developer settings and use Canary/Beta channels of Chrome as WebView provider. These users can get the version using Settings-\u0026gt;Apps and their choice of provider.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAndroid watch devices don’t have WebView so are not impacted.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat is required for users to update Webview?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUsers who are signed in to their devices can update WebView through the Play Store. Most users will be updated automatically.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003col start\u003d\"7\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe version numbers in the Play Store for both Android WebView and Chrome start with 54 for me. Is the issue only in WebView, not Chrome?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis issue is only in WebView. However WebView can be provided by Chrome in Android N and above depending on the type of the device. Please see Q#5 for how to find the WebView version for different devices.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHow is Android login process impacted?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSetup Wizard uses Webview while handling Captive portals. This may be broken for portals signed with Symantec certs. \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEnterprise dasher accounts that are hosted on 3rd party WebSites will be broken if they are signed with Symantec certs.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003col start\u003d\"9\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCan users change system clock to an earlier date to workaround Captive portal issues or for setting Dasher account during initial setup?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf blocked by a captive portal, the system clock may still be unset (for example if the device does not have a SIM). If either the date/time is unset, the user will be shown the date/time screen in Setup Wizard UI, where the default date will be Jan 1 of the build year. If the date is earlier than the date for the Certificate Transparency deadline, the issue may not be seen.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe do not suggest changing the time/date as it may cause many other things to be broken.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat happens to Android devices that are not in Google Play ecosystem? Are they impacted?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAndroid WebView is used to provide WebView functionality in non-play ecosystem devices too (for example Amazon Fire devices). These devices may be impacted if they have WebViews built from M53 and M54 releases of Chromium. \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHowever, WebView implementations and updates in such non Play Store devices are beyond Google’s control. OEMs may prefer to fix broken implementations using OTAs for example.\r\n\r\n\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e I have Android N and My WebView using app (Amazon, Paytm, JD Lite, ... ) is broken. The app is suggesting me to update WebView but the link I was referred shows WebView as disabled. What should I do?\r\nIn Android N and above, WebView is distributed using Chrome apk. Please update Chrome. Alternatively, if you don't want to use Chrome, then you can disable it. This will enable WebView.\r\n\r\n\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:16pt\"\u003e\u003cspan style\u003d\"font-size:20px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDeveloper Questions and Answers\u003c/span\u003e\u003c/p\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAre there solutions based on user agent sniffing? \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAffected versions of WebView will fail to connect at the TLS layer, before a user agent is sent. It might be possible to sniff the client at the TLS layer, but it is complex and may not be reliable. For example, CloudFlare has a tool to sniff the clients based on unique patterns that different clients exhibit (such as Safari vs. WebView). We are not aware of a tool that can sniff a particular version of WebView (M53 vs. M55).\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"/\" /\u003eHow can developers suggest updating WebView properly? Is there a sample code?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRequesting users to update WebView is fairly complicated as WebView on Android N is provided by Chrome APK for phones and tablets and further there can be multiple WebView providers for a given device. See below.\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:14.6667px;white-space:pre-wrap\"\u003e\r\n\r\n\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCan app developers take measures to fix the issue?\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe only action WebView developers can take is to ask the user to update WebView. WebView provides an onReceivedSslError() callback, but this does not provide enough information to correctly address the problem. Using this callback to bypass the error is never recommended and \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003eexposes the app to numerous security vulnerabilities\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\r\n\r\n\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:14.6667px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:14.6667px\"\u003eFor apps, is this just a simple matter of prompting users to take the Chrome update? Or, do the apps themselves need to be rebuilt and republished?\r\n\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:14.6667px;white-space:pre-wrap\"\u003eWebView is a system library. Users only need to update WebView, or Chrome (Android N), depending on how WebView is provided. Apps cannot do anything except in #2 above.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:14.6667px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eSample Code For Developers to Check WebView Version\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePlease refer to the source code \u003c/span\u003e\u003ca href\u003d\"https://github.com/ntfschr-chromium/ct_workaround\" style\u003d\"color:rgb(85,26,139);font-family:Arial;font-size:14.6667px;background-color:transparent;white-space:pre-wrap\" rel\u003d\"nofollow\"\u003ehere\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;background-color:transparent;white-space:pre-wrap\"\u003e for an example app that demonstrates how to get the WebView version and ask user to update. \u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/227494585600465320"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/androidwebview/webview-ct-bug"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4754867422455923710"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4754867422455923710"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4754867422455923710"}],"author":[{"name":{"$t":"Sam Birch"},"email":{"$t":"sbirch@chromium.org"}}],"sites$pageName":{"$t":"webview-ct-bug"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3211938387487044830"},"published":{"$t":"2011-05-26T14:16:55.156Z"},"updated":{"$t":"2017-01-27T20:40:46.585Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-27T20:40:44.443Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Experiments"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);line-height:20px\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"border-collapse:collapse;color:rgb(0,0,0);line-height:normal\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eHere's how to hide a feature behind a flag that can be changed from the \u003ca href\u003d\"javascript:void(0);\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\"\u003echrome://flags\u003c/a\u003e page in Chrome, or with a command line flag. We'll use \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ean example from the following revision \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drev\u0026amp;revision\u003d84971\"\u003e84971\u003c/a\u003e which hides the compact navigation bar behind such a flag\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003cul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eFirst, you need to add a string for your command line switch.\u003cbr /\u003eFor example: \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_switches.h?r1\u003d84971\u0026amp;r2\u003d84970\u0026amp;pathrev\u003d84971\" style\u003d\"color:rgb(0,84,136);text-decoration:underline\" target\u003d\"_blank\"\u003echrome_switches.h\u003c/a\u003e \u0026amp; \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_switches.cc?r1\u003d84971\u0026amp;r2\u003d84970\u0026amp;pathrev\u003d84971\" style\u003d\"color:rgb(0,84,136);text-decoration:underline\" target\u003d\"_blank\"\u003echrome_switches.cc\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eThen you need strings to be displayed on the \u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca href\u003d\"javascript:void(0);\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\"\u003echrome://flags\u003c/a\u003e\u003c/span\u003e page for the name and description of your experiment.\u003cbr /\u003eFor example, the two strings with IDs starting with \u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eIDS_FLAGS_ENABLE\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;border-collapse:separate\"\u003e in\u003c/span\u003e: \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/generated_resources.grd?r1\u003d84971\u0026amp;r2\u003d84970\u0026amp;pathrev\u003d84971\" style\u003d\"color:rgb(0,84,136);text-decoration:underline\" target\u003d\"_blank\"\u003egenerated_resources.grd\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eAnd then add all this info to a new entry in the Experiments array.\u003cbr /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eFor example: \u003c/font\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/about_flags.cc?r1\u003d84971\u0026amp;r2\u003d84970\u0026amp;pathrev\u003d84971\" style\u003d\"color:rgb(0,84,136);text-decoration:underline;font-family:arial,sans-serif\" target\u003d\"_blank\"\u003eabout_flags.cc\u003c/a\u003e\u003c/li\u003e\u003cul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eThe first string (e.g., \u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\"compact-navigation\"\u003c/font\u003e\u003c/span\u003e) is an identifier for the preference that will be saved in the user profile based on the settings chosen by the user on the \u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca href\u003d\"javascript:void(0);\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\"\u003echrome://flags\u003c/a\u003e\u003c/span\u003e page.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eThe the resource IDs for the name and description strings.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eThen which OS should expose it.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eAnd finally, the access to the command line flag, using one of the following macros:\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003e\u003cspan style\u003d\"font-family:monospace;font-size:12px;white-space:pre-wrap\"\u003eSINGLE_VALUE_TYPE_AND_VALUE\u003c/span\u003e, \u003cspan style\u003d\"font-family:monospace;font-size:12px;white-space:pre-wrap\"\u003eSINGLE_VALUE_TYPE\u003c/span\u003e, or \u003cspan style\u003d\"font-family:monospace;font-size:12px;white-space:pre-wrap\"\u003e MULTI_VALUE_TYPE\u003c/span\u003e.\u003cbr /\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eAnd finally, use the \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eCommandLine::ForCurrentProcess()-\u0026gt;\u003ca href\u003d\"http://www.google.com/codesearch/p?hl\u003den#h0RrPvyPu-c/base/command_line.cc\u0026amp;q\u003dCommandLine::HasSwitch\u0026amp;sa\u003dN\u0026amp;cd\u003d2\u0026amp;ct\u003drc\" target\u003d\"_blank\"\u003eHasSwitch\u003c/a\u003e(\u0026lt;\u003ci\u003eyour flag\u003c/i\u003e\u0026gt;)\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e to check its state.\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eFor example: \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/tabs/tab_menu_model.cc?r1\u003d84971\u0026amp;r2\u003d84970\u0026amp;pathrev\u003d84971\" style\u003d\"color:rgb(0,84,136);text-decoration:underline\" target\u003d\"_blank\"\u003etab_menu_model.cc\u003c/a\u003e uses it to decide whether we show the Hide toolbar option in the tab contextual menu or not.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/experiments"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3211938387487044830"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3211938387487044830"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3211938387487044830"}],"author":[{"name":{"$t":"Marc-André Decoste"},"email":{"$t":"mad@chromium.org"}}],"sites$pageName":{"$t":"experiments"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8492397350409268191"},"published":{"$t":"2017-01-25T22:27:04.045Z"},"updated":{"$t":"2017-01-25T22:27:04.078Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-25T22:27:04.045Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Flash Usage Trend - Jan 25th, 2017.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8492397350409268191"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/983518581610832010"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/flash-roadmap/flash-usage-trends/Flash%20Usage%20Trend%20-%20Jan%2025th,%202017.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8492397350409268191"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8492397350409268191"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8492397350409268191"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8492397350409268191"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8560979433351832904"},"published":{"$t":"2008-12-08T16:45:18.071Z"},"updated":{"$t":"2017-01-25T17:55:46.092Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-25T17:55:46.081Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"LinuxResourcesAndLocalizedStrings"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"border-collapse:separate\"\u003e\r\n\u003cdiv style\u003d\"margin:6px;padding:0px;min-height:1100px;font-family:Verdana;font-size:10pt;line-height:normal;background-color:rgb(255,255,255)\"\u003e\u003cfont size\u003d\"4\"\u003eResources (and localized strings) on Linux\u003c/font\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eGoals\u003c/b\u003e\u003cbr /\u003e\r\nFind a way to load binary data blobs and localized strings on linux. It's not an explicit goal for us to provide a solution for OSX, but a cross platform solution would be preferred.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eBackground\u003c/b\u003e\u003cbr /\u003e\r\nOn Windows, we store resources in dll files. They are compiled into dll files using Visual Studio's resource compiler (rc.exe) which read .rc files. .rc files are just lists of resource ids and the actual file on disk that they represent or an inlined string (for translations). From code we reference the resource using the resource ids which are found in a header file. For localized strings, we use GRIT to generate the .rc files.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nMost resources are compiled directly into chrome.dll. There are two exceptions: theme images are in theme.dll and languages are in locale specific dlls (e.g., en-US.dll). Having a separate theme.dll was to make it easier to transition to a real theming system and to make it easier for UI developers to test changes to the theme (by not having to re-link chrome.dll). Locale data is in a separate dll because we would like to reduce the chrome download size by providing localized builds of chrome. One would only need to download the strings for languages that are of interest. This doesn't save much in download right now, but if ICU data files could be split into chunks, then it could save \u0026gt; 1mb of download.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nOn Linux, data resources are normally just kept as files on disk that are read during runtime. The location of these resources are normally hard-coded into the binary at compile time. Localized strings are normally handled using gettext. From code, gettext uses the English string to reference the localized string. gettext has another interface called catgets which can be used to reference strings using a resource id. This is pretty similar to what we do on Windows.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eRequirements\u003c/b\u003e\u003cbr /\u003e\r\nThe standard Linux method of reading data resources from disk seems like a non-starter because we use lots of small image files to create the Chromium UI. We could possibly work around this by image spriting, but we would still read more files from disk that windows currently is. Also, while catgets might be a good solution for localized strings, it doesn't handle binary data.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eDesign Ideas\u003c/b\u003e\u003cbr /\u003e\r\nRoll our own resource handling. This would involve a disk format for data resources and strings, and code to load the file and read ranges of bytes from the file. To create the disk format, we would use a python script that reads the .rc files at compile time and generates our data file. This would be similar to the Visual Studio resource compiler except it wouldn't be able to put data directly into the dll (shared object). The code to load the file and read a range of bytes would exist in base so we can load data resources (like the tld data file) in sub module tests.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe main drawback is that we won't be able to bundle binary data blobs directly into the chrome binary. We currently do this for everything other than the theme images and localized strings. Putting the data directly into chrome makes it easier for the renderer process to access resources because it doesn't have to go to disk. To work around this, on linux we would have to load the data resource in the renderer process before sandboxing it. This is similar to what we already do for localized resources in the renderer process.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThis has the benefit that we don't need to maintain different resource file definitions across platforms, it would be sufficient to update the main .rc file. We also don't have to change any of the callers or the current use of resource IDs throughout the code base. We just need to change ResourceBundle to handle the new data file.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThis would also work cross platform, so we may eventually be able to move Windows over to it so we all use the same system.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nData File Format version 4\u003cbr /\u003e\r\n uint32 file version\u003cbr /\u003e\r\n uint32 number of resources in the file\u003cbr /\u003e\r\n uint8 encoding of the text resources in the file\u003cbr /\u003e\r\n \u0026lt;uint16 resource id, uint32 file offset\u0026gt;*\u003cbr /\u003e\r\n two zero bytes, uint32 end of last file\u003cbr /\u003e\r\n \u0026lt;resource data\u0026gt;*\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nUnsigned ints will be little endian byte order and strings will be encoded in conformity to the encoding field. Valid encodings correspond to the following values:\u003cbr /\u003e\r\n 0 -\u0026gt; Binary: PAK file is not expected to contain any text resources.\u003cbr /\u003e\r\n 1 -\u0026gt; UTF8: PAK file may contain binary data, but all text resources are encoded in UTF8.\u003cbr /\u003e\r\n 2 -\u0026gt; UTF16: PAK file may contain binary data, but all text resources are encoded in UTF16.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe length of each resource can be computed by subtracting from the start of the next resource. To aid in computing the last resource, we include an extra index entry with the resource id set to zero.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cb\u003eOther Ideas\u003c/b\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nLeave everything in code.\u003cbr /\u003e\r\nThis would work for data blobs, but it doesn't match the current method of having a separate dll per locale. We could possibly put all the locale strings into chrome.dll, but this would require more work for indexing the values properly (i.e., GRIT would no longer work). It would also make it harder to transition to a single language download.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nLeave everything in code, but in .so files (dlls)\u003cbr /\u003e\r\nEach data resource would become a .c file which we compile into a single .so. This is very similar to the current approach on Windows and would allow us to embed data resources into the main chrome.so. This might also be a bit faster to load because it doesn't have to parse the data file index. The only drawback to this approach is that it loads data as code. On Windows, you can load a dll with \u003cspan style\u003d\"font-family:Courier New\"\u003eLoadLibraryEx(LOAD_AS_DATAFILE)\u003c/span\u003e which prevents code execution in the case of a corrupt file. I don't know of a way to do something similar on Linux.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/linuxresourcesandlocalizedstrings"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8560979433351832904"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8560979433351832904"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8560979433351832904"}],"author":[{"name":{"$t":"Tony Chang"},"email":{"$t":"tony@chromium.org"}}],"sites$pageName":{"$t":"linuxresourcesandlocalizedstrings"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8324741405252643576"},"published":{"$t":"2012-08-15T20:50:23.537Z"},"updated":{"$t":"2017-01-24T21:05:07.332Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-24T21:05:04.040Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tab Content Capture into MediaStreams"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"5\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003e** This launched as of Chrome 31. Documentation: \u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cb\u003ehttps://developer.chrome.com/extensions/tabCapture **\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eProposal Date\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAugust 14th, 2012\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eWho is the primary contact for this API?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003emfoltz@chromium.org\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eWho will be responsible for this API? (Team please, not an individual)\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cb\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"mailto:mfoltz@google.com\"\u003emfoltz@\u003c/a\u003echromium.org\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e, \u003c/span\u003e\u003ca href\u003d\"mailto:keiger@google.com\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003ekeiger@google.com\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"mailto:markdavidscott@google.com\"\u003emarkdavidscott@google.com\u003c/a\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eOverview\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThe proposed APIs enable tab output to be captured as a media stream, and transmitted using WebRTC. Supporting APIs are also defined to notify and query the capture status for tabs.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eUse cases\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThis API enables a special form of screencasting, but in which users are able to share the contents of a tab rather than sharing their entire desktop. This avoids a number of issues with desktop sharing, such as the presence of icons, taskbars, window chrome, pop-ups, and other elements that it is often not desirable (or in some cases, even embarassing - e.g. when a new mail notification or IM shows up for all to see) to share.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThis API also enables the creation of WebRTC-based screencasting approaches, allowing the receiver of such content to run in a standard browser, entirely plug-in (and extension) free.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eVersus desktop screencasting, this API enables multitasking use cases, since switching active tabs doesn’t impact the content that’s being transmitted.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFinally, this can later enable multi-screen applications that function by creating multiple tabs with one or more of those tabs being screencast for display on a different surface.\u003c/span\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eDo you know anyone else, internal or external, that is also interested in this API?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eWe are aware of 3 projects at Google that have an interest in this functionality, and believe that it will be externally interesting to many others.\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eCould this API be part of the web platform?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eWe believe that this functionality is useful both for extensions and the open web - but they are independently useful for each.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThe extension approach to these APIs, proposed here, allows for the capture of the contents of any tab, without any updates needed to the content displayed in the tab. Thus, any existing content or application can be accommodated.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eBy contrast, a web platform approach (which we hope to pursue later after proving the approach here) is also useful, but needs significantly more restrictions around security and privacy (e.g. limiting access to elements that are owned by the site calling the API). This lends to a different set of use cases (e.g. the multiscreen cases).\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eWe believe that extension API work and experience will help in making a better proposal for the open web in the relatively near future.\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:normal;margin-right:12pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eDo you expect this API to be fairly stable? How might it be extended or changed in the future?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eYes, we believe that this API will be fairly stable, since it is modelled after an existing API (getUserMedia) and has narrowly defined semantics.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eExtensions or changes to incorporate other capture scopes - e.g. window-level or desktop-level - is possible but should not result in significant changes to the API.\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eIf multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eNothing inherently prevents multiple tabs from being captured independently, but there may be implementation limits on how many tabs can be captured simultaneously (and in our initial implementation, we believe that capturing 1 tab is sufficient). To address this, the proposed API includes a notification to indicate when tab capture status changes so we can notify an application if a tab is no longer being captured due to a newer conflicting action.\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eList every UI surface belonging to or potentially affected by your API:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThe proposed APIs don’t expose any new UI surfaces to extensions. It is proposed that we provide a visual indication to the user when a tab is being captured, though the exact design for this is still under consideration. One proposed approach is a color or animation on the tab itself or its favicon, another is use of the existing mechanism used by WebRTC to indicate when camera capture is active (this may be preferred for consistency).\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eActions taken with extension APIs should be obviously attributable to an extension. Will users be able to tell when this new API is being used? How?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003ePer the above, we plan to have a visual indicator of the tab(s) being captured. Hovering over this indicator will indicate which extension is performing the capture.\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eHow could this API be abused?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFrom a security/privacy perspective, since this API enables tab contents to be captured, it could be used to capture user browsing and to send that as a video stream to an external site. However, since we require the tabs permission, this is not substantively different from capturing the HTML/JS content of a tab (in fact, it’s less effective than the latter). It’s also no more sensitive than the tab snapshot API in terms of what it has access to.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFrom a security perspective, creating a video stream that’s targetted at an arbitrary destination coud be used in DDOS-type attacks, though this is not significantly more effective than sending a large number of HTTP requests or transmitting a large binary file.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFrom a performance perspective, too many simultaneous tabs being captured could impact performance. To mitigate this, we plan to limit the number of tabs that can be captured simultaneously (starting with a value of 1).\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eImagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e1) Per prior answer, scrape screen and send it to a malicious site.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e2) Per prior answer, create “fake” video stream and use it for DDOS attack.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e3) Per prior answer, create a bunch of bogus tab captures and send them somewhere meaningless, in an attempt to waste resources and trigger a crash.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat security UI or other mitigations do you propose to limit evilness made possible by this new API?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003ePer the above, we’re proposing a visual indicator for tabs that are being captured which identifies the extension performing the capture, and to ensure that the user is aware that capture is ongoing.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eAlright Doctor, one last challenge: \u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eCould a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eNo; no permanent changes are possible as a result of the proposed API.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eHow would you implement your desired features if this API didn't exist?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eExisting alternatives depending on building native applications or using dangerous NPAPI plug-ins with full system access.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eDraft Manifest Changes \u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eAt this point in time, we believe that the tabs permission is sufficient. We’re very open to input and advice on this, though!\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eDraft API spec\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003egetTabMedia\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e chrome.experimental.capture.getTabMedia\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e(integer tabId,\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e object options, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003efunction callback\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e)\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCaptures the visible area of the tab with the given tabId. Extensions must have the host permission for the given tab as well as the “tabs” permission to use this method.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eParameters:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003etabId (optional integer): The tabId of the tab to capture. Defaults to the active tab.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003eoptions (optional object): Configures the returned media stream.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003evideo (boolean): Whether to return video (default true)\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003eaudio (boolean): Whether to return audio (default true)\u003c/span\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:72pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ecallback (function): Called when the media stream is ready.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCallback function:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003efunction (stream)\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003estream (optional LocalMediaStream): The LocalMediaStream that was created, or null if no stream was created. chrome.extension.lastError will be set if the stream could not be created (see below)\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eErrors:\u003c/span\u003e\u003cbr /\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e“Permission Denied” - The user did not grant permission for the tab to be captured\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e“Busy” - Capture resources are occupied by an existing capture operation (i.e., we can’t capture two tabs at once)\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e“Closed” - The tab was closed before the media stream could be created.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSee below for details on the LocalMediaStream structure.\u003c/span\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eonTabCaptured\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003echrome.experimental.capture.\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eonTabCaptured\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.addListener(\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003efunction(object captureInfo)\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e { ... })\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eEvent fired when the capture status of a tab changes. This allows extension authors to keep track of the capture status of tabs, to keep UI elements like page actions and infobars in sync.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eParameters:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003ecaptureInfo (object): Details of the change.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003etabId (integer): The id of the tab whose status changed.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003estatus (string): The new capture status of the tab, one of “requested”, “cancelled”, “pending”, “active”, “muted”, “stopped”\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStatus state diagram is attached.\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Times;font-size:medium;font-weight:normal\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003egetCapturedTabs\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003e chrome.experimental.capture.getCapturedTabs(function callback)\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReturns a list of tabs that have requested capture or are being captured, i.e. status !\u003d stopped and status !\u003d cancelled. This allows extensions to inform the user that there is an existing tab capture that would prevent a new tab capture from succeeding (or, to prevent redundant requests for the same tab).\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCallback function:\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003efunction(\u0026lt;array of CaptureInfo\u0026gt; result) { ... }\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCaptureInfo is as specified above.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eOpen questions\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e- Confirm permissions approach stated above\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e- Can a WebKit object be returned through an extension API?\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e- Control over aspect ratio, clipping, scaling of resulting media?\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/333592083211368911"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8324741405252643576"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4921463921044203350/6"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8324741405252643576"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8324741405252643576"}],"author":[{"name":{"$t":"Mark Foltz"},"email":{"$t":"mfoltz@chromium.org"}}],"sites$pageName":{"$t":"webrtc-tab-content-capture"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4028483356537411193"},"published":{"$t":"2015-09-14T09:50:40.508Z"},"updated":{"$t":"2017-01-24T00:40:50.825Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-24T00:40:49.311Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Startup tracing with memory profiling"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cb\u003eRelated wiki pages\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eSee \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs\" style\u003d\"font-size:10pt;background-color:transparent\"\u003ethis page\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e for general information on startup tracing.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eSee \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/README.md\"\u003ethis page\u003c/a\u003e for general information about memory tracing.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThere are two ways to perform memory tracing at startup:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cb\u003eSimple way with default configuration (one memory dump every 250 ms., one detailed memory dump every 2 s.)\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e$chrome --no-sandbox \\\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e --trace-startup\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003d-*,disabled-by-default-memory-infra\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \\\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e --trace-startup-file\u003d/tmp/trace.json \\\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e --trace-startup-duration\u003d7\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThen just load /tmp/trace.json in chrome://tracing\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cb\u003eAdvanced, memory tracing configuration\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eIf you need more advanced configuration (e.g., higher granularity dumps, no need for detailed memory dumps) specify a custom trace config file, as follows:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e$ cat \u0026gt; /tmp/trace.config\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e{\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \"startup_duration\": 4,\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \"result_file\": \"/tmp/trace.json\",\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \"trace_config\": {\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \"included_categories\": [\"disabled-by-default-memory-infra\"],\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \"excluded_categories\": [\"*\"],\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e \"memory_dump_config\": {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e \"triggers\": [\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e {\"mode\":\"light\", \"periodic_interval_ms\": 50},\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e {\"mode\":\"detailed\", \"periodic_interval_ms\": 1000}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e ]\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(255,255,0)\"\u003e }\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e }\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e$chrome --no-sandbox \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e--trace-config-file\u003d/tmp/trace.config\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7348747059329133392"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4028483356537411193"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4028483356537411193"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4028483356537411193"}],"author":[{"name":{"$t":"Primiano Tucci"},"email":{"$t":"primiano@chromium.org"}}],"sites$pageName":{"$t":"startup-tracing-with-memory-profiling"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"Xyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2259645027010646724"},"published":{"$t":"2011-01-25T22:04:54.368Z"},"updated":{"$t":"2017-01-14T01:25:20.214Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-14T01:25:17.980Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"How to Add New Features (without bloating RenderView/RenderViewHost/WebContents)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eProblem\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHistorically, new features (i.e. autofill to pick an example) have been added by bolting on their code to \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderView\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003ein the renderer process, and \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewHost\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003ein the browser process. If a feature was handled on the IO thread in the browser process, then its IPC messages were dispatched in \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserMessageFilter\u003c/font\u003e. \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewHost\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003ewould often dispatch the IPC message only to call \u003cfont face\u003d\"'courier new', monospace\"\u003eWebContents\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003e(through the \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewHostDelegate\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003einterface), which would then call to another piece of code. All the IPC messages between the browser and renderer were declared in a massive \u003cfont face\u003d\"'courier new', monospace\"\u003erender_messages_internal.h\u003c/font\u003e. Touching each of these files for every feature meant that the classes became bloated.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eSolution\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eWe have added helper classes and mechanisms for filtering IPC messages on each of the above threads. This makes it easier to write self contained features.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eRenderer side:\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you want to filter and send IPC messages, implement the \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewObserver\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003einterface (\u003cfont face\u003d\"'courier new', monospace\"\u003econtent/public/renderer/render_view_observer.h)\u003c/font\u003e. The \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewObserver\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003ebase class takes a \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderView\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003eand manages the object's lifetime so that it's tied to \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderView\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003e(this is overridable). The class can then filter and send IPC messages, and additionally gets notifications about frame loading and closing, which many features need. As an example, see \u003cfont face\u003d\"'courier new', monospace\"\u003eExtensionHelper \u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e(\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eextensions/renderer/extension_helper.h)\u003c/font\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf your feature has part of the code in WebKit, avoid having callbacks go through \u003cfont face\u003d\"'courier new', monospace\"\u003eWebViewClient\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003einterface so that we don't bloat it. Consider creating a new WebKit interface that the WebKit code calls, and have the renderer side class implement it. As an example, see \u003cfont face\u003d\"'courier new', monospace\"\u003eWebAutoFillClient\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ethird_party/WebKit/public/WebAutoFillClient.h\u003c/font\u003e).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eBrowser UI thread:\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eWebContentsObserver\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtent/public/browser/web_contents_observer.h\u003c/font\u003e) interface allows objects on the UI thread to filter IPC messages and also gives notifications about frame navigation. As an example, se\u003cfont size\u003d\"2\"\u003ee \u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003eTabHelper\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre;background-color:transparent\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003echrome/browser/extensions/tab_helper.h\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e).\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003eOther browser threads:\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo filter and send IPC messages on other browser threads, such as IO/FILE etc, implement \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserMessageFilter\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003einterface (\u003cfont face\u003d\"'courier new', monospace\"\u003econtent/public/browser/browser_message_filter.h\u003c/font\u003e). The \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderProcessHostImpl\u003c/font\u003e object creates and adds the filters in its \u003cspan style\u003d\"font-family:monospace;white-space:pre;font-size:medium\"\u003eCreateMessageFilters\u003c/span\u003e function.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn general, if a feature has more than a few IPC messages, they should be moved into a separate file (i.e. not be added to \u003cfont face\u003d\"'courier new', monospace\"\u003erender_messages_internal.h\u003c/font\u003e). This also helps with filtering messages on a thread other than the IO thread. As an example, see \u003cfont face\u003d\"'courier new', monospace\"\u003econtent/common/d\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px;background-color:transparent\"\u003eatabase\u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e_messages.h\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e. This allows their filter, \u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eDatabaseMessageFilter\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e, to easily send the messages to the file thread without having to specify their IDs in multiple places.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Times New Roman;font-size:medium\"\u003e\u003cpre\u003evoid \u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px;white-space:normal\"\u003eDatabase\u003c/span\u003eMessageFilter::OverrideThreadForMessage(\r\n const IPC::Message\u0026amp; message,\r\n BrowserThread::ID* thread) {\r\n if (IPC_MESSAGE_CLASS(message) \u003d\u003d \u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333px;white-space:normal\"\u003eDatabase\u003c/span\u003eMsgStart)\r\n *thread \u003d BrowserThread::FILE;\r\n}\u003c/pre\u003e\u003cpre\u003e\u003cbr /\u003e\u003c/pre\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1280500072215839045"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture/how-to-add-new-features"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2259645027010646724"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2259645027010646724"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2259645027010646724"}],"author":[{"name":{"$t":"John Abd-El-Malek"},"email":{"$t":"jam@chromium.org"}}],"sites$pageName":{"$t":"how-to-add-new-features"},"sites$revision":{"$t":"16"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3503802239581606704"},"published":{"$t":"2016-01-29T01:45:04.052Z"},"updated":{"$t":"2017-01-14T00:43:11.727Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-14T00:43:11.712Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WebBluetoothThroughBluetoothAndroid.svg"},"summary":{},"content":{"type":"image/svg+xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3503802239581606704"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2875570283085876771"},{"rel":"alternate","type":"image/svg+xml","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3503802239581606704"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3503802239581606704"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3503802239581606704"},{"rel":"edit-media","type":"image/svg+xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3503802239581606704"}],"author":[{"name":{"$t":"Vincent Scheib"},"email":{"$t":"scheib@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2156309445971946711"},"published":{"$t":"2016-01-29T01:45:01.100Z"},"updated":{"$t":"2017-01-14T00:40:30.694Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-14T00:40:30.675Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WebBluetoothThroughBluetoothAndroid.dia"},"summary":{},"content":{"type":"application/x-gzip","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2156309445971946711"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2875570283085876771"},{"rel":"alternate","type":"application/x-gzip","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.dia"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2156309445971946711"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2156309445971946711"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2156309445971946711"},{"rel":"edit-media","type":"application/x-gzip","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2156309445971946711"}],"author":[{"name":{"$t":"Vincent Scheib"},"email":{"$t":"scheib@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8123993219853087753"},"published":{"$t":"2009-01-11T04:28:08.756Z"},"updated":{"$t":"2017-01-13T22:42:45.920Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-22T16:28:09.589Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Quick reference"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb style\u003d\"background-color:rgb(255,255,0)\"\u003eTHIS PAGE IS DEPRECATED.\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eThis page provides a quick reference for common development related commands.\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Checking-the-status-of-your-repository\" /\u003eChecking the status of your repository\u003c/h3\u003e\r\n\u003cblockquote\u003e\r\n\u003cp\u003e\u003cb\u003eMain status command:\u003c/b\u003e\u003ctt\u003e svn status\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cblockquote\u003eThis command shows you the status of the repository in the current directory and all subdirectories. It does not check directories outside the current one. \r\n\u003cpre\u003eC:\\chrome\\src\u0026gt;svn status\u003cbr /\u003e? chrome\\mypatch.diff\u003cbr /\u003eM chrome\\browser\\navigation_controller.cc\u003cbr /\u003eC chrome\\browser\\navigation_controller.h\u003c/pre\u003e\r\n\u003cp\u003eNote that this does not show changelists. Use\u003ctt\u003e gcl opened \u003c/tt\u003eor\u003ctt\u003e gcl changes \u003c/tt\u003eto see those.\u003c/p\u003e\r\n\u003cp\u003e\u003cb\u003eKey of common status codes:\u003c/b\u003e \"?\" this file is not added to the repository, \"A\" this file is being added, \"M\" this file is modified, \"C\" there is a conflict (see \"if you get conflicts\" below on fixing this).\u003c/p\u003e\r\n\u003c/blockquote\u003e\r\n\r\n\r\n\u003cp\u003e\u003cb\u003eHelper commands:\u003c/b\u003e gcl provides a few commands to only show parts of the subversion status:\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ctt\u003egcl opened \u003c/tt\u003eshows modified files and which changelists they belong to, if any.\u003c/li\u003e\r\n\u003cli\u003e\u003ctt\u003egcl nothave \u003c/tt\u003eshows files not under version control.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\r\n\u003cp\u003e\u003cb\u003eShow modifications:\u003c/b\u003e\u003ctt\u003e svn diff\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eWith no extra arguments, this creates a diff of all modified files in the current and child directories relative to your last checkout.\u003c/li\u003e\r\n\u003cli\u003e\u003ctt\u003esvn diff \u003ci\u003e\u0026lt;filename\u0026gt;\u003c/i\u003e \u003c/tt\u003eshows a diff for the given file.\u003c/li\u003e\r\n\u003cli\u003eSee also \"Managing changelists\" below.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/blockquote\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Syncing-your-checkout\" /\u003eSyncing your checkout\u003c/h3\u003e\r\n\u003cblockquote\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo update your checkout:\u003c/b\u003e\u003ctt\u003e gclient sync\u003c/tt\u003e\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eFor a faster update, use the -j / --jobs flag to update multiple repositories in parallel, for example: \u003cspan style\u003d\"font-family:monospace\"\u003egclient sync --jobs 12\u003c/span\u003e\u003c/li\u003e\u003cli\u003eBe sure to run this command within the repository (the root of your checkout or any other svn-managed directory). The \"Debug\" and \"Release\" directories aren't under version control and won't work.\u003c/li\u003e\r\n\u003cli\u003eUnder Windows, it's best to exit Visual Studio before syncing. It will not pick up changes to property sheets (\u003ctt\u003e.vsprops\u003c/tt\u003e) while it's running, which can cause strange compiler errors.\u003c/li\u003e\r\n\u003cli\u003e\u003ci\u003eDon't\u003c/i\u003e use\u003ctt\u003e svn update\u003c/tt\u003e. It will only update the current repository. A Chromium checkout consists of multiple repositories, which gcl tracks simultaneously.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eIf you get conflicts:\u003c/b\u003e Conflicts denoted by a \"C\" in the status list, and indicate that both you and somebody else has changed the same code. After you update the file and remove the conflict markers, run\u003ctt\u003e svn resolved \u003ci\u003e\u0026lt;filename\u0026gt;\u003c/i\u003e \u003c/tt\u003eremove the conflict flag. You won't be able to check in with the conflict flag set.\u003c/p\u003e\r\n\r\n\r\n\u003c/blockquote\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Adding-editing-and-reverting\" /\u003eAdding, editing, and reverting\u003c/h3\u003e\r\n\u003cblockquote\u003e\r\n\u003cp\u003eUnlike some version control systems such as Perforce, Subversion doesn't require you to do anything special to begin editing a file. Just edit it.\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo add a new file to Subversion:\u003c/b\u003e\u003ctt\u003e svn add \u003ci\u003e\u0026lt;filename\u0026gt;\u003c/i\u003e\u003c/tt\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo add a new file to the build: \u003cspan style\u003d\"font-weight:normal\"\u003eFind the \u003cspan style\u003d\"font-family:monospace\"\u003e.gyp\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e file for the target you are modifying and add the new file into the \u003c/font\u003esources \u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003elist.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eTo revert a single file:\u003c/b\u003e\u003ctt\u003e svn revert \u003ci\u003e\u0026lt;filename\u0026gt;\u003c/i\u003e\u003c/tt\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo recursively revert all files a directory:\u003c/b\u003e\u003ctt\u003e svn revert -R \u003ci\u003e\u0026lt;directory\u0026gt;\u003c/i\u003e \u003c/tt\u003e (you can use \".\" for the current directory).\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo revert every file in your checkout with extreme prejudice:\u003c/b\u003e\u003ctt\u003e gclient revert\u003c/tt\u003e\u003c/p\u003e\r\n\r\n\u003c/blockquote\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Managing-changelists\" /\u003eManaging changelists\u003c/h3\u003e\r\n\u003cblockquote\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo create or modify a changelist:\u003c/b\u003e\u003ctt\u003e gcl change \u003ci\u003e\u0026lt;changename\u0026gt;\u003c/i\u003e\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eThe name is used only on your local computer to identify your change, so give it any name that will help you remember.\u003c/li\u003e\r\n\u003cli\u003eIf you don't specify a name, a random one will be created for you.\u003c/li\u003e\r\n\u003cli\u003eAfter executing this command, your editor will open and you will be able to modify the changelist description and move files in and out of the changelist by copying and pasting their names.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo list all changelists:\u003c/b\u003e\u003ctt\u003e gcl changes\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cblockquote\u003e\r\n\u003cp\u003eThis lists all files in all changes, even outside of the current directory and its subdirectories.\u003c/p\u003e\r\n\u003cpre\u003eC:\\chrome\\src\\chrome\\browser\u0026gt;gcl changes\u003cbr /\u003e--- Changelist mychange\u003cbr /\u003eM chrome\\browser\\navigation_controller.cc\u003c/pre\u003e\r\n\u003cp\u003eThis does not show files not in any changelist. Use\u003ctt\u003e gcl opened \u003c/tt\u003eto see those as well.\u003c/p\u003e\r\n\u003c/blockquote\u003e\r\n\r\n\r\n\u003cp\u003e\u003cb\u003eTo see a diff of a changelist:\u003c/b\u003e\u003ctt\u003e gcl diff \u003ci\u003e\u0026lt;changename\u0026gt;\u003c/i\u003e\u003c/tt\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo delete a changelist:\u003c/b\u003e\u003ctt\u003e gcl delete \u003ci\u003e\u0026lt;changename\u0026gt;\u003c/i\u003e\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cblockquote\u003eThis does not actually revert the files in the changelist, it leaves the files in their current state, just outside of any changelist.\u003c/blockquote\u003e\r\n\r\n\r\n\r\n\u003c/blockquote\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Review-and-commit\" /\u003eReview and commit\u003c/h3\u003e\r\n\u003cblockquote\u003e\r\n\r\n\u003cp\u003e\u003cspan style\u003d\"font-style:italic\"\u003ePlease see the \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/contributing-code\"\u003e\u003cspan style\u003d\"font-style:italic\"\u003econtributing code\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-style:italic\"\u003e page for full details.\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo upload a changelist for review:\u003c/b\u003e\u003ctt\u003e gcl upload \u003cspan style\u003d\"font-style:italic\"\u003e\u0026lt;changename\u0026gt;\u003c/span\u003e\u003c/tt\u003e\r\n\u003c/p\u003e\r\n\u003cblockquote\u003eThis may prompt your for a username and password. Use a Google login (such as your Gmail address and password). Chromium team members should use their full \"@chromium.org\" address.\r\n\u003c/blockquote\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo see your open reviews:\u003c/b\u003e Go to \u003ca href\u003d\"http://codereview.chromium.org/\"\u003ehttp://codereview.chromium.org/\u003c/a\u003e and log in. You will see you uploaded, unsubmitted patches as well as patches that others have requested you to review.\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo request review:\u003c/b\u003e Go to the patch on your review page and select \"Edit issue\" on the left (you may need to click on \"log in\" to see these commands). Enter the email address of the reviewer, any additional message (this is optional, your changelist description will also be included in the email), and press \"Update issue\".\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eTo submit a changelist:\u003c/b\u003e If you don't have commit access, you should ask your reviewer to submit the patch for you. If you do have commit access:\u003ctt\u003e gcl commit \u003cspan style\u003d\"font-style:italic\"\u003e\u0026lt;changename\u0026gt;\u003c/span\u003e\u003c/tt\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Further-documentation\" /\u003eFurther documentation\u003cbr /\u003e\u003c/h3\u003e\u003cdiv style\u003d\"margin-left:40px\"\u003eYou can look at the documentation directly with:\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u003cspan\u003e \u003c/span\u003egcl help\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003eand\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u003cspan\u003e \u003c/span\u003epython /path_to_depot_tools/depot_tools/release/upload.py --help\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e(\u003cspan style\u003d\"font-family:courier new,monospace\"\u003egcl\u003c/span\u003e will pass through all your arguments to \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eupload.py\u003c/span\u003e)\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cblockquote\u003e\r\n\u003ctt\u003e\r\n\r\n\u003c/tt\u003e\u003c/blockquote\u003e\r\n\r\n\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/quick-reference"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8123993219853087753"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8123993219853087753"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8123993219853087753"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$pageName":{"$t":"quick-reference"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"XSl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"},"published":{"$t":"2008-08-30T19:43:48.053Z"},"updated":{"$t":"2017-01-12T03:36:04.487Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-12T03:36:01.348Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"For Testers"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Reporting-Bugs\" /\u003eReporting Bugs\u003c/h4\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/bug-reporting-guidelines\"\u003eBug reporting guidelines and how to report bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://www.chromium.org/glossary\"\u003eGlossary\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/enable-logging\"\u003eEnable logging\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs\"\u003eRecording traces\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Contributing\" /\u003eContributing\u003c/h4\u003e\u003c/div\u003e\u003cul style\u003d\"font-size:13.3333330154419px\"\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list\"\u003eFind duplicate bugs\u003c/a\u003e \u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?q\u003dstatus:Unconfirmed\" target\u003d\"_blank\"\u003eConfirm unconfirmed bugs \u003c/a\u003e \u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d2\u0026amp;q\u003d+os:mac+status:unconfirmed\u0026amp;colspec\u003dID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS\u0026amp;cells\u003dtiles\"\u003eConfirm unconfirmed Mac bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dos:Linux+status:unconfirmed\u0026amp;colspec\u003dID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS\u0026amp;x\u003dmstone\u0026amp;y\u003darea\u0026amp;cells\u003dtiles\"\u003eConfirm unconfirmed Linux bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:47b7501e05b5377c\" class\u003d\"disabled\"\u003eHelp us by creating reduced test cases\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d1\u0026amp;q\u003dos:mac+status:fixed\u0026amp;colspec\u003dID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS\u0026amp;x\u003dmstone\u0026amp;y\u003darea\u0026amp;cells\u003dtiles\"\u003eVerify Mac fixed bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d1\u0026amp;q\u003dos:Linux+status:fixed\u0026amp;colspec\u003dID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS\u0026amp;x\u003dmstone\u0026amp;y\u003darea\u0026amp;cells\u003dtiles\"\u003eVerify Linux fixed bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing\"\u003eFrontend testing\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:27d7d6cc5eb76945\" class\u003d\"disabled\"\u003eBackend testing\u003cbr /\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/faft\"\u003eFirmware testing\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/installer\"\u003eInstaller\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3087306851372487833"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"for-testers"},"sites$revision":{"$t":"24"}},{"gd$etag":"\"Wyl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5842750681016496414"},"published":{"$t":"2014-05-08T22:13:37.021Z"},"updated":{"$t":"2017-01-12T00:11:49.266Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-12T00:11:46.037Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"FrameViewer How-To"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-wiltzius-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;font-weight:normal;background-color:transparent\"\u003e\u003ci\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003ewiltzius@\u003c/i\u003e\u003c/span\u003e\u003c/h1\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor a web application to respond smoothly to user touch input the application needs to receive input events in JavaScript, react to them, and then allow time for the browser to render any changes made to the page -- all within a 16ms frame budget.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis can be challenging, and it can be instructive to look under the hood to see what the browser is doing each frame. This is what Chromium’s Frame Viewer does, although it was built with debugging \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eChrome\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e in mind, not debugging web apps. Chromium devs and adventurous outsiders may nevertheless be curious what’s happening in the browser on a per-frame basis.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePrerequisites:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eGet set up to record traces\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; recommended to use \u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;background-color:transparent\"\u003eadb_profile_chrome.py from \u003c/span\u003e\u003ca href\u003d\"https://github.com/johnmccutchan/adb_trace\" style\u003d\"line-height:1.15;text-decoration:none;background-color:transparent\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttps://github.com/johnmccutchan/adb_trace\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"line-height:1.15;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e (also in Chrome’s source tree under src/tools/perf/)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eRead the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/frame-viewer\"\u003eFrame Viewer Overview\u003c/a\u003e for information on how to record a frame viewer trace, rather than a standard trace. The short version is y\u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;white-space:pre-wrap;background-color:transparent\"\u003eou need a number of non-default tracing categories enabled; the easiest way to do this is to use the adb_prorfile_chrome script (see above) and pass --trace-frame-viewer to it.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFrame-viewer only works on the latest versions of Chrome, and with the latest rendering architecture. For some features to work both the version of Chrome used to view traces and the version used to record traces must be run with impl-side-painting enabled (--enable-impl-side-painting), and the version of Chrome used to view the trace must be run additionally with --enable-skia-benchmarking. See Frame Viewer’s \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/developers/how-tos/trace-event-profiling-tool/frame-viewer\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eGetting Started\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e for an example command line.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis entire document assume you know a lot about how the web platform works and a lot about how Chrome works. Performance of a sophisticated rendering system like a modern browser is \u003c/span\u003e\u003cspan style\u003d\"font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003every\u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e complicated, so please do not use this to blindly infer that any particular operation is cheap or expensive -- rather, use this tool to inform your own experimentation and debugging. \u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Simplified-Version-of-Browser-Rendering\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSimplified Version of Browser Rendering\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBefore trying to read a Frame Viewer trace, a few fundamentals:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAfter its loaded, the page changes in response to two inputs: user interaction mediated by the user agent (default pressed button styles, scrolling, etc) and updates to the DOM from JavaScript. From there, a cascade of effects through several rendering sub-systems eventually produces new pixels on the user’s screen.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe main subsystems are:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eParsing, which turns a chunk of HTML into DOM nodes\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eStyle, which resolves CSS on the DOM\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLayout, which figures out where DOM elements end up relative to one another\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePaint setup, sometimes referred to as recording, which converts styled DOM elements into a display list (SkPicture) of drawing commands to paint later, on a per-layer basis\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePainting, which converts the SkPicture of drawing commands into pixels in a bitmap somewhere (either in system memory or on the GPU if using Ganesh)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCompositing, which assembles all layers into a final screen image\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eand, less obviously, the presentation infrastructure responsible for actually pushing a new frame to the OS (i.e. the browser UI and its compositor, the GPU process which actually communicates with the GL driver, etc).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWe’ll focus on 1-6; the browser compositor and GPU process take up resources too but these operations don't map very meaningfully to page content.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAdding a new DOM element that’s visible on-screen will trigger work in every one of the systems above. In bad cases any one of them can cost tens of milliseconds (or more), meaning every one of them can be considered a liability for staying within frame budget.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eOne way to keep your animations inexpensive is to avoid stages of this pipeline altogether. For instance, if the DOM remains untouched in a given frame but one particular \u0026lt;div\u0026gt; changes from a red background to a blue background, no parsing needs to happen -- but style needs to be updated on at least that \u0026lt;div\u0026gt;, and because CSS’s inherited nature this can often trigger style recalculation on other parts of the DOM as well.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNote that user interactions that the browser handles, rather than the application, are largely unexceptional: clicking a button changes its style (adding pseudo-classes) and those style changes need to be resolved and later stages of the pipeline run (e.g. the depressed button state needs to be painted, and then the page needs to be re-composited with that new painted content).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe browser has multiple threads, and because of the dependencies implied in the above pipeline which thread an operation runs on matters a lot when it comes to finding the rendering bottleneck. Style, layout, and some paint setup operations run on the renderer’s main thread, which is the same place that JavaScript runs. Parsing gets its own thread (in most cases), as does compositing and painting.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eKeep in mind that JavaScript is single threaded and does not yield by default, which means that JavaScript events, style, and layout operations will block one another. That means if e.g. the style system is running, Javascript can’t receive new events. More obviously, it also means that other JavaScript events (such as a timer firing, or an XHR success callback, etc) will block JS events that may be very timely -- like touch events. NB this essentially means \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;font-weight:bold;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eapplications responding to touch input must consider the JavaScript main thread the application’s UI thread, and not block it for more than a few milliseconds\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe above explanation simplifies a lot, but should be enough to get going. Two exceptions worth pointing out though: first, scrolling is “special” in that it happens outside of the main JavaScript context, and scroll positions are asynchronously reported back to the main thread and updated in the DOM. This prevents janky scrolling even if the page executes a lot of JavaScript, but it can get in the way if the page is well-behaved and wants to respond to scrolling. Second, the pipeline above isn’t strictly hierarchically ordered -- that is, sometimes you can update style without needing to re-lay-out anything and without needing to repaint anything. A key example is CSS transforms, which don’t alter layout and hence can skip directly from style resolution (e.g. changing the transform offset) to compositing if the necessary content is already painted.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Introducing-Frameviewer\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIntroducing Frameviewer\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor the rest of this document to make sense you’ll need to get set up to record frame viewer traces. See the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/frame-viewer\"\u003eFrame Viewer Overview\u003c/a\u003e for instructions.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCaveats: Frame Viewer only works on the very latest Chrome rendering architecture (both for the Chrome where the trace is recorded and the Chrome where its viewed; see the above link for info on how to get Chrome into that mode), and it… can be buggy. Don’t say we didn’t warn you.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLet’s start with something simple. Here’s a frame viewer trace of scrolling mobile.nytimes.com\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe trace file being screenshotted in this section is attached to this page, as are all the traces referenced here, and can be \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace?attredirects\u003d0\u0026amp;d\u003d1\"\u003edownloaded\u003c/a\u003e and opened in about:tracing to follow along.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330188546/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLots of stuff on the screen. Let’s try to make sense of it.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Navigating-the-Basic-Tracing-View\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNavigating the Basic Tracing View\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBefore even touching the Frame Viewer, let’s examine some standard trace events as a refresher. There’s more detail in \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/trace-event-reading\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ethis document\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e about trace events and how to read them, but it’s a bit stale. Below is an updated, shortened recap.\u003c/span\u003e\u003c/p\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-Processes-Timelines\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#666666;background-color:#ffffff;font-weight:normal;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eProcesses \u0026amp; Timelines\u003c/span\u003e\u003c/h4\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-What-you-re-seeing-is-Chrome-s-multi-process-architecture-at-work-scrolling-your-page.-The-first-thing-to-notice-is-that-there-are-three-processes-running:-the-browser-pid-16099-and-the-renderer-process-for-nytimes.com-pid-23360-.Each-process-has-a-separat\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat you’re seeing is Chrome's multi-process architecture at work, scrolling your page. The first thing to notice is that there are three processes running: the browser (pid\u003d16099) and the renderer process for nytimes.com (pid\u003d23360).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eEach process has a separate horizontal track, filled with trace events. The track is basically an event timeline for events on that thread/process. Events are the colored, rectangular blocks on the timeline tracks. Time moves from left to right.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330320866/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"text-align:center;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-Panning-and-Zooming-with-the-Keyboard\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#666666;background-color:#ffffff;font-weight:normal;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ePanning and Zooming with the Keyboard\u003c/span\u003e\u003c/h4\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-The-keyboard-can-be-used-to-zoom-and-pan-around-inside-the-timeline.-The-w-and-s-keys-zoom-in-centered-around-the-mouse-and-the-a-and-d-keys-pan-the-timeline-left-and-right.\" /\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThe keyboard can be used to zoom and pan around inside the timeline. The ‘w’ and ‘s’ keys zoom in centered around the mouse, and the ‘a’ and ‘d’ keys pan the timeline left and right.\u003c/span\u003e\u003c/p\u003e\u003c/b\u003e\u003c/h4\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-Trace-Events\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#666666;background-color:#ffffff;font-weight:normal;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eTrace Events\u003c/span\u003e\u003c/h4\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-In-this-case-the-data-being-shown-is-5-seconds.-Zooming-in-on-a-section-of-the-trace-for-more-detail-we-can-make-out-individual-trace-event-records.\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn this case, the data being shown is ~5 seconds. Zooming in on a section of the trace for more detail, we can make out individual trace event records.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual%20trace.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330398755/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual%20trace.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eA single rectangle represents a TRACE_EVENT: where it began, and where it ended. When you see a stack of different rectangles on top of each other, it means that trace events were issued inside one another on the same thread. For example:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003efoo() {\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e sleep 10ms\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e bar()\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e sleep 5ms\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003ebar() {\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e sleep 5ms\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;margin-left:30pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:#000000;background-color:#ffffff;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWould look like this:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425562955756/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTo study individual rectangles, you can click on them. This will display information about the rectangle: its Duration, ThreadDuration (CPU time), SelfTime (time spent in the current slice, subtracting the time of all the children slices), ThreadSelfTime (CPU time spent in the current slice, subtracting the CPU time for all the children) and Occurrences (the number of times that event appeared in the selection). The information is sortable. Clicking on a title from the info table will expand all the slices for that event.\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information%20is.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330454846/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information%20is.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cspan\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor the Foo/Bar example, the SelfTime for Foo will be 15ms (20 - 5), while the SelfTime for Bar will be 5ms (Since it has no traced children).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe ThreadDuration is not available for all events and for all platforms, the SelfTime is omitted in cases where the Slice has no known children. Asynchronous events have no SelfTime by definition.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn addition to clicking, you can drag the mouse in a rectangle over a group of trace events. This will give you a list of events that intersect that rectangle and summarize them for you:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330593114/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Navigating-Frame-Viewer-Mode\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNavigating Frame Viewer Mode\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat Frame Viewer adds beyond the basic trace event system is a dump of the page’s state taken each time the renderer produces aframe. This is very useful when trying to visualize what’s happening from frame to frame. To see the state of the page’s layer tree for a frame, click one of the green circles along the top of the Renderer process track:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1416330631013/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png\" style\u003d\"width:100%\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eYou’ll get frames on the bottom of the screen that show the browser’s layer tree for this frame (on the left) as well as an image of the page with outlines for all the page’s layers (on the right).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425562991824/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCheckboxes in the layer view control what information is included in the page visualization: the most useful are typically “other layer’s / passes” (to view the whole page, rather than just the layer selected), “invalidations” which shows what got dirtied that frame for repainting, and “contents” which attempts to fill in the actual pixels for each layer by rasterizing the SkPictures for each layer (the SkPicture being essentially a DisplayList Chrome internally uses to store paint operations and which also gets dumped along with the layer tree each frame when frame viewer is on). The “contents” view doesn’t always work well (e.g. text gets garbled) and you’ll need --enable-skia-benchmarking passed to whatever Chrome you’re using to view the trace.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563057417/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe layer visualization can get crowded, so the mouse controls are very useful. You can pan with \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"line-height:1.15\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563138558/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png\" /\u003e\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, zoom in and out with \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"line-height:1.15\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563167259/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png\" /\u003e\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, and rotate (in 3D, because we’re nerds) with \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"line-height:1.15\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563186660/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png\" /\u003e\u003c/a\u003e\u003cspan style\u003d\"line-height:1.15;vertical-align:baseline;background-color:transparent\"\u003e, while\u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;vertical-align:baseline;background-color:transparent\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"font-size:10pt;line-height:normal\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563209649/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png\" /\u003e\u003c/a\u003e \u003cspan style\u003d\"line-height:1.15;background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003eallows you to select a layer for more detail about it.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563314170/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhen selected everything the compositor knows about the layer is shown in the bottommost frame. The “layerName” property is interesting because it maps the layer back to its root element in the DOM, such as div#content or the #document\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSelecting an invalidation tells you what layer the invalidation happened on as well as the invalidation’s bounds. Cross-reference the layer number with one of the layers in the layer tree on the left for more info about that layer.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLayers with invalidations have SkPictures associated with them. Clicking on the SkPicture link will show you more information about the relevant SkPicture recording. You can also access these recordings by selecting the blue dots along the top of the Renderer’s track in the trace view; the pictures will appear at different times than the frames because they’re located at the time they got recorded, rather than the time they were played back to produce a frame. This might be within the same frame, if an on-screen invalidation occurred that frame, or it might be much earlier if a picture was recorded and the compositor has been using the picture to produce frames for some time afterward (this will happen with composited scrolls and with CSS transform animations in particular, since the compositor can run these on its own).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563356365/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFrame viewer’s best feature is that is captures all of this information on a \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eper-frame\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e basis. The arrow keys move between frames while trying to retain the same view, so you can step through frame by frame and watch layer positions move with respect to one another or see invalidations appear.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"http://jankfree.org/images/output_optimized_frame.gif\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\u003cimg border\u003d\"0\" height\u003d\"376\" src\u003d\"http://jankfree.org/images/output_optimized_frame.gif\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis information, combined with the timing information encoded in the trace events, provides a powerful view into the performance of a web application.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-The-Critical-Path\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe Critical Path\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTaking a trace of a page that makes a change that requires repainting in response to touch input illustrates the entire pipeline in action (and in this case, working well).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe traces in this section are all from \u003c/span\u003e\u003ca href\u003d\"http://git.chromium.org/gitweb/?p\u003dchromium/src.git;a\u003dblob_plain;f\u003dtools/perf/page_sets/key_silk_cases/inbox_app.html;hb\u003dHEAD\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003einbox_app.html\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e in the Silk page set. The trace files used are available here (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace?attredirects\u003d0\u0026amp;d\u003d1\"\u003enormal trace\u003c/a\u003e) and here (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace?attredirects\u003d0\u0026amp;d\u003d1\"\u003eframeviewer trace\u003c/a\u003e).\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563383751/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eZooming in it’s possible to follow a frame propagating through the Renderer process:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563407706/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt;text-align:center\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17.25px;white-space:pre-wrap\"\u003e\u003ci\u003eOpen the trace file yourself to zoom in further and see individual events \u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cbr /\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eInput event comes in from the browser process (not shown, but visible in its own track higher up in the trace) and gets delivered to the compositor thread. This is a tiny slice in the above trace that includes “InputEventFilter::ForwardToHandler”\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe input event gets routed from the compositor thread to the main thread. This kicks off Blink’s input event handling, bottoming out in V8 (i.e. the JavaScript touchmove event handler running)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBlink begins a new animation frame, doing some of its own bookkeeping as well as calling requestAnimationFrame callback inside of “WebViewImpl::animate”\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJavaScript has modified the page since the last frame (presumably either in the rAF callback or the input event handler), triggering a layout. The first part of this is style recalculation, visible as Document::updateStyle\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePart of the on-screen DOM has been invalidated, so Blink repaints a chunk of the screen covering the invalidated area. This records drawing commands into an SkPicture, visible in the trace as Picture::Record events. Layer properties (such as transforms, scroll offsets, and opacity) are also updated in Blink’s copy of the layer tree.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe new recordings and updated layer tree are transferred from the Blink thread to the compositor thread in ThreadProxy::BeginMainFrame::Commit. During this time the main thread is blocked on the compositor thread.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe compositor considers the position of all layers and sorts all of the document’s content layer tiles to decide what order to rasterize them (this is for prioritization; on-screen tiles get highest priority followed by any prepainted tiles that might be on the screen soon). This is the ::UpdateTilePriorities and ::ManageTiles\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSome tiles needed for this frame get rasterized in Picture::Raster events (this trace is using Ganesh to rasterize tiles, so rasterization occurs on the compositor thread and actually represents the generation of GL commands for the tile contents, not filling in a bitmap which happens on the GPU).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eShortly after the rasterization completes the compositor thread’s draw deadline arrives, so it does a bunch of bookkeeping to decide where exactly to draw each tile on the screen (LayerTreeHostImpl::PrepareToDraw) and then sends this frame to the browser compositor (DelegatingRenderer::DrawFrame) and swaps the framebuffer (DelegatingRenderer:SwapBuffers)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThat’s the event flow, but it’s difficult (/impossible) to look at a trace and understand what actually changing on-screen in this frame.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis is where Frame Viewer comes in. In a Frame Viewer trace of the same interaction, inspecting a couple frames around this one shows how the layers are moving from frame to frame. Here’s one:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563425933/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePressing one of the right/left arrow keys lets us step to the previous/next frame. Here’s the next one:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563448767/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThey look almost the same, but the rectangle offset from the others, which is a layer that’s moving in response to touch input, has changed offsets slightly. Also note that a different green circle in the list of frames along the top of the Renderer track is now selected.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIt becomes more obvious what’s changing when we enable the “Contents” checkbox:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563472131/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eRemember from earlier we saw rasterization happen in this frame though, not just a layer changing position. You can see what got invalidated by turning on the “Invalidations” checkbox:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563492369/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eClicking on the red invalidation rect, we see that it’s for layer 32:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563513910/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSelecting layer 32 in the list of layers on the left, or disabling the invalidations and selecting the layer itself in the viewer rather than the invalidation rect, tells us more about that layer:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563532824/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThere’s a lot of information here, but the most interesting is probably the layerName which links this layer to the DOM; in this case, “RenderBlock APP-DISMISSABLE-ITEM class\u003d'message'”\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWe can also get more info on the associated SkPicture for this layer for this frame by clicking the picture link. This opens up the SkPicture debugger:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563554274/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhich has a list of all the draw operations stored in the SkPiture on the left and a timing graph that shows the cost of each draw operations as a vertical line. Selecting vertical lines will replay the picture up to that point, which helps identify what a given draw op is doing and letting you understand what the most expensive draw operations in the SkPicture are.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eImportant caveat: this works by replaying the SkPicture \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;font-weight:bold;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003elocally\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, on the machine used to view tracing. That means that the timing information will not be an accurate representation of performance on the device the trace was taken on! Furthermore, at this point all picture playback in tracing uses the software rasterizer, even if the picture was actually rastered with Ganesh when displaying the frame originally! Despite these two big limitations, the picture debugger can still be helpful to understand relative operation costs. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Anatomy-of-a-Performance-Problem\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAnatomy of a Performance Problem\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLastly, a couple isolated examples of performance problems. A real app usually has a combination of problems and may go beyond these simple examples, but these are common bottlenecks shown on their own.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eImportant caveat: tracing always imposes some amount of overhead on the browser’s regular operation. This is usually negligible for standard traces, but Frame Viewer traces are expensive and timing is not necessarily representative for Frame Viewer traces. It’s more useful to see what’s going on, rather than how long a particular operation took. In particular the DrawLayers operation on the compositor thread is expensive since it does most of the frame dump.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Excess-Javascript-Touch-Responsiveness\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eExcess Javascript / Touch Responsiveness\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eRemember, the JavaScript main thread is a web app’s UI thread. Here’s an example where a JS event handler that spends 50ms in V8 during the requestAnimationFrame callback gets in the way of touch events, causing a long stall in the rendering pipeline:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563574555/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNote the compositor thread is essentially idle during this time since the main thread can’t run additional JavaScript to process new touch events while its busy running the long rAF callback. The user would not see a new Renderer frame during this period (jank). \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe compositor is capable of running certain animations on its own (composited scroll and accelerated CSS animations), which it can run without waiting on JS. However with a touch event handler registered, as is the case on this page, the compositor thread \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emust wait \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eon the Blink main thread to process the touch event before responding to it by e.g. scrolling because JavaScript might call preventDefault on the touch event.\u003c/span\u003e\u003c/p\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Unexpected-Painting\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUnexpected Painting\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSometimes the only reasonable way to achieve an effect is to paint, but sometimes either Blink gets overeager and invalidates more than seems necessary or JavaScript manipulates style that invalidates more than it needs to.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFrame viewer is great for catching these cases.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor instance, look at this jsfiddle example from the Silk page set: \u003c/span\u003e\u003ca href\u003d\"http://jsfiddle.net/ugkd4/9/embedded/result/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://jsfiddle.net/ugkd4/9/embedded/result/\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHere’s a trace (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace?attredirects\u003d0\u0026amp;d\u003d1\"\u003etrace file\u003c/a\u003e) of that animation running for a few seconds.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIt’s supposed to demonstrate performing a clip with composited layers, so there shouldn’t be any painting going on. Stepping through the frames, though, we notice an odd invalidation at the beginning of each animation:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563596693/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat’s that red rectangle doing there? Clicking on its associated layer and looking at layerName reveals it as “RenderButton BUTTON id\u003d’button’”\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eOK, so what’s going on with the button? The main thread frame that produced this invalidation precedes it in the CrRendererMain timeline, and shows a JavaScript timer firing:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563617099/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis makes sense, since referring to our example code the timer is firing once a second to restart the animation.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSo we know something in that timer’s JS block caused a style recalculation (visible under the timer’s V8 execution block). Unfortunately there the trail goes cold, because we don’t know what style change did it. We can start commenting out style changes and seeing if the invalidation goes away, however.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eA few rounds of that later, we have a simple reduction:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"http://jsfiddle.net/3wMzq/1/embedded/result/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://jsfiddle.net/3wMzq/1/embedded/result/\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAnd its \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace?attredirects\u003d0\u0026amp;d\u003d1\"\u003ecorresponding trace\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1425563639568/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNothing is changing on screen, and we’ve stripped out the additional DOM and all JavaScript except the empty click handler, which gets called once a second… and it’s still repainting!\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAt which point it becomes clear that this is in fact a bug in Chrome, which one \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d369358\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efiles\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHappy hacking!\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5842750681016496414"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5842750681016496414"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5842750681016496414"}],"author":[{}],"sites$pageName":{"$t":"using-frameviewer"},"sites$revision":{"$t":"22"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/663072118876390125"},"published":{"$t":"2017-01-11T19:22:55.511Z"},"updated":{"$t":"2017-01-11T19:22:55.530Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-11T19:22:55.511Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"screen.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/663072118876390125"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1532852724421054608"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/androidwebview/android-webview-beta/screen.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/663072118876390125"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/663072118876390125"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/663072118876390125"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/663072118876390125"}],"author":[{"name":{"$t":"Selim Gurun"},"email":{"$t":"sgurun@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6067202637951098377"},"published":{"$t":"2017-01-11T15:33:47.141Z"},"updated":{"$t":"2017-01-11T15:35:48.583Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-11T15:35:48.583Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"apple-touch-icon.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6067202637951098377"},"link":[{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/apple-touch-icon.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6067202637951098377"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6067202637951098377"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6067202637951098377"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6067202637951098377"}],"author":[{"name":{"$t":"Chris Pickel"},"email":{"$t":"sfiera@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1288675800621652516"},"published":{"$t":"2011-06-10T18:33:59.064Z"},"updated":{"$t":"2017-01-11T09:48:25.044Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-11T09:48:23.332Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Using Eclipse with Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eLinux:\u003cspan style\u003d\"font-size:10pt\"\u003e \u003c/span\u003e\u003ca dir\u003d\"ltr\" href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/linux_eclipse_dev.md\" rel\u003d\"nofollow noreferrer\" style\u003d\"color:rgb(38,50,56);font-family:arial,sans-serif;font-size:13px;line-height:16px\" target\u003d\"_blank\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/linux_eclipse_dev.md\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAndroid: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src.git/+/master/docs/eclipse.md\"\u003ehttps://chromium.googlesource.com/chromium/src.git/+/master/docs/eclipse.md\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/using-eclipse-with-chromium"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1288675800621652516"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1288675800621652516"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1288675800621652516"}],"author":[{"name":{"$t":"James Cook"},"email":{"$t":"jamescook@chromium.org"}}],"sites$pageName":{"$t":"using-eclipse-with-chromium"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5928077882767664005"},"published":{"$t":"2017-01-10T23:27:29.252Z"},"updated":{"$t":"2017-01-10T23:46:41.671Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-10T23:46:21.542Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Cookbook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook\"\u003eBrowser Components / Layered Components Cookbook\u003c/a\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5922639774661378465"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-components/cookbook"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5928077882767664005"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5928077882767664005"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5928077882767664005"}],"author":[{"name":{"$t":"Michael Giuffrida"},"email":{"$t":"michaelpg@chromium.org"}}],"sites$pageName":{"$t":"cookbook"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5922639774661378465"},"published":{"$t":"2017-01-10T23:22:26.869Z"},"updated":{"$t":"2017-01-10T23:27:07.406Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-10T23:26:25.903Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Browser Components"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eYou probably intended to find one of these pages:\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook\" style\u003d\"background-color:transparent;font-size:13.3333px\"\u003eBrowser Components / Layered Components Cookbook\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook/Life%20of%20a%20Browser%20Component.pdf?attredirects\u003d0\"\u003eLife of a Browser Component.pdf\u003c/a\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-design\"\u003eLayered Components: Design\u003c/a\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-technical-approach\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eLayered Components: Technical Approach\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase\"\u003eStructure of Layered Components Within the Chromium Codebase\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-components"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5922639774661378465"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5922639774661378465"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5922639774661378465"}],"author":[{"name":{"$t":"Michael Giuffrida"},"email":{"$t":"michaelpg@chromium.org"}}],"sites$pageName":{"$t":"browser-components"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4328920814080995024"},"published":{"$t":"2013-05-22T13:58:58.397Z"},"updated":{"$t":"2017-01-10T23:25:35.589Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2014-05-08T23:08:48.809Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Layered Components: Technical Approach"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis document assumes that the reader has read the \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/layered-components-design\"\u003ehigh-level design\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e of layered components, and presents strategies for realizing that design.\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Choosing-Features-to-Refactor\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eChoosing Features to Refactor\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe will aim to tackle simpler “leaf” features first. By tackling these features first, we can wrestle with the basic issues and establish basic structure/patterns in a simpler context. As we move to more complex features, the extra complexities that they introduce will thus be easier to isolate and focus on.\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Dealing-with-Upstreaming-s-Incremental-Nature\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eDealing with Upstreaming’s Incremental Nature\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor the foreseeable future, Chrome for iOS will be in a state where some code is upstream and some code is downstream. This fact creates two challenges:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUpstream code needs to call code that is not yet upstreamed. This case might occur because of challenging dependency chains that need to be addressed incrementally.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNot-yet-upstreamed code calls code that is upstream. This case causes problems because it makes Chrome for iOS vulnerable to bustage during merges.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe first case will be handled by introducing an API that allows the downstream codebase to inject functionality into upstream features via embedder objects (precisely following the example of ContentClient and friends).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe second case will be handled by introducing an API via which downstream iOS code consumes upstream Chromium code. This “consumer API” will live upstream in directories that are owned by iOS engineers together with unittests of the API that specify the expected semantics. Thus, downstream usage of these APIs will be visible to all Chromium engineers (likely there will be a policy of TBR’ing an API OWNER on a change of a consumer API implementation but getting a full review from an OWNER on a change of a consumer API definition).\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Refactoring-a-Feature\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eRefactoring a Feature\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cul style\u003d\"font-weight:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eReach out to the feature owner(s) to make them aware that we are tackling this feature.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThey should already have the general context as we will have publicized the project on chromium.org/chromium-dev.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMove the feature to its desired final location and lock down DEPS rules on it (put in the desired DEPS restrictions and then allow inclusions of all existing violations, together with a note to talk to one of us before adding to the list) in order to stop the bleeding on the feature while we work on it.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGain sufficient expertise in the feature to develop a design for refactoring\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDiscussion with feature owners\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStrong desire against designs that require introducing ifdef’ing\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStrong desire against designs that require wrapper API around content layer and iOS embed layer\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote that the two above points might well come into conflict at times, wherein consultation with darin@ and jam@ will likely be in order to decide on best way of proceeding\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIterate on the design with feature owners\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf there are aspects of debate (e.g., the feature owner thinks that having some ifdef’s would be better than introducing a new layer, or it seems that introducing a specific wrapper api around content would greatly simplify the structure), bring in darin@/jam@ for discussion\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTurn the finalized feature-level design into CLs\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce the feature is in its final form, introduce iOS consumer API around downstream usage of the feature to prevent downstream bustage while upstreaming of the clients of the feature is still ongoing\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch1 style\u003d\"font-weight:normal;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Approaches-to-Challenges-Encountered-During-Refactoring\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eApproaches to Challenges Encountered During Refactoring\u003c/span\u003e\u003c/h1\u003e\u003ch3 style\u003d\"font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Laying-the-Groundwork-via-a-Driver\" /\u003eLaying the Groundwork via a Driver\u003c/h3\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eMost features both receive incoming information from the content layer (e.g., IPC or notifications) and send out information to or query the content layer (e.g., sending IPC, asking BrowserContext if it is off the record). To enable abstracting these interactions, the general pattern is to introduce a FooDriver interface. This interface will live in the core code of the component, and an instance of it will be injected into this core code on instantiation. The content-based and iOS drivers of the component will each have a concrete subclass of the FooDriver interface.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eExample: \u003ca href\u003d\"https://codereview.chromium.org/16286020/\"\u003ehttps://codereview.chromium.org/16286020/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Abstracting-WebContentsObserver\" /\u003eAbstracting WebContentsObserver\u003c/h3\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eYou can make the content-based FooDriver implementation be a WebContentsObserver. This class can contain references to the core classes that were previously themselves WebContentsObservers and call (potentially new) appropriate public APIs that those core classes expose in response to observing events on the given WebContents.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eExample: \u003ca href\u003d\"https://codereview.chromium.org/16286020/\" style\u003d\"color:rgb(85,26,139)\"\u003ehttps://codereview.chromium.org/16286020/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eThe iOS FooDriver implementation, by contrast, can observe WebState (iOS's equivalent to WebContents).\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cb style\u003d\"font-size:10pt\"\u003e\u003ch3 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Abstracting-WebContentsUserData\" /\u003eAbstracting WebContentsUserData\u003c/h3\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eThe content-based FooDriver implementation can itself be a WebContentsUserData, and can own the core classes that were previously themselves WebContentsUserData objects. Thus, the lifetime of these core classes will still be scoped to the lifetime of the WebContents.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eExample: \u003ca href\u003d\"https://codereview.chromium.org/17225008/\"\u003ehttps://codereview.chromium.org/17225008/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"3\"\u003eThe iOS FooDriver implementation, by contrast, can be a WebStateUserData.\u003c/font\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Abstracting-Listening-to-Notifications-and-IPC-Reception\" /\u003eAbstracting Listening to Notifications and IPC Reception\u003c/h3\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eThe approach to these is similar to that for WebContentsObserver: have the content-based FooDriver implementation listen for the notifications/IPC, and then invoke appropriate calls on the core classes (potentially creating new public APIs on these core classes in order to do so).\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eExample of abstracting listening for notifications: \u003ca href\u003d\"https://codereview.chromium.org/17893010/\"\u003ehttps://codereview.chromium.org/17893010/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eExample of abstracting IPC reception: \u003ca href\u003d\"https://codereview.chromium.org/17382007/\"\u003ehttps://codereview.chromium.org/17382007/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eThe iOS implementation of the feature will likely just call the new public APIs on the core classes directly.\u003c/font\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Abstracting-IPC-Sending\" /\u003eAbstracting IPC Sending\u003c/h3\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eExpose methods on the FooDriver interface that the core code can call where it was previously directly sending IPC. The content-based FooDriver implementation will implement these calls by sending IPC.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eExample: \u003ca href\u003d\"https://codereview.chromium.org/17572015/\"\u003ehttps://codereview.chromium.org/17572015/\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eThe iOS FooDriver will implement these methods via an iOS-specific flow.\u003c/font\u003e\u003c/div\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-General-Strategies-to-Consider-When-Doing-Refactoring\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eGeneral Strategies to Consider When Doing Refactoring\u003c/span\u003e\u003c/h1\u003e\u003cbr /\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf a class Foo gets a WebContents via a callback to another class (e.g., FooDelegate-\u0026gt;GetWebContents()), consider just having FooDelegate expose the API from WebContents that Foo uses. FooDelegate will likely already have (or be made to have) platform-specific implementations.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTo minimize duplication of header files, consider avoiding subclassing: Instead of having an interface FooDelegate.h with e.g. a content implementation FooDelegateContentImpl.h and FooDelegateContentImpl.cc, just have FooDelegate.h declare the concrete class and then have FoodDelegateContent.cc and FooDelegateIOS.cc.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOne question this raises is of declaring platform-specific variables in FooDelegate.h. This problem can of course be solved by if-defing, but we are looking to avoid if-defing in almost all cases. In some cases, it can be solved without ifdefing by the \u003ca href\u003d\"http://en.wikipedia.org/wiki/Opaque_pointer\" rel\u003d\"nofollow\"\u003ePimpl paradigm\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAlternative to introducing a wrapper API around the content layer and the iOS embed layer would be introducing typedef’s\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis would be a usage of ifdef’s but would be contained to a single location\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDifficult case arises when shared classes currently take in a WebContents instance (or similarly problematic class) in their constructor. These are the cases where we’ll have to consider very carefully to devise solutions that avoid the need for either a wrapper API or ifdef’ing. To put it a different way, if we have to introduce either a wrapper API or ifdef’ing, it will likely be due to these kinds of cases.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Case-Studies-Examples-to-Follow\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eCase Studies / Examples to Follow\u003c/span\u003e\u003c/h1\u003e\u003c/b\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\" size\u003d\"1\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component\"\u003ecomponents/autofill\u003c/a\u003e\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-technical-approach"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4328920814080995024"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4328920814080995024"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4328920814080995024"}],"author":[{"name":{"$t":"Colin Blundell"},"email":{"$t":"blundell@chromium.org"}}],"sites$pageName":{"$t":"layered-components-technical-approach"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"WSl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9026857399701327854"},"published":{"$t":"2009-05-08T23:43:00.278Z"},"updated":{"$t":"2017-01-06T10:21:31.869Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-06T10:21:29.319Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"First Run Customizations"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eChromium can be customized to perform certain behaviors during its first run. The key to it is a special file named \u003c/span\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ci\u003emaster_preferences \u003c/i\u003e\u003c/b\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ethat must exist before chrome first run in the same folder as the chrome.exe binary.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eThe master_preferences file is a text file of \u003ca target\u003d\"_blank\"\u003eJSON \u003c/a\u003eformat, which needs to contain some specific name/value pairs. A prototypical file is shown here (for a more exhaustive list consult the \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/chrome/installer/util/master_preferences.h?view\u003dmarkup\" target\u003d\"_blank\"\u003esource code\u003c/a\u003e directly):\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e{\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e \"homepage\" : \"http://dev.chromium.org\",\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e \"homepage_is_newtabpage\" : false,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"distribution\": {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"create_all_shortcuts\": true,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"import_history\": false,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e\u003cspan\u003e \u003c/span\u003e\"import_bookmarks\": false,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e \"import_home_page\": false,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e \"import_search_engine\": false,\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e \"do_not_launch_chrome\": false\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e },\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"first_run_tabs\": [\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"http://example.com\",\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"http://welcome_page\",\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \"http://new_tab_page\"\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e ]\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThere is one dictionary, called \"distribution\" and one list, called \"first_run_tabs\". Setting the home page behavior is done outside of these.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe home page settings control the following behaviors:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ehomepage: when set, this is the URL opened as the home page (see setting below.)\u003c/li\u003e\u003cli\u003ehomepage_is_newtabpage: if set to false, clicking the 'home' button or taking actions that send the user 'home' will open the home page instead of the new tab page.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003eThe distribution dictionary controls the following behaviors:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ecreate_all_shortcuts: if set to true, the desktop, quick-launch and start menu shortcuts are created without user intervention.\u003c/li\u003e\u003cli\u003eimport_history: if set to true it automatically imports the browser history from the current default browser.\u003c/li\u003e\u003cli\u003eimport_bookmarks: if set to true it automatically imports the user's bookmarks from the current default browser. \u003c/li\u003e\u003cli\u003eimport_home_page: if set to true it automatically imports the user's home page from the current default browser.\u003c/li\u003e\u003cli\u003eimport_search_engine: if set to true it automatically imports the user's search engine setting from the current default browser.\u003c/li\u003e\u003cli\u003edo_not_launch_chrome: if set to true, per-user Chromium will not automatically launch after it is installed (per-machine Chromium never auto-launches after install).\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003eThe first_run_tabs list controls the set of urls that are displayed in chromium when first run. If you want the default behavior the entire section can be removed. Each entry can be a standard url or you can use these special names to display special tabs:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\"http://welcome_page\" : shows the default welcome page for the current locale.\u003c/li\u003e\u003cli\u003e\"http://new_tab_page\" : shows the new tab page. Which contains the thumbnails of the favorite pages.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/first-run-customizations"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9026857399701327854"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9026857399701327854"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9026857399701327854"}],"author":[{"name":{"$t":"Carlos Pizano"},"email":{"$t":"cpu@chromium.org"}}],"sites$pageName":{"$t":"first-run-customizations"},"sites$revision":{"$t":"20"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2646075393878789142"},"published":{"$t":"2017-01-06T06:12:28.579Z"},"updated":{"$t":"2017-01-06T06:12:28.601Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-06T06:12:28.579Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chameleon Audio Board Block Diagram.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2646075393878789142"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8192282038602145419"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20Board%20Block%20Diagram.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2646075393878789142"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2646075393878789142"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2646075393878789142"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2646075393878789142"}],"author":[{"name":{"$t":"Tony Lin"},"email":{"$t":"tonycwlin@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7356048383679010674"},"published":{"$t":"2017-01-06T06:02:14.724Z"},"updated":{"$t":"2017-01-06T06:02:14.750Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-06T06:02:14.724Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chameleon Audio Board R1.1 Release PCB.zip"},"summary":{},"content":{"type":"application/zip","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7356048383679010674"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8192282038602145419"},{"rel":"alternate","type":"application/zip","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20Board%20R1.1%20Release%20PCB.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7356048383679010674"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356048383679010674"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356048383679010674"},{"rel":"edit-media","type":"application/zip","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7356048383679010674"}],"author":[{"name":{"$t":"Tony Lin"},"email":{"$t":"tonycwlin@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1730309425714712992"},"published":{"$t":"2017-01-06T05:58:28.200Z"},"updated":{"$t":"2017-01-06T05:58:28.239Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-06T05:58:28.200Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chameleon Audio Board R1.1 Release.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1730309425714712992"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8192282038602145419"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20Board%20R1.1%20Release.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1730309425714712992"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1730309425714712992"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1730309425714712992"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1730309425714712992"}],"author":[{"name":{"$t":"Tony Lin"},"email":{"$t":"tonycwlin@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4665652824911035677"},"published":{"$t":"2017-01-06T05:53:34.217Z"},"updated":{"$t":"2017-01-06T05:53:34.247Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2017-01-06T05:53:34.217Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chameleon Audio - New Page (4).png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4665652824911035677"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8192282038602145419"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20-%20New%20Page%20(4).png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4665652824911035677"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4665652824911035677"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4665652824911035677"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4665652824911035677"}],"author":[{"name":{"$t":"Tony Lin"},"email":{"$t":"tonycwlin@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},"published":{"$t":"2016-02-26T20:35:23.436Z"},"updated":{"$t":"2016-12-29T19:54:39.699Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-29T19:54:35.766Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Issue Tracking"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eBuilding this section back out, pulling in and re-writing all the existing bug related documentation under here.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTopics\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/autotriage\" target\u003d\"_blank\"\u003eAuto-triage Rules for Bugs\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/creating-a-bug-template-url\"\u003eCreating a Bug Template URL\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/requesting-a-component-or-label\"\u003eRequesting a Component or Label\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/bug-reporting-guidelines/triage-best-practices?pli\u003d1\"\u003eTriage Best Practices\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit\"\u003eHow to Bulk Edit\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components\" style\u003d\"font-size:13.3333px\"\u003eEditing Components\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components\"\u003eMigrating Issue Components\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/infra/infra/+/master/appengine/monorail/doc/api.md\"\u003eMonorail (Issue Tracker) API\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/tips-and-tricks\"\u003eTips and Tricks\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eProcess\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/release-block-guidelines\"\u003eRelease Block Guidelines\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6489695432843464000"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"issue-tracking"},"sites$revision":{"$t":"13"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2038590093638797477"},"published":{"$t":"2011-11-07T22:45:07.393Z"},"updated":{"$t":"2016-12-16T22:45:27.374Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-11-04T00:59:03.990Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Mac Accessibility"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThere are two main issues to think about when writing new native Mac code: full keyboard access and VoiceOver compatibility.\u003ch3\u003e\u003ca name\u003d\"TOC-Full-keyboard-access\" /\u003eFull keyboard access\u003c/h3\u003e\u003cdiv\u003eOn Mac OS X, the operating system is not fully keyboard-accessible by default. For example, there's no way to access the menu bar or most toolbars without using the mouse. However, users can turn on Full Keyboard Access by pressing Control+F1, and they can separately control whether they want Tab to cycle between all controls or just text boxes and lists by pressing Control+F7, or in System Preferences \u0026gt; Keyboard \u0026gt; Keyboard Shortcuts. When Full Keyboard Access is enabled, users can press keys like Control+F2 to highlight the menu bar, Control+F3 to highlight the Dock, and Control+F5 to highlight an application's toolbar.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen Full Keyboard Access is enabled, Chromium should provide full keyboard access to all controls. In many cases, Cocoa will take care of this for you automatically, so you should simply test its behavior. If you're implementing a custom UI widget, you may need to implement it yourself. To determine if Full Keyboard Access is enabled programmatically, query \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eisFullKeyboardAccessEnabled\u003c/a\u003e\u003c/font\u003e in NSApplication.\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Accessibility-Inspector\" /\u003eAccessibility Inspector\u003cbr /\u003e\u003c/h3\u003eXcode comes with a tool that let's you as the developer see all of the information your new widget exposes with respect to accessibility. With the developer tools installed, use spotlight and search for \"Accessibility Inspector\", then launch it and hover over your widget to see all of the attributes a potential assistive technology will receive. Look carefully for errors and warnings indicated by the tool. Also, read through each of the attributes and make sure they make sense. For further guidance, see the NSAccessibility informal protocol reference and the brief code snippet below. Sometimes the best way to figure out what the attributes should be is to hover over a similar control elsewhere in Chromium or in a different application.\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-VoiceOver-compatibility\" /\u003eVoiceOver compatibility\u003c/h3\u003e\u003cdiv\u003eMac OS X includes a built-in accessibility service called \u003ca href\u003d\"http://www.apple.com/accessibility/voiceover/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eVoiceOver\u003c/a\u003e that provides an alternative experience for users who are blind or low-vision. VoiceOver works quite well with Chromium today and it's important that we keep it that way!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIt can take some time to master VoiceOver, but the basics aren't too hard. Press Cmd+F5 to toggle it on or off; give it a few seconds to start up if you haven't used it before. Consider going through the tutorial.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eVoiceOver provides a synthesized-speech interface by default, but users with a refreshable braille display can access equivalent content in braille form, too. If you're not used to listening to synthesized speech, you can turn down the volume and ignore it, and instead just watch the Caption Panel that shows you everything VoiceOver is saying.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen testing with VoiceOver, it's very important that you only use VoiceOver keys to interact. Don't test things using other keyboard shortcuts you might know, because you won't be testing whether or not your interface is discoverable for VoiceOver users.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe VoiceOver keys are Control+Option and are abbreviated VO. Keep your fingers on these keys! Here are the keys you need to get started:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eVO+Left/Right: move to the previous or next item.\u003c/li\u003e\u003cli\u003eVO+Shift+Down: start interacting with the current item (hierarchically).\u003c/li\u003e\u003cli\u003eVO+Shift+Up: stop interacting with the current item (hierarchically) - move up a level.\u003c/li\u003e\u003cli\u003eVO+Space: click\u003c/li\u003e\u003c/ul\u003eWhen writing custom cocoa code, the most common change you'll need to make is to override the \u003cb\u003etitle\u003c/b\u003e and \u003cb\u003erole\u003c/b\u003e of a UI element. The role tells VoiceOver what type of element or control it is, and the title tells it what text to use when describing it. You occasionally may want to just tell VoiceOver to skip an element entirely, if it's purely decorative. Here's an example code snippet that sets the accessible label on button \u003cb\u003ebutton\u003c/b\u003e to the localized string \u003cb\u003eIDS_MY_BUTTON_LABEL:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e NSString* description \u003d l10n_util::GetNSStringWithFixup(IDS_MY_BUTTON_LABEL);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e [button accessibilitySetOverrideValue:description\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e forAttribute:NSAccessibilityDescriptionAttribute];\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor detailed information, start here: \u003ca href\u003d\"http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Accessibility/cocoaAXSupportingAttributes/cocoaAXSupportAttributes.html\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eAccessibility Programming Guidelines for Cocoa (developer.apple.com)\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7789018718369490338"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/accessibility/mac-accessibility"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2038590093638797477"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2038590093638797477"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2038590093638797477"}],"author":[{"name":{"$t":"Dominic Mazzoni"},"email":{"$t":"dmazzoni@chromium.org"}}],"sites$pageName":{"$t":"mac-accessibility"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"WSl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5593118568320923061"},"published":{"$t":"2012-08-17T18:12:51.045Z"},"updated":{"$t":"2016-12-16T10:46:26.599Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-16T10:46:23.620Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Sane time"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003e\"...because any sane person knows what day it is!\" -- Raz\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h2\u003e\r\n\r\n\u003cp\u003eThere are cases in Chrome where it is important to have an accurate time source. Although most modern operating systems now automatically synchronize computer clocks to some external time source, some computers may still have a skewed clock for various reasons: time syncing may not be configured correctly, the user may have manually set the clock erroneously, malware commonly changes the system time, etc. Thus, it is desirable for Chrome itself to keep track of time from an external source and its offset from the time on the local computer. \u003c/p\u003e\u003cp\u003eThe use of time in TLS (for certificate verification) has two consequences. First, we cannot depend upon a client’s ability to make a TLS connection to establish the time! And second, it’s important that the source of time be secure, because TLS security depends upon it. An attacker who can control the time on the user’s computer can, for example, cause Chrome to accept an expired certificate as valid.\u003c/p\u003e\r\n\u003cp\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/time-sources\"\u003eTime Sources\u003c/a\u003e discusses a similar problem for Chrome OS devices.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Design\" /\u003eDesign\u003c/h2\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWe desire that the time be known to within a few minutes. Assuming that the time on any Google server is accurate, and that we can communicate to Google machines securely, we call any time that we receive from a Google server over a secure channel \"sane time\" (because it's just accurate enough to be considered sane). \u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eIn the case where the client’s clock is badly wrong, we won’t be able to establish a TLS connection. Hence, we will use a purpose-built time server.\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-What-about-NTP-\" /\u003eWhat about NTP?\u003c/h4\u003e\r\n\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eNTP is a protocol built expressly for time synchronization. But relying on it in Chrome has some disadvantages:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eIt requires maintaining NTP client code in Chrome, which is a higher burden than the solution outlined here, both in code size and developer time.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome may be unable to send UDP, as suggested by metrics from QUIC. Making time available to the widest range of clients suggests we should prefer HTTP.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are \u003c/span\u003e\u003ca href\u003d\"http://www.cs.bu.edu/~goldbe/NTPattack.html\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eattacks on NTP\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/span\u003e\u003cp\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13.3333px;white-space:pre-wrap;background-color:transparent\"\u003eAnother possibility is to rely on the local time if it's already running an NTP client. This is also problematic, as it involves writing code to detect running NTP clients and verifying that it's sanely configured.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-Representation-and-accuracy\" /\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eRepresentation and accuracy\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eIn Chrome, there are two clocks: a wall clock (\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ebase::Time\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e) and a non-decreasing clock (\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ebase::TimeTicks\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e). The wall clock is what changes when the local time is changed, so we cannot reliably use it to compare against the server time unless we can detect when it changes (currently not possible). Furthermore, we have no way of detecting when it changes when Chrome isn't running!\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eThe non-decreasing clock, which is usually a tick count since the computer has started, is unaffected when the local time is changed. However, it becomes meaningless across restarts of Chrome (since the computer may be rebooted between restarts). Furthermore, it may stop when the computer is put to sleep, so even though it is intended for measure durations, it gives inaccurate results if the computer was asleep for the measured time interval.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome can detect when the computer goes to sleep and wakes, but only on some platforms. So instead, we define an idea of “sanity”, meaning that the wall clock and non-decreasing clock have recorded approximately equal times since the last network time query. The internal representation of time thus consists of a tuple of \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003e(network time, wall clock time, tick clock time)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e, which is serialized to a pref and restored at startup. Note that a restart that resets the tick clock will cause the deserialized representation to be rejected as insane.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eFinally, we record an uncertainty (\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ebase::TimeDelta\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e) that accounts for both the coarseness of the time representation, and the latency in fetching it. But, to reiterate, we are aiming only for an approximation: availability is much more important than accuracy.\u003c/span\u003e\u003c/p\u003e\u003ch4 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:12pt;margin-bottom:2pt\"\u003e\u003ca name\u003d\"TOC-Time-protocol\" /\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eTime protocol\u003c/span\u003e\u003c/h4\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eSince the \u003c/span\u003e\u003ca href\u003d\"https://github.com/google/omaha/blob/master/doc/ServerProtocol.md\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eOmaha protocol\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e has the needed security properties, and since it works over HTTP, and since it already has a server fleet deployed, we’ll use it as the basis for a temporary time protocol. Client requests will include a random nonce as a GET parameter, which is signed in the server’s response. (This incidentally defeats caching.) This is fairly heavyweight, of course, but since we are still experimenting we’d rather leverage existing code than design and support a lightweight protocol with a long lifetime. The responses look like this:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13.3333px;line-height:18.4px;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#274e13\" face\u003d\"courier new, monospace\"\u003e\u003cb\u003e)]}'\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13.3333px;line-height:18.4px;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#274e13\" face\u003d\"courier new, monospace\"\u003e\u003cb\u003e{\"protocol_version\": 1, \"current_time_millis\": 1457471762000}\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eTo avoid excess queries, queries will be sent only when the time is insane or unavailable, but no more often than every (say) 60 minutes. We’ll make this number configurable, to allow experimentation \u0026amp; to enable us to disable the feature if necessary. Another possible refinement is platform-specific adjustments, e.g. to save network traffic on Android or to allow more frequent updates on Windows, which tends to have less accurate clocks. On startup, if sane time is unavailable via deserialization, Chrome will wait for a random backoff period before issuing its first time query. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eThis hopefully avoids most “thundering herd” scenarios, since time queries are issued only in response to local events.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eFor managed devices, we may need to supply a way to disable time queries.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13.3333px;font-weight:700;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003eUse of sane time in SSL certificate validation\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eOne day, it would be nice to use secure time for all certificate validation decisions, but it will take a while to get there.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eAs a first step, we’ll use sane time to validate certificate rejections: if the rejection was due to the wall clock being wrong, Chrome displays an interstitial asking the user to correct it, and records \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eSHOW_BAD_CLOCK\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e to UMA.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap\"\u003eUse of sane time in upgrades\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eSane time is used in \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eupgrade_detector_impl.cc\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e to detect when Chrome needs to be updated.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\r\n\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Code-changes\" /\u003eCode changes\u003c/h2\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eAddition of the NetworkTimeTracker class was done in bug \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/146090\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(71,18,100);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e146090\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e. The SSL “bad clock” interstitial was done in bug \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/414843\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e414843\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e. The bug for the changes below is \u003ca href\u003d\"http://crbug.com/589700\"\u003e589700\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eTime is kept by the \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/components/network_time/network_time_tracker.h\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eNetworkTimeTracker\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e class. The following changes will be needed to bring its implementation into line with this design:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eChange the source of time updates. Once we’ve stood up the new time servers, we’ll add code to periodically query them. The most natural way to do this is to change \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eNetworkTimeTracker\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e to manage time updates on its own, rather than than relying on external callers (currently just \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003evariations_service.cc\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e) to provide time. \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eUpdateNetworkTime\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e should become a private method.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eFor managed devices, implement a policy to disable time queries.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eAdd the notion of “sanity” to \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eNetworkTimeTracker\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e. This means recording the value of the tick clock, as well as the value of the wall clock, so that they can be compared. Most likely we’ll change \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ereceived_network_time\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e to simply return \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003efalse\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003e when the clock is insane. \u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:13.3333px;font-family:Arial;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;white-space:pre-wrap\"\u003eThe amount of skew allowed between the wall clock and the tick clock can be generous (hours?), but we’ll still want to establish by some experimental means that most clients can run for a long time without becoming insane.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eAnd in addition, to benefit from these changes:\u003c/span\u003e\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eChange \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003essl_error_handler.cc\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e to call \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNetworkTimeTracker::GetNetworkTime\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e to decide whether to display the “please fix your clock” interstitial. If it is simple to extract the validity period of the rejected certificate, we’ll ensure that sane time falls within its validity period before showing the interstitial. If that’s not easy to do, we’ll have to define a rule of thumb, like “only display the interstitial if the wall clock is more than 24 hours different from sane time.” \u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/span\u003e\u003c/div\u003e\u003col\u003e\r\n\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sane-time"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5593118568320923061"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5593118568320923061"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5593118568320923061"}],"author":[{"name":{"$t":"Fred Akalin"},"email":{"$t":"akalin@chromium.org"}}],"sites$pageName":{"$t":"sane-time"},"sites$revision":{"$t":"30"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4354678605772824678"},"published":{"$t":"2014-08-14T03:55:40.760Z"},"updated":{"$t":"2016-12-14T17:41:31.359Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-14T17:41:27.588Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Licensing Handling For OS Builders"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Syntax\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eSyntax\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Examples\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eExamples\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Default-Accepted-Licenses\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDefault Accepted Licenses\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Accepting-Additional-Licenses\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eAccepting Additional Licenses\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003eNote: This is not legal advice; if you want that, consult a lawyer. This section discusses purely technical measures that are available to builders. Also be aware that this system is not perfect, and may make mistakes. You should not rely on it to fulfill legal obligations.\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eThe Chromium OS build system provides a method for automatically tracking licenses used by packages that are built \u0026amp; installed. This allows you to easily generate an image that only contains code that is under an FOSS license (e.g. a BSD or GPL variant). It also allows you to set even more restrictive guidelines such as only building packages that fall under BSD style licenses (thus filtering out all other licenses such as GPL), or filtering out specific licenses such as the GPL-3.\u003c/p\u003e\r\n\u003cp\u003eThis is all done via the ACCEPT_LICENSE make.conf variable.\u003c/p\u003e\r\n\u003cp\u003eNote: The implication of ACCEPT_LICENSE is that you are accepting the terms of every license that ends up in the image. Be sure to review each one that is listed to verify this is OK for your needs.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Syntax\" /\u003eSyntax\u003c/h2\u003e\r\n\u003cp\u003eThe ACCEPT_LICENSE variable is a whitespace delimited list of elements. Each element takes the form of:\u003c/p\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003ean explicit license name (e.g. \"GPL-2\" or \"BSD\")\u003c/li\u003e\r\n\u003cli\u003ea license group name (starts with an \"@\")\u003c/li\u003e\r\n\u003cli\u003ea glob that means \"all licenses\"\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eEach of these elements can be prefixed with a \"-\" to mean you want to remove that specific element from the accepted list.\u003c/p\u003e\r\n\u003cp\u003eThe list is incremental. That means later values add on to previous ones, so \"a b -a\" is equivalent to \"b\".\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Examples\" /\u003eExamples\u003c/h3\u003e\r\n\u003cp\u003eAccept all licenses except for the EULA group:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e ACCEPT_LICENSE\u003d\"* -@EULA\"\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eAccept only the BSD and GPL-2 license:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e ACCEPT_LICENSE\u003d\"BSD GPL-2\"\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eAccept all Free Software licenses, except for the GPL-3:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e ACCEPT_LICENSE\u003d\"@FREE -GPL-3\"\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Default-Accepted-Licenses\" /\u003eDefault Accepted Licenses\u003c/h2\u003e\r\n\u003cp\u003eThe default set of licenses that Chromium OS accepts are:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e$ portageq envvar ACCEPT_LICENSE\u003cbr /\u003e\r\n* -@EULA -@CHROMEOS\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eThis means all licenses that the system knows about, except for ones that require explicit EULA agreements, and ones in the CHROMEOS group. In practice, this means all licenses considered Free Software (either officially by the OSI or FSF, or follow the FSF guidelines), and licenses that allow for binary redistribution (e.g. firmware for hardware devices). \u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Accepting-Additional-Licenses\" /\u003eAccepting Additional Licenses\u003c/h2\u003e\r\n\u003cp\u003eSometimes when you try building for a board, you might run into errors like:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e The following license changes are necessary to proceed:\u003cbr /\u003e\r\n #required by virtual/opengles-2-r2, required by chromeos-base/chromeos-0.0.1-r181[opengles], required by chromeos-base/chromeos (argument)\u003cbr /\u003e\r\n \u0026gt;\u003dmedia-libs/mali-drivers-bin-0.45-r96 Google-TOS \u003c/code\u003e\u003c/div\u003e\r\n\r\n\r\n\u003cp\u003eThis is telling you that the package you're attempting to pull in (either directly, or by other packages) is using a license that has not been accepted (by virtue of being listed in the ACCEPT_LICENSE variable). You need to review this specific license, make sure you're OK with the terms of it, and then either agree to it, or find another way of building things that do not use this package.\u003c/p\u003e\r\n\u003cp\u003eIf you do agree to the license, you can declare that intention in a couple of ways:\u003c/p\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eupdate the make.conf file in your board's overlay and set ACCEPT_LICENSE in there\u003c/li\u003e\r\n\u003cli\u003eupdate the /etc/make.conf.user file in your chroot and set ACCEPT_LICENSE in there\u003c/li\u003e\r\n\u003cli\u003e`export ACCEPT_LICENSE\u003d\"...some values...\"` in your shell -- note that you'll have to re-export this every time you enter the chroot via `cros_sdk`\u003c/li\u003e\r\n\u003cli\u003eif you're running build_packages, use the --accept_licenses flag to pass an explicit list -- note that this flag must be included every time you run build_packages\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6513026710757802788"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/licensing/building-a-distro"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4354678605772824678"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4354678605772824678"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4354678605772824678"}],"author":[{"name":{"$t":"Mike Frysinger"},"email":{"$t":"vapier@chromium.org"}}],"sites$pageName":{"$t":"building-a-distro"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6463338620851616867"},"published":{"$t":"2013-05-22T04:49:33.308Z"},"updated":{"$t":"2016-12-13T02:40:44.287Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-13T02:40:42.550Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Minimizing Review Lag Across Time Zones"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eIf you're reviewing a change for someone in a different time zone, one review cycle can take up to 24 hours.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIt's useful to remember that many contributors working outside of PST are constantly blocked on reviews. We can't rewrite the laws of physics but here\u003cspan style\u003d\"font-size:10pt\"\u003e are some tips on making the process go faster:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003ePlease consider \"LGTM with nits.\", If a review from a committer has only minor issues. This small phrase can unblock an excited non-PST engineer a full 24 hours sooner!\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003eDon't require a second round for trivial changes.\u003c/li\u003e\u003cli style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003eFor owner reviews: provide an owner LGTM if the overall approach and structure of the CL looks good, but ask the CL author to find a reviewer in their timezone to work with to get all the details right.\u003c/li\u003e\u003cli style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003eIf you have changes you want to see or if you don't like the CL \u003cb\u003e\u003cu\u003esuggest a solution and provide as much information as possible.\u003c/u\u003e\u003c/b\u003e Terse responses mean a full 48 hours can go by before the non-PST person can ask \"How would you suggest I accomplish this?\" and then another 24 while they wait for the answer. Please don't simply ask questions on the review; \u003cb\u003e\u003cu\u003esuggest an acceptable solution\u003c/u\u003e\u003c/b\u003e.\u003c/li\u003e\u003cli style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003eAlong the same lines, if you don't like the way something is named \u003cb\u003e\u003cu\u003eplease suggest an alternate name\u003c/u\u003e\u003c/b\u003e that you'd find acceptable.\u003c/li\u003e\u003cli style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt\"\u003eSee \u003ca href\u003d\"https://groups.google.com/a/chromium.org/d/msg/chromium-dev/ZeNYH4JBJVY/5bhKpwGuCAAJ\"\u003ethis notice\u003c/a\u003e about acceptable latency for code reviews.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524506900990061695"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/contributing-code/minimizing-review-lag-across-time-zones"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6463338620851616867"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6463338620851616867"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6463338620851616867"}],"author":[{"name":{"$t":"Jeremy Moskovich"},"email":{"$t":"jeremy@chromium.org"}}],"sites$pageName":{"$t":"minimizing-review-lag-across-time-zones"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"WSl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2923076020176600336"},"published":{"$t":"2010-12-16T22:34:00.173Z"},"updated":{"$t":"2016-12-08T11:32:36.648Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-08T11:32:34.998Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SearchBox API"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont color\u003d\"#ff0000\"\u003eOBSOLETE\u003c/font\u003e\u003c/b\u003e - replaced by the \u003ca href\u003d\"https://www.chromium.org/embeddedsearch\"\u003eEmbedded Search API\u003c/a\u003e.\u003c/font\u003e\u003c/pre\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIn addition to \u003c/font\u003e\u003ca href\u003d\"http://www.opensearch.org/\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOpenSearch\u003c/font\u003e\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e compliance, Chromium also provides an experimental JavaScript API that enables the default search provider to interact with the \u003c/font\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOmnibox\u003c/font\u003e\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. This allows the search page to instantly respond to user interaction without reloading the page. It also allows the search page to communicate autocompletion suggestions. \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eThis page provides the technical specification for the SearchBox API. \u003c/span\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:Times;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003eStatus of this document:\u003cfont face\u003d\"Times\"\u003e \u003c/font\u003e\u003c/b\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:sans-serif\"\u003eEditor's Draft March 19, 2011.\u003c/span\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:Times;white-space:normal\"\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:sans-serif;white-space:normal\"\u003eThis is a \u003cstrong\u003ework in progress\u003c/strong\u003e and may change without any notices. \u003c/span\u003eThis API has been \u003c/font\u003e\u003ca href\u003d\"http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-October/028818.html\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eproposed to the WHATWG\u003c/font\u003e\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and we are eager to formally standardize it as it stabilizes. Please send comments to tonyg at chromium dot org.\u003c/font\u003e\u003c/pre\u003e\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\u003c/span\u003e\u003c/font\u003e\u003c/pre\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-1.-WebIDL-interfaces\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:x-large\"\u003e1. WebIDL interfaces\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont color\u003d\"#990000\"\u003e\u003cb\u003eNote\u003c/b\u003e\u003c/font\u003e that this entire interface is only available to the page the user has selected as the default search provider. The searchBox object is not exposed to general pages. See section 1.2.1 for details.\u003c/font\u003e\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-1.1-SearchBox-interface\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:large\"\u003e1.1 \u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#0B5394\"\u003e\u003cspan style\u003d\"font-size:large\"\u003eSearchBox\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:large\"\u003e interface\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003einterface \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003e\u003cb\u003eSearchBox\u003c/b\u003e\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e {\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eDOMString\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e value;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eboolean\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e verbatim;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e selectionStart;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e selectionEnd;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e x;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e y;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e width;\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e height;\r\n \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003evoid\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e setSuggestions(in \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eObject\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e suggestions);\r\n attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eFunction\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e onchange;\r\n attribute \u003cspan style\u003d\"color:rgb(11,83,148)\"\u003eFunction\u003c/span\u003e onsubmit;\r\n attribute \u003cspan style\u003d\"color:rgb(11,83,148)\"\u003eFunction\u003c/span\u003e oncancel;\r\n attribute \u003cspan style\u003d\"color:rgb(11,83,148)\"\u003eFunction\u003c/span\u003e onresize;\r\n};\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-1.1.1-Attributes\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e1.1.1 Attributes\u003c/font\u003e\u003c/h4\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThese attributes describe the state of the user agent's search box to the search page. All attributes must be \"live\" and valid throughout the lifetime of the page.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003evalue\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003cfont color\u003d\"#0B5394\"\u003eDOMString\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis attribute must return the text that has been entered into the search box.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal;font-size:13px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003everbatim\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003cfont color\u003d\"#0B5394\"\u003eboolean\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\u003c/span\u003e\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis attribute must return true if and only if the user agent suggests that the search page treat \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e as a verbatim search query (as opposed to a partially typed search query). Otherwise this attribute must return false. It is recommended that the user agent return true in the following circumstances:\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe user presses the forward delete key at the end of an input.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe user highlights an option in the search box's dropdown and \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e is updated to reflect the option.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe user agent in any way overridden the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e entered by the user.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/pre\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eselectionStart\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003cfont color\u003d\"#0B5394\"\u003eunsigned long\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis attribute must return \u003c/font\u003e\u003cspan style\u003d\"font-family:sans-serif;white-space:normal\"\u003ethe offset (in logical order) to the character that immediately follows the start of the selection in the search box. If there is no selection, then it must return the offset (in logical order) to the character that immediately follows the text entry cursor. \u003ci\u003eNote that in the case there is no explicit text entry cursor, the cursor is implicitly at the end of the input.\u003c/i\u003e\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eselectionEnd\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003eunsigned long\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eThis attribute must return\u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;white-space:normal\"\u003e the offset (in logical order) to the character that immediately follows the end of the selection in the search box. If there is no selection, then it must return the offset (in logical order) to the character that immediately follows the text entry cursor.\u003c/span\u003e\u003cspan style\u003d\"font-family:sans-serif;white-space:normal\"\u003e \u003ci\u003eNote that in the case there is no explicit text entry cursor, the cursor is implicitly at the end of the input.\u003c/i\u003e\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003ex\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e of type \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003eunsigned long\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eThis attribute must return the horizontal offset (\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ein pixels \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003erelative to the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e's origin) of the portion of the search box that overlaps with the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(85,26,139);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ewindow\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (i.e. the search box's drop down menu)\u003c/font\u003e\u003c/font\u003e. If the search box does not overlap the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e, this attribute must return zero.\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003ey\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003eunsigned long\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003eThis attribute must return the vertical offset\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e (\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ein pixels \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003erelative to the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e's origin) of the portion of the search box that overlaps with the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(85,26,139);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ewindow\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (i.e. the search box's drop down menu)\u003c/font\u003e\u003c/font\u003e. If the search box does not overlap the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e, this attribute must return zero.\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003ewidth\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003eunsigned long\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003eThis attribute must return the horizontal width \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ein pixels \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eof the portion of the search box that overlaps with the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(85,26,139);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ewindow\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (i.e. the search box's drop down menu)\u003c/font\u003e\u003c/font\u003e. If the search box does not overlap the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e, this attribute must return zero.\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eheight\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e of type \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003eunsigned long\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;color:rgb(11,83,148)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003eThis attribute must return the vertical height \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ein pixels \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eof the portion of the search box that overlaps with the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(85,26,139);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ewindow\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (i.e. the search box's drop down menu)\u003c/font\u003e\u003c/font\u003e. If the search box does not overlap the \u003ca href\u003d\"http://dev.w3.org/html5/spec/Overview.html#window\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow\u003c/font\u003e\u003c/a\u003e, this attribute must return zero.\u003c/span\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e1.2.2 Methods\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis method allows the search page to control the state of the user agent's search box.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003esetSuggestions\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis method accepts one argument, an object in \u003ca href\u003d\"http://www.json.org/\" rel\u003d\"nofollow\"\u003eJavaScript Object Notation\u003c/a\u003e form. It must adhere to the following JSON specification.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e{\r\n suggestions: [\r\n {\r\n value: \"...\"\r\n },\r\n {\r\n value: \"...\"\r\n }\r\n ]\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e\r\n}\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esuggestions\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eof type \u003c/span\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont color\u003d\"#0B5394\"\u003earray\u003c/font\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e - An ordered array of suggestions to be displayed\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. \u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003ci\u003eNote that calling this method with an empty \u003cfont face\u003d\"'courier new', monospace\"\u003esuggestions\u003c/font\u003e array effectively clears \u003c/i\u003e\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003ci\u003esearch-page-provided-suggestions\u003c/i\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003ci\u003e.\u003c/i\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e of type \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003estring\u003c/font\u003e\u003c/font\u003e\u003c/span\u003e - The string completion for this suggestion\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe user agent must process suggestions as follows:\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eLet \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esearch-page-provided-suggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e be an initially empty array of strings.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eUpon invoking \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esetSuggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, atomically replace all items in \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esearch-page-provided-suggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e with the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e of each object in the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esuggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e array.\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf the first \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esearch-page-provided-suggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e starts with the current search box \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, it is recommended that the user agent display it as an inline autocomplete option. It is recommended that the user agent display the remaining N \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esearch-page-provided-suggestions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e as autocomplete options in a drop down menu below the search box input.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e1.2.3 Event handlers\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThese event handlers allow the search page to register to receive notifications of changes in the search box attributes.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eonchange\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf the value of this attribute is a \u003cfont color\u003d\"#0B5394\"\u003eFunction\u003c/font\u003e, that function must be called when the value of any of the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evalue\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003everbatim\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eselectionStart\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e or \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eselectionEnd\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e attributes is changed.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eonsubmit\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf the value of this attribute is a \u003cfont color\u003d\"#0B5394\"\u003eFunction\u003c/font\u003e, that function must be called when the user commits the search query. It is recommended that the user agent consider the search query committed when the user presses enter/return.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eoncancel\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf the value of this attribute is a \u003cfont color\u003d\"#0B5394\"\u003eFunction\u003c/font\u003e, that function must be called when the user cancels the search query. It is recommended that the user agent consider the search query cancelled when the search box loses focus.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003eonresize\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf the value of this attribute is a \u003cfont color\u003d\"#0B5394\"\u003eFunction\u003c/font\u003e, that function must be called when the value of any of the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ex\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ey\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewidth\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, or \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eheight\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e attributes is changed.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-1.2-Navigator-interface\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:large\"\u003e1.2 \u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#0B5394\"\u003e\u003cspan style\u003d\"font-size:large\"\u003eNavigator\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:large\"\u003e interface\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont color\u003d\"#990000\"\u003eNOTE:\u003c/font\u003e \u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBecause the SearchBox interface is still under development, the Chromium implementation exposes it under \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow.chrome\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e instead of \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewindow.navigator\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. Some form of vendor prefixing is typical before new interfaces are standardized.\u003c/font\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003e[\u003c/font\u003e\u003cfont color\u003d\"#666666\"\u003eSupplemental\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e]\r\ninterface \u003cb\u003e\u003cfont color\u003d\"#0B5394\"\u003eNavigator\u003c/font\u003e\u003c/b\u003e {\r\n readonly attribute \u003c/font\u003e\u003cfont color\u003d\"#0B5394\"\u003eSearchBox\u003c/font\u003e\u003cfont color\u003d\"#000000\"\u003e searchBox;\r\n};\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e1.2.1 Attributes\u003c/font\u003e\u003c/b\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"background-color:rgb(255,242,204)\"\u003esearchBox\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-family:monospace\"\u003e\u003cb\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eUpon creation of a new \u003ca href\u003d\"http://dev.w3.org/html5/spec/browsers.html#browsing-context\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ebrowsing context\u003c/a\u003e, if the location indicates that the page is the user's default search provider, a new \u003cfont color\u003d\"#0B5394\"\u003eSearchBox\u003c/font\u003e instance must be created. \u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003eIf there is a \u003cfont color\u003d\"#0B5394\"\u003eSearchBox\u003c/font\u003e instance for the current browser context (the page is the default search provider), this attribute must return the current \u003cfont color\u003d\"#0B5394\"\u003eSearchBox\u003c/font\u003e instance. Otherwise this attribute must not be exposed to the DOM.\u003c/font\u003e\u003c/pre\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-size:medium\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cspan style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-2.-Example-usage\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:x-large\"\u003e2. Example usage\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis trivial example demonstrates how a default search provider may obtain a reference to the \u003cfont color\u003d\"#0B5394\"\u003eSearchBox\u003c/font\u003e instance, register for events, read state and set state.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003evar searchBox \u003d window.navigator.searchBox;\r\nsearchBox.onchange \u003d function() {\r\n if (this.selectionStart \u003d\u003d this.selectionEnd \u0026amp;\u0026amp;\r\n this.selectionStart \u003d\u003d this.value.length)\r\n alert('Cursor is at end of input');\r\n\r\n alert('Setting suggestions for: ' + this.value);\r\n this.setSuggestions({\r\n suggestions: [\r\n { value: \"one\"\r\n },\r\n { value: \"two\"\r\n }\r\n ]\r\n });\r\n}\r\nsearchBox.onsubmit \u003d function() {\r\n alert('User searched for: ' + this.value);\r\n}\r\nsearchBox.oncancel \u003d function() {\r\n alert('Query when user cancelled: ' + this.value);\r\n}\r\nsearchBox.onresize \u003d function() {\r\n alert('Resized to: ' +\r\n [this.x,\r\n this.y,\r\n this.width,\r\n this.height].join(','));\r\n}\u003c/code\u003e\u003c/div\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cpre style\u003d\"white-space:pre-wrap\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-3.-Change-log\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:x-large\"\u003e3. Change log\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003c/pre\u003e\r\n\u003cdiv\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-top-color:rgb(136,136,136);border-right-color:rgb(136,136,136);border-bottom-color:rgb(136,136,136);border-left-color:rgb(136,136,136);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;width:100%\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:20%\"\u003e \u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eDate\u003c/b\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:80%\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e Description\u003c/b\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:20%\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e Jan 4, 2011\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:80%\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e Change setSuggestions from array of strings to JSON.\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e \u003cfont face\u003d\"arial, sans-serif\"\u003eJan 7, 2011\u003c/font\u003e\u003c/td\u003e\u003ctd\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e Remove \"query\" from setSuggestions JSON. Update processing model for setSuggestions.\u003c/font\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e March 19, 2011\u003c/font\u003e\u003c/td\u003e\u003ctd\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e Change chrome.searchBox to navigator.searchBox.\u003c/font\u003e\u003c/td\u003e\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/searchbox"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2923076020176600336"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2923076020176600336"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2923076020176600336"}],"author":[{}],"sites$pageName":{"$t":"searchbox"},"sites$revision":{"$t":"20"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3273727767161333466"},"published":{"$t":"2015-07-10T23:23:58.527Z"},"updated":{"$t":"2016-12-07T01:21:21.704Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-07T01:21:18.553Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Using Atom as your IDE"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eThis content has moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/atom.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/atom.md\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/using-atom-as-your-ide"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3273727767161333466"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3273727767161333466"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3273727767161333466"}],"author":[{"name":{"$t":"Walter Korman"},"email":{"$t":"wkorman@chromium.org"}}],"sites$pageName":{"$t":"using-atom-as-your-ide"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"Xyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5090016605067502081"},"published":{"$t":"2011-11-30T01:52:16.168Z"},"updated":{"$t":"2016-12-01T08:40:37.633Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-01T08:40:32.252Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Factory Software"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eThe Chromium OS software contains everything you need for a standard device manufacturing flow - from pre-flash, system imaging, calibration and qualification, functional tests, finalization to RMA.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe related documents are now moved to \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/platform/factory/+/master/README.md\" target\u003d\"_blank\"\u003efactory repo\u003c/a\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/building-factory-test-images"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5090016605067502081"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5090016605067502081"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5090016605067502081"}],"author":[{"name":{"$t":"David Parker"},"email":{"$t":"dparker@chromium.org"}}],"sites$pageName":{"$t":"building-factory-test-images"},"sites$revision":{"$t":"36"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1478293985998709534"},"published":{"$t":"2012-03-07T19:21:29.440Z"},"updated":{"$t":"2016-12-01T00:28:30.571Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-12-01T00:28:25.980Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chrome on Chrome OS Gardening"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThere is a rotation of people who are tasked with helping maintain a healthy flow of versions of Chrome/Chromium into Chrome OS/Chromium OS.\u003cbr /\u003e\u003cbr /\u003e\u003cspan\u003eChrome on Chrome OS \u003c/span\u003e\u003cspan style\u003d\"background-image:initial;background-color:rgb(255,255,204);color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-repeat:initial initial\"\u003eGardening\u003c/span\u003e\u003cspan\u003e Duties:\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan\u003e1. Shadow Chromium sheriffs for Chromium OS-specific configurations.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan\u003e2. Keep Chrome OS UI BVTs green.\u003c/span\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e3. Help fix the crashes labeled \u003ca href\u003d\"https://code.google.com/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dlabel%3ATreeCloser\"\u003eTreeCloser on the Chromium waterfall.\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eChrome on Chrome OS \u003ca href\u003d\"https://docs.google.com/document/d/13zse2T7S-rMaFEvd0HhFvF95GWJWbuwY-QfeWUlOwbg/edit#\" target\u003d\"_blank\"\u003egardening documentation\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2645072901461081494"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/tree-sheriffs/chrome-in-chromeos-gardening"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1478293985998709534"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1478293985998709534"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1478293985998709534"}],"author":[{"name":{"$t":"Peter Mayo"},"email":{"$t":"petermayo@chromium.org"}}],"sites$pageName":{"$t":"chrome-in-chromeos-gardening"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4651153417869302641"},"published":{"$t":"2016-11-30T01:05:02.113Z"},"updated":{"$t":"2016-11-30T01:06:24.061Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-30T01:06:19.220Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"The old instructions for getting the code"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-This-page-is-obsolete.-Please-see-Get-the-Code:-Checkout-Build-Run-Chromium-instead.\" /\u003e\u003ci\u003eThis page is obsolete. Please see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/get-the-code\"\u003eGet the Code: Checkout, Build, \u0026amp; Run Chromium\u003c/a\u003e instead.\u003c/i\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cbr /\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Prerequisites\" /\u003ePrerequisites\u003c/h2\u003e\r\n\r\n\u003cp\u003eChromium supports building on Windows, Mac and Linux host systems. Linux is required for building Android, and a Mac is required for building iOS.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Platform-specific-requirements\" /\u003ePlatform-specific requirements\u003c/h3\u003e\r\n\r\n\u003cp\u003eThis page documents common checkout and build instructions. There are platform-specific pages with additional information and requirements:\u003c/p\u003e\r\n\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md\"\u003eLinux\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md\"\u003eWindows\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md\"\u003eMac\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/chromeos_build_instructions.md\"\u003eChromeOS\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/ios_build_instructions.md\"\u003eiOS\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/cast_build_instructions.md\"\u003eCast\u003c/a\u003e\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md\"\u003eAndroid\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Set-up-your-environment\" /\u003eSet up your environment\u003c/h3\u003e\r\n\r\n\u003cp\u003eCheck out and install the \u003ca href\u003d\"https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up\"\u003edepot_tools package\u003c/a\u003e. This contains the custom tools necessary to check out and build.\u003c/p\u003e\r\n\r\n\u003cp\u003eCreate a chromium directory for the checkout and change to it (you can call this whatever you like and put it wherever you like, as long as the full path has no spaces):\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003emkdir chromium\u003cbr /\u003e\r\ncd chromium\u003c/code\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Check-out-the-source-code\" /\u003eCheck out the source code\u003c/h2\u003e\r\n\r\n\u003cp\u003eUse the \"fetch\" tool that came with depot_tools:\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003efetch chromium \u003cfont color\u003d\"#999999\"\u003e# [fetch --no-history chromium]\u003c/font\u003e\u003cbr /\u003e\r\ncd src \u003cfont color\u003d\"#999999\"\u003e# All other commands are executed from the src/ directory.\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eUse \u003ccode\u003e--no-history\u003c/code\u003e if you don't need repo history and want a faster checkout. Expect a checkout to take at least 30 minutes on fast connections, and many hours on slower connections.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Post-sync-hooks\" /\u003ePost-sync hooks\u003c/h3\u003e\r\n\r\n\u003cp\u003eSome platform-specific pages (linked above) may have extra instructions. In particular, on Ubuntu Linux run:\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e./build/install-build-deps.sh\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003e\u003cb\u003eOptional:\u003c/b\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/api-keys\"\u003einstall API keys\u003c/a\u003e which allow your build to use certain Google services. This isn't necessary for most development and testing purposes.\u003c/p\u003e\r\n\r\n\u003cp\u003eRun hooks to fetch everything needed for your build setup.\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egclient runhooks\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Update-the-checkout\" /\u003eUpdate the checkout\u003c/h3\u003e\r\n\r\n\u003cp\u003eTo sync to newer versions of the code (not necessary the first time), run the following in your src/ directory:\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit rebase-update\u003cbr /\u003e\r\ngclient sync\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eThe first command updates the primary Chromium source repository and rebases your local development branches on top of tip-of-tree. The second command updates all of the dependencies specified in the DEPS file. See also \"More help managing your checkout\" below.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Setting-up-the-build\" /\u003eSetting up the build\u003c/h2\u003e\r\n\r\n\u003cp\u003eGN is our meta-build system. It reads build configuration from \u003ccode\u003eBUILD.gn\u003c/code\u003e files and writes Ninja files to your build directory. To create a GN build directory:\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egn gen out/Default\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cul\u003e\r\n\u003cli\u003eYou only have to do this once, it will regenerate automatically when you build if the build files changed.\u003c/li\u003e\r\n\u003cli\u003eYou can replace \u003ccode\u003eout/Default\u003c/code\u003e with another name inside the \u003ccode\u003eout\u003c/code\u003e directory.\u003c/li\u003e\r\n\u003cli\u003eTo specify build parameters for GN builds, including release settings, see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/gn-build-configuration\"\u003eGN build configuration\u003c/a\u003e. The default will be a debug component build matching the current host operating system and CPU.\u003c/li\u003e\r\n\u003cli\u003eFor more info on GN, run \u003ccode\u003egn help\u003c/code\u003e on the command line or read the \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/quick_start.md\"\u003equick start guide\u003c/a\u003e.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Building\" /\u003eBuilding\u003c/h2\u003e\r\n\r\n\u003cp\u003eBuild Chromium (the \"chrome\" target) with Ninja using the command:\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eninja -C out/Default chrome\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eList all GN targets by running \u003ccode\u003egn ls out/Default\u003c/code\u003e from the command line. To compile one, pass to Ninja the GN label with no preceding \"//\" (so for \u003ccode\u003e//ui/display:display_unittests\u003c/code\u003e use \u003ccode\u003eninja -C out/Default ui/display:display_unittests\u003c/code\u003e).\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Running\" /\u003eRunning\u003c/h2\u003e\r\n\r\n\u003cp\u003eYou can run chrome with (substituting \"Default\" with your build directory):\u003c/p\u003e\r\n\r\n\u003cul\u003e\u003cli\u003eLinux/ChromeOS: \u003ccode\u003eout/Default/chrome\u003c/code\u003e\u003c/li\u003e\r\n\u003cli\u003eWindows: \u003ccode\u003eout\\Default\\chrome.exe\u003c/code\u003e\u003c/li\u003e\r\n\u003cli\u003eMac: \u003ccode\u003eout/Default/Chromium.app/Contents/MacOS/Chromium\u003c/code\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://www.chromium.org/developers/how-tos/android-build-instructions\"\u003eAndroid\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/ios_build_instructions.md\"\u003eiOS\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Running-tests\" /\u003eRunning tests\u003c/h3\u003e\r\n\r\n\u003cp\u003eRun the test targets listed above in the same manner. You can specify only a certain set of tests to run using \u003ccode\u003e--gtest_filter\u003c/code\u003e, e.g.\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eout/Default/unit_tests --gtest_filter\u003d\"PushClientTest.*\"\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eYou can find out more about GoogleTest on the \u003ca href\u003d\"https://github.com/google/googletest\" rel\u003d\"nofollow\"\u003eGoogleTest wiki page\u003c/a\u003e\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Quick-start-to-submit-a-patch\" /\u003eQuick start to submit a patch\u003c/h2\u003e\r\n\r\n\u003cp\u003eSee \u003ca href\u003d\"https://www.chromium.org/developers/contributing-code\"\u003econtributing code\u003c/a\u003e for a more in-depth guide.\u003c/p\u003e\r\n\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit checkout -b my_patch\u003cbr /\u003e\r\n\u003cfont color\u003d\"#999999\"\u003e\u003ci\u003e...write, compile, test...\u003c/i\u003e\u003c/font\u003e\u003cbr /\u003e\r\ngit commit -a\u003cbr /\u003e\r\ngit cl upload\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eThe \u003ccode\u003egit cl upload\u003c/code\u003e command will upload your code review to \u003ca href\u003d\"https://codereview.chromium.org/\"\u003ecodereview.chromium.org\u003c/a\u003e for review.\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eAdd reviewers and submit your code for review by clicking on \"Publish+Mail Comments\" (you can leave the mail message empty).\u003c/li\u003e\r\n\u003cli\u003eIf you have try bot access, you can click \"CQ dry run\" which will compile and run the tests.\u003c/li\u003e\r\n\u003cli\u003eOnce your patch has been reviewed and marked LGTM (\"Looks Good To Me\") by an authorized reviewer, click the \"Commit\" checkbox below the patch to submit to the commit queue.\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-More-help-managing-your-checkout\" /\u003eMore help managing your checkout\u003c/h3\u003e\r\n\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html\"\u003eDepot tools manpage\u003c/a\u003e and \u003ca href\u003d\"https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html\"\u003etutorial\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/get-the-code/working-with-release-branches\"\u003eWorking with release branches\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/get-the-code/working-with-nested-repos\"\u003eWorking with nested repositories\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:64adbbcadf173002\" class\u003d\"disabled\"\u003eCommit or revert changes manually\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-drover.html\"\u003egit-drover\u003c/a\u003e for merging changes to release branches.\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Getting-help\" /\u003eGetting help\u003c/h2\u003e\r\n\r\n\u003cul\u003e\r\n\u003cli\u003eEnsure your checkout has been properly updated (\u003ccode\u003egit rebase-update\u003c/code\u003e).\u003c/li\u003e\r\n\u003cli\u003eCheck you're on a stable, unmodified branch from master (\u003ccode\u003egit map-branches\u003c/code\u003e).\u003c/li\u003e\r\n\u003cli\u003eCheck you have no uncommitted changes (\u003ccode\u003egit status\u003c/code\u003e).\u003c/li\u003e\r\n\u003cli\u003eJoin the \u003ccode\u003e#chromium\u003c/code\u003e IRC channel on \u003ccode\u003eirc.freenode.net\u003c/code\u003e (see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/irc\"\u003eIRC page\u003c/a\u003e for more).\u003c/li\u003e\r\n\u003cli\u003eJoin the \u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev\"\u003echromium-dev Google Group\u003c/a\u003e, and other \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/technical-discussion-groups\"\u003etechnical discussion groups\u003c/a\u003e. \u003cb\u003eThese are not support channels for Chrome itself but forums for developers.\u003c/b\u003e\u003c/li\u003e\r\n\u003cli\u003eIf you think there is an infrastructure problem that affects many developers, file \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?template\u003dBuild%20Infrastructure\"\u003ea new bug with the label 'Infra'\u003c/a\u003e. It will be looked at by our infrastructure team.\u003c/li\u003e\r\n\u003cli\u003eIf you work at Google, check out the \u003ca href\u003d\"http://wiki/Main/ChromeBuildInstructions\" rel\u003d\"nofollow\"\u003eGoogler-specific Chrome documentation\u003c/a\u003e.\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/old-get-the-code"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4651153417869302641"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7768323185310599139/342"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4651153417869302641"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4651153417869302641"}],"author":[{"name":{"$t":"Dirk Pranke"},"email":{"$t":"dpranke@chromium.org"}}],"sites$pageName":{"$t":"old-get-the-code"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3164006521902327210"},"published":{"$t":"2016-11-29T20:35:11.033Z"},"updated":{"$t":"2016-11-29T20:37:28.316Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-29T20:37:28.298Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"screenshot2.gif"},"summary":{},"content":{"type":"image/gif","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3164006521902327210"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6095963379082875872"},{"rel":"alternate","type":"image/gif","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/inspecting-ash/screenshot2.gif"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3164006521902327210"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3164006521902327210"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3164006521902327210"},{"rel":"edit-media","type":"image/gif","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3164006521902327210"}],"author":[{"name":{"$t":"Sarmad Hashmi"},"email":{"$t":"mhashmi@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1851070719569641265"},"published":{"$t":"2016-11-25T19:44:42.188Z"},"updated":{"$t":"2016-11-25T19:44:42.209Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-25T19:44:42.188Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"gflags.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1851070719569641265"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5941679169189588859"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/debugging-on-windows/gflags.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1851070719569641265"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1851070719569641265"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1851070719569641265"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1851070719569641265"}],"author":[{"name":{"$t":"Sigurður Ásgeirsson"},"email":{"$t":"siggi@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6267023304735221412"},"published":{"$t":"2016-11-23T19:50:12.079Z"},"updated":{"$t":"2016-11-23T19:50:12.103Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-23T19:50:12.079Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"XoWGyYBg5EA.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6267023304735221412"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6095963379082875872"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/inspecting-ash/XoWGyYBg5EA.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6267023304735221412"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6267023304735221412"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6267023304735221412"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6267023304735221412"}],"author":[{"name":{"$t":"Sarmad Hashmi"},"email":{"$t":"mhashmi@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6654841250893954140"},"published":{"$t":"2016-07-29T21:38:38.294Z"},"updated":{"$t":"2016-11-17T10:29:26.514Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-17T10:29:24.373Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Objectives"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eAt Google we define and track progress against our goals using \u003ca href\u003d\"https://www.gv.com/lib/how-google-sets-goals-objectives-and-key-results-okrs\"\u003e\"OKRs\"\u003c/a\u003e (Objectives and Key Results). Here are the OKRs for the web platform predictability infrastructure project. Note that these are \u003cb\u003eintentionally aggressive\u003c/b\u003e and so we will be happy if we deliver 60%-70% of them. Platform predictability also includes broader efforts by other web platform teams (eg. improving interop of the features they own), but those are owned by the individual teams (eg. \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/teams/input-dev/input-objectives\"\u003einput-dev\u003c/a\u003e) and so not included here.\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-2016-Q3\" /\u003e2016 Q3\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n\u003ch3 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Improve-interop-testing\" /\u003eImprove interop testing\u003c/h3\u003e\r\nInvest in a high quality test suite for the web platform as a whole.\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Imports-happening-daily-via-simplified-import-process.\" /\u003eImports happening daily via simplified import process.\u003c/h4\u003e\r\n\u003cul\u003e\u003cli\u003eAdd a builder which tries to update, and aborts if an automatic update couldn't be completed.\u003c/li\u003e\r\n\u003cli\u003eAdd a script to trigger try jobs to discover which new tests are failing across different platforms.\u003c/li\u003e\r\n\u003cli\u003eAdd a mapping of directories to auto-update preferences, and when updating, edit W3CImportExpectations/TestExpectations and file bugs according to this mapping.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Easier-contribution-to-web-platform-tests\" /\u003eEasier contribution to web-platform-tests\u003c/h4\u003e\r\nImplement a way to contribute to WPT repository with Chromium tools. Our tools assume that some configuration files are checked in to the target repository, and we need to put such files to a separated repository for WPT.\r\n\u003cul\u003e\u003cli\u003eAgreement on changes in our tools with chrome-infra\u003c/li\u003e\r\n\u003cli\u003eImplement\u003c/li\u003e\r\n\u003cli\u003eLand the first CL using the process to both of Chromium repo and WPT repo\u003c/li\u003e\r\n\u003cli\u003eMultiple Blink engineers landed CLs with the process\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Bugs-filed-for-all-automated-web-platform-tests-that-fail-on-Chrome-but-pass-on-two-other-engines\" /\u003eBugs filed for all automated web-platform-tests that fail on Chrome but pass on two other engines\u003c/h4\u003e\r\nUse this to increase our understanding of the value of WPT\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Eliminate-csswg-test-build-step\" /\u003eEliminate csswg-test build step\u003c/h4\u003e\r\nTest harness runs unbuilt tests\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Eliminate-csswg-test-pull-request-backlog\" /\u003eEliminate csswg-test pull-request backlog\u003c/h4\u003e\r\n32 as of 6/20\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-W3C-PointerEvent-Tests:-Complete-automation-through-script-injection\" /\u003eW3C PointerEvent Tests: Complete automation through script injection\u003c/h4\u003e\r\nshared with input-dev.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch3 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Improve-understanding-of-web-compat\" /\u003eImprove understanding of web compat\u003c/h3\u003e\r\nTools for better data for decision making that impacts compat, and process improvements that reduces the risk/cost of regressions.\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Googlers-can-use-bisect-builds.py-to-bisect-regressions-on-Linux-Chrome-down-to-an-individual-commit-position\" /\u003eGooglers can use bisect-builds.py to bisect regressions on Linux Chrome down to an individual commit position\u003c/h4\u003e\r\nInternal only for now due to only official Chrome builds being archived.\r\nObviously doesn't include positions which fail to build, etc.\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Land-scripts-and-publish-instructions-for-using-cluster-telemetry-for-UseCounter-analysis\" /\u003eLand scripts and publish instructions for using cluster telemetry for UseCounter analysis\u003c/h4\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Fix-fast-shutdown-and-PageVisits-issues-in-UseCounters-in-Chrome-54\" /\u003eFix fast shutdown and PageVisits issues in UseCounters in Chrome 54\u003c/h4\u003e\r\n\u003ca href\u003d\"https://crbug.com/597963\"\u003ehttps://crbug.com/597963\u003c/a\u003e, \u003ca href\u003d\"https://crbug.com/236262\"\u003ehttps://crbug.com/236262\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Web-platform-TLs-regularly-use-a-view-of-regression-rates-per-component\" /\u003eWeb platform TLs regularly use a view of regression rates per component\u003c/h4\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Extend-Cluster-telemetry-to-add-new-anlyasis-page-and-support-runs-on-100k-web-pages\" /\u003eExtend Cluster telemetry to add new anlyasis page and support runs on 100k web pages\u003c/h4\u003e\r\nGoal is developers can intuitively and easily schedule analysis runs using Cluster Telemetry's new analysis page.\r\nSpecific AIs: Make CT using swarming. No waiting in queue. Add 200+ VMs to CT pool. Add support for 100k pages.\r\n\u003ca href\u003d\"http://skbug.com/5465\" rel\u003d\"nofollow\"\u003ehttp://skbug.com/5465\u003c/a\u003e, \u003ca href\u003d\"http://skbug.com/5316\" rel\u003d\"nofollow\"\u003ehttp://skbug.com/5316\u003c/a\u003e, \u003ca href\u003d\"http://skbug.com/5245\" rel\u003d\"nofollow\"\u003ehttp://skbug.com/5245\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Remove-or-downgrade-deprecation-warnings-not-on-imminent-path-for-removal\" /\u003eRemove (or downgrade) deprecation warnings not on imminent path for removal\u003c/h4\u003e\r\nGoal is developers can easily tell what things are highly likely to impact them and when\r\n\u003ca href\u003d\"https://crbug.com/568218\"\u003ehttps://crbug.com/568218\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Concrete-plan-for-deprecation-API\" /\u003eConcrete plan for deprecation API\u003c/h4\u003e\r\n\u003ca href\u003d\"https://crbug.com/564071\"\u003ehttps://crbug.com/564071\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Establish-regular-triage-of-Hotlist-PredictabilityInfra-bugs\" /\u003eEstablish regular triage of Hotlist-PredictabilityInfra bugs\u003c/h4\u003e\r\nCombined with hotlist-interop triage?\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch3 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Improve-web-platform-feature-interoperability\" /\u003eImprove web platform feature interoperability\u003c/h3\u003e\r\nPartner with feature teams to invest in improving interop in specific high-return areas (as an exception to the general rule that teams own their own interop).\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Ship-the-unprefixed-Fullscreen-API\" /\u003eShip the unprefixed Fullscreen API\u003c/h4\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Ship-the-fullscreen-top-layer-rewrite\" /\u003eShip the fullscreen top-layer rewrite\u003c/h4\u003e\r\nShared with layout-dev\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Concrete-standards-proposal-and-tests-for-event-loop-behavior\" /\u003eConcrete standards proposal and tests for event loop behavior\u003c/h4\u003e\r\n\u003ca href\u003d\"https://github.com/atotic/event-loop\" rel\u003d\"nofollow\"\u003ehttps://github.com/atotic/event-loop\u003c/a\u003e\r\n\u003cul\u003e\u003cli\u003eLand interop tests for promise resolution behavior, file bugs for failures in all browsers\u003c/li\u003e\r\n\u003cli\u003eSpecify that some events fire just before rAF\u003c/li\u003e\r\n\u003cli\u003eEngage other vendors in discussion about which events should be defined to be coupled to rAF, and to what extent their order should be defined\u003c/li\u003e\r\n\u003cli\u003eWrite interop tests for rAF-coupled events\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-At-least-bi-weekly-triage-of-Hotlist-Interop-issues\" /\u003eAt least bi-weekly triage of Hotlist-Interop issues\u003c/h4\u003e\r\nTriage process here: \u003ca href\u003d\"https://docs.google.com/document/d/1fDE3cFjQta0i7zx7JY1Icx0NNRS20HACz4uKb3Wo3hI/edit?pref\u003d2\u0026amp;pli\u003d1\"\u003ehttps://docs.google.com/document/d/1fDE3cFjQta0i7zx7JY1Icx0NNRS20HACz4uKb3Wo3hI/edit?pref\u003d2\u0026amp;pli\u003d1\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-STRETCH:-Concrete-shipping-plan-for-unprefixed-fullscreen-in-WebKit-EdgeHTML-and-Gecko\" /\u003eSTRETCH: Concrete shipping plan for unprefixed fullscreen in WebKit, EdgeHTML and Gecko\u003c/h4\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch3 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Improve-communication-with-web-developers\" /\u003eImprove communication with web developers\u003c/h3\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Own-chromestatus.com-and-drive-its-improvement\" /\u003eOwn chromestatus.com and drive its improvement\u003c/h4\u003e\r\n\u003cul\u003e\u003cli\u003eTake ownership of codebase, understand its structure\u003c/li\u003e\r\n\u003cli\u003eChromestatus is instrumented and we understand where people are going on the site\u003c/li\u003e\r\n\u003cli\u003eMeet with teams to discuss pain points and areas for improvement for Chromestatus\u003c/li\u003e\r\n\u003cli\u003eBest practices and guidance for using Chromestatus are documented and visible *on Chromestatus*\u003c/li\u003e\r\n\u003cli\u003eMeet with Mozilla, Microsoft, Opera to discuss merging all status trackers\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Create-and-distribute-a-GCS-Endor-survey-to-inform-developer-survey\" /\u003eCreate and distribute a GCS / Endor survey to inform developer survey\u003c/h4\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Reach-consensus-within-Google-on-our-developer-feedback-strategy\" /\u003eReach consensus within Google on our developer feedback strategy\u003c/h4\u003e\r\ngo/webdevfeedback\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-Create-and-distribute-a-comprehensive-developer-survey\" /\u003eCreate and distribute a comprehensive developer survey\u003c/h4\u003e\r\n\u003cul\u003e\u003cli\u003eBuy in from all major parties on survey including primary learnings we want\u003c/li\u003e\r\n\u003cli\u003eFirst draft of survey completed\u003c/li\u003e\r\n\u003cli\u003eFinal draft of survey agreed upon by all major parties\u003c/li\u003e\r\n\u003cli\u003eSurvey distributed and gathering feedback\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ch3 style\u003d\"background-color:transparent;margin:0px;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Reduce-footguns-in-the-web-platform\" /\u003eReduce footguns in the web platform\u003cbr /\u003e\u003c/h3\u003eMake it easier for web developers to reason about behavior of their applications, especially when they're composed of multiple 3rd-party components.\u003c/li\u003e\u003cul style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cli\u003e\u003cb\u003eInitial implementation of Feature Policy (behind a flag)\u003c/b\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003eParse response header to construct policy\u003c/li\u003e\u003cli\u003eRemove features based on policy (document.{write,cookie,domain}, SyncXHR, WebRTC)\u003c/li\u003e\u003cli\u003ePropagate removal to embedded frames\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cb\u003eV1 Feature policy spec feature-complete\u003c/b\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003econverge on v1 set of must-have features\u003c/li\u003e\u003cli\u003efigure out all the spec plumbing and interop bits\u003c/li\u003e\u003cli\u003edraft explainer, engage other browser vendors + developers\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cb\u003eIntegrate permission delegation with feature policy\u003c/b\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003eEnforce API permissions based on parsed feature policy\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5996025621872388790"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/platform-predictability/objectives"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6654841250893954140"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6654841250893954140"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6654841250893954140"}],"author":[{"name":{"$t":"Rick Byers"},"email":{"$t":"rbyers@chromium.org"}}],"sites$pageName":{"$t":"objectives"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3877301813994034020"},"published":{"$t":"2016-11-15T21:27:10.072Z"},"updated":{"$t":"2016-11-15T21:27:10.102Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-15T21:27:10.072Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"software_rendering_architecture.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3877301813994034020"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3877301813994034020"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3877301813994034020"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3877301813994034020"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3877301813994034020"}],"author":[{"name":{"$t":"Adrienne Walker"},"email":{"$t":"enne@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/513140949790892706"},"published":{"$t":"2016-11-15T21:26:33.160Z"},"updated":{"$t":"2016-11-15T21:26:33.192Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-15T21:26:33.160Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"compositing_with_the_gpu_process.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/513140949790892706"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/513140949790892706"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/513140949790892706"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/513140949790892706"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/513140949790892706"}],"author":[{"name":{"$t":"Adrienne Walker"},"email":{"$t":"enne@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6415606718615259676"},"published":{"$t":"2016-11-15T21:25:48.566Z"},"updated":{"$t":"2016-11-15T21:25:48.597Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-15T21:25:48.566Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"the_gpu_process.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6415606718615259676"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6415606718615259676"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6415606718615259676"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6415606718615259676"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6415606718615259676"}],"author":[{"name":{"$t":"Adrienne Walker"},"email":{"$t":"enne@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1293258080881544591"},"published":{"$t":"2016-11-15T21:24:43.324Z"},"updated":{"$t":"2016-11-15T21:24:43.354Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-15T21:24:43.324Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"the_compositing_forest.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1293258080881544591"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1293258080881544591"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1293258080881544591"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1293258080881544591"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1293258080881544591"}],"author":[{"name":{"$t":"Adrienne Walker"},"email":{"$t":"enne@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Xyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"},"published":{"$t":"2011-07-05T22:08:41.735Z"},"updated":{"$t":"2016-11-14T23:57:57.258Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-01-20T11:21:12.760Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"The Trace Event Profiling Tool (about:tracing)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eWhen diagnosing performance problems it can be valuable to see what Chrome is doing \"under the hood.\" One way to get a more detailed view into what's going on is to use the about:tracing tool.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eTracing records activity in Chrome's processes (see \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/multi-process-architecture\"\u003emulti-process architecture\u003c/a\u003e for more on what each process is doing). It records C++ or javascript method signatures in a hierarchical view for each thread in each process. This is a lot of information, but sifting through it can help identify performance bottlenecks, slow operations, and events with irregular lengths (leading to e.g. framerate variation).\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/abouttracing2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"269\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1369778870315/developers/how-tos/trace-event-profiling-tool/abouttracing2.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Getting-Started-Using-about:tracing\" /\u003eGetting Started Using about:tracing\u003c/h2\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs\"\u003eRecording Tracing Runs\u003c/a\u003e; s\u003cspan style\u003d\"background-color:transparent\"\u003etart with this, it's prerequisite for using about:tracing.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer\"\u003eHow to use the Frame Viewer to Bust Jank\u003c/a\u003e; r\u003cspan style\u003d\"background-color:transparent\"\u003eead this next, to understand how to diagnose rendering performance problems.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/rendering-performance-case-study-1\"\u003eJank Case Study 1\u003c/a\u003e; then read this, for further examples of how to effectively use about:tracing in conjunction with the Dev Tools timeline\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003eNote that to understand what's happening in trace events you'll need a basic understanding of how the browser works. The above articles provide enough to get started, but it's recommended to first read at minimum:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/the-rendering-critical-path\"\u003eThe Rendering Critical Path\u003c/a\u003e for a little more background, and...\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank\"\u003eAnatomy of Jank\u003c/a\u003e for precise explanations of various rendering performance problems\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eFurther reading:\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://docs.google.com/a/google.com/presentation/d/1pw9kbUFMD7s9KME8yIsCpCNKaSwjkGa89tt4M5rxIGM/edit\"\u003eA presentation from pdr@\u003c/a\u003e on how to debug the graphics stack with tracing\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/frame-viewer\" style\u003d\"background-color:transparent\"\u003eFrame Viewer Basics\u003c/a\u003e, a short guide for how to navigate the frame viewer view. This is more succinct but less informative than \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer\"\u003eframe viewer how-to\u003c/a\u003e above.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium\"\u003eSaving Skia Pictures\u003c/a\u003e; this is useful if you want to capture isolated SkPictures for the Skia team.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/tracing/docs/memory_infra.md\" style\u003d\"background-color:transparent\"\u003eTracking memory allocations\u003c/a\u003e with memory-infra tracing\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eEven further reading:\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading\"\u003eHow to Understand about:tracing results\u003c/a\u003e (somewhat out of date; refer to the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/using-frameviewer\"\u003eFrame Viewer how-to\u003c/a\u003e instead)\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Contributing-to-about:tracing\" /\u003eContributing to about:tracing\u003c/h2\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eStart by perusing the \u003c/span\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1QADiFe0ss7Ydq-LUNOPpIf6z4KXGuWs_ygxiJxoMZKo/edit#\" style\u003d\"background-color:transparent\"\u003eTracing Ecosystem Explainer\u003c/a\u003e to understand the various different pieces of code involved.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eTo instrument Chrome and add your own custom traces, see \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation\" style\u003d\"color:rgb(85,26,139);background-color:transparent\"\u003eInstrumenting Chromium or Javascript code to get more detail\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003eTo add functionality to the about:tracing viewer itself, see \u003ca href\u003d\"https://github.com/google/trace-viewer/wiki/Contributing\" rel\u003d\"nofollow\"\u003econtributing to trace-viewer\u003c/a\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ca href\u003d\"https://github.com/google/trace-viewer\" rel\u003d\"nofollow\"\u003etrace-viewer\u003c/a\u003e lives in its own repository on GitHub, not in the Chromium tree.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003ePlease file bugs as you find them! If you find any bugs, please \u003ca href\u003d\"https://github.com/google/trace-viewer/issues/new\" rel\u003d\"nofollow\"\u003elet us know\u003c/a\u003e. You review the \u003ca href\u003d\"https://github.com/google/trace-viewer/issues\" rel\u003d\"nofollow\"\u003eknown bugs\u003c/a\u003e as well.\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3702888333079561327"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"}],"author":[{"name":{"$t":"Vincent Scheib"},"email":{"$t":"scheib@chromium.org"}}],"sites$pageName":{"$t":"trace-event-profiling-tool"},"sites$revision":{"$t":"36"}},{"gd$etag":"\"USl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9041942356411587249"},"published":{"$t":"2013-10-10T14:46:36.587Z"},"updated":{"$t":"2016-11-10T00:22:57.993Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-07-24T08:31:29.922Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Acer C720 \u0026 C720P \u0026 C740 Chromebook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Specifications\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eSpecifications\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Developer-Mode\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eDeveloper Mode\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction1\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Entering\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eEntering\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-USB-Boot\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eUSB Boot\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Legacy-Boot\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eLegacy Boot\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Leaving\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003eLeaving\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Troubleshooting\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTroubleshooting\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Legacy-Boot-Doesn-t-Work\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eLegacy Boot Doesn't Work\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-Chromium-OS\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eRunning Chromium OS\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Firmware\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eFirmware\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Disclaimer\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eDisclaimer\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-s-Inside-\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eWhat's Inside?\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eThis page contains information about the \u003ca href\u003d\"https://www.google.com/intl/en/chrome/devices/acer-c720-chromebook/\"\u003eAcer C720 Chromebook\u003c/a\u003e and \u003ca href\u003d\"https://www.google.com/intl/en/chrome/devices/acer-c720p-chromebook/\"\u003eAcer C720P Chromebook\u003c/a\u003e and \u003ca href\u003d\"http://us.acer.com/ac/en/US/content/series/chromebook11c740\" rel\u003d\"nofollow\"\u003eAcer C740 Chromebook\u003c/a\u003e that is interesting and/or useful to software developers. For general information about getting started with developing on Chromium OS (the open-source version of the software on the Chrome Notebook), see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide\"\u003eChromium OS Developer Guide\u003c/a\u003e.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Specifications\" /\u003eSpecifications\u003c/h3\u003e\r\n\u003cul\u003e\u003cli\u003eCPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache\u003c/li\u003e\r\n\u003cli\u003eRAM: 2GiB or 4GiB DDR3 (Not upgradeable)\u003c/li\u003e\r\n\u003cli\u003eDisplay: \u003cspan style\u003d\"background-color:transparent\"\u003e11.6\" TN 1366x768. 220 nits.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eDisk: 16GB SSD (\u003ca href\u003d\"http://en.wikipedia.org/wiki/Next_Generation_Form_Factor\" rel\u003d\"nofollow\"\u003eNGFF\u003c/a\u003e M.2 connector)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eI/O:\u003c/span\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eHDMI port\u003c/li\u003e\r\n\u003cli\u003e1 x USB 2, 1 x USB 3\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://en.wikipedia.org/wiki/Secure_Digital\" rel\u003d\"nofollow\"\u003eSD slot\u003c/a\u003e (SDXC compatible)\u003c/li\u003e\r\n\u003cli\u003eHeadphone/mic combo jack\u003c/li\u003e\r\n\u003cli\u003eCamera \u0026amp; mic\u003c/li\u003e\r\n\u003cli\u003eKeyboard \u0026amp; touchpad\u003c/li\u003e\u003cli\u003eTouchscreen (C720P model)\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eConnectivity:\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eWiFi: 802.11 a/b/g/n\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eUSB ports can handle some Ethernet dongles\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/servo\"\u003eServo header\u003c/a\u003e: \u003c/span\u003eStandard 2x25 / AXK750347G\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://en.wikipedia.org/wiki/Kensington_Security_Slot\" rel\u003d\"nofollow\"\u003eKensington Security Slot\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Developer-Mode\" /\u003eDeveloper Mode\u003c/h2\u003e\r\n\u003cp\u003e\u003cb\u003eCaution: Modifications you make to the system are not supported by Google, may cause hardware, software or security issues and may void warranty.\u003c/b\u003e\u003c/p\u003e\r\n\u003cp\u003eAn unrelated note: Holding just Refresh and poking the Power button hard-resets the machine without entering Recovery. That's occasionally useful, but use it with care - it doesn't sync the disk or shut down politely, so there's a nonzero chance of trashing the contents of your stateful partition.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Introduction1\" /\u003eIntroduction\u003c/h3\u003e\r\n\u003cp\u003eEnabling Developer mode is the first step to tinkering with your Chromebook. With Developer mode enabled you can do things like poke around on a command shell (as root if you want), install Chromium OS, or try other OS's. Note that Developer mode turns off some security features like verified boot and disabling the shell access. If you want to browse in a safer, more secure way, leave Developer mode turned OFF. Note: Switching between Developer and Normal (non-developer) modes will remove user accounts and their associated information from your Chromebook.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Entering\" /\u003eEntering\u003c/h3\u003e\r\n\u003cp\u003eOn this device, both the recovery button and the dev-switch have been virtualized. Our partners don't really like physical switches - they cost money, take up space on the motherboard, and require holes in the case.\u003c/p\u003e\r\n\u003cp\u003eTo invoke Recovery mode, you hold down the \u003cfont color\u003d\"#990000\"\u003eESC\u003c/font\u003e and \u003cfont color\u003d\"#990000\"\u003eRefresh\u003c/font\u003e (F3) keys and poke the \u003cfont color\u003d\"#990000\"\u003ePower\u003c/font\u003e button.\u003c/p\u003e\r\n\u003cp\u003eTo enter Dev-mode you first invoke Recovery, and at the Recovery screen press \u003cfont color\u003d\"#990000\"\u003eCtrl-D\u003c/font\u003e (there's no prompt - you have to know to do it). It will ask you to confirm, then reboot into dev-mode.\u003c/p\u003e\r\n\u003cp\u003eDev-mode works the same as always: It will show the scary boot screen and you need to press \u003cfont color\u003d\"#990000\"\u003eCtrl-D\u003c/font\u003e or wait 30 seconds to continue booting.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-USB-Boot\" /\u003eUSB Boot\u003c/h3\u003e\r\n\u003cp\u003eBy default, USB booting is disabled. Once you are in Dev-mode and have a root shell, you can run:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003esudo crossystem dev_boot_usb\u003d1\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eand reboot once to boot from USB drives with Ctrl-U.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Legacy-Boot\" /\u003eLegacy Boot\u003c/h3\u003e\r\n\u003cp\u003eThis device includes the SeaBIOS firmware which supports booting images directly like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you, nor is it easy to use for beginners. You will need to manually boot/install your alternative system.\u003c/p\u003e\r\n\u003cp\u003eLike USB boot, support for this is disabled by default. You need to get into Dev-mode first and then run:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003esudo crossystem dev_boot_legacy\u003d1\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eand reboot once to boot legacy images with \u003cfont color\u003d\"#990000\"\u003eCtrl-L.\u003c/font\u003e\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Leaving\" /\u003eLeaving\u003c/h3\u003e\r\n\u003cp\u003eTo leave Dev-mode and go back to normal mode, just follow the instructions at the scary boot screen. It will prompt you to confirm.\u003c/p\u003e\r\n\u003cp\u003eIf you want to leave Dev-mode programmatically, you can run \u003ccode\u003ecrossystem disable_dev_request\u003d1; reboot\u003c/code\u003e from a root shell. There's no way to enter Dev-mode programmatically, and just seeing the Recovery screen isn't enough - you have to use the three-finger salute which hard-resets the machine first. That's to prevent a remote attacker from tricking your machine into dev-mode without your knowledge.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Troubleshooting\" /\u003eTroubleshooting\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Legacy-Boot-Doesn-t-Work\" /\u003eLegacy Boot Doesn't Work\u003c/h3\u003e\r\n\u003cp\u003eSometimes it's possible to break the SeaBIOS install in the flash (sometimes doing innocuous things like tweaking the GBB flags). If you do get into such a situation:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eCheck that dev_boot_legacy is set to 1 when you run crossystem\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eIf it isn't, then see the normal Legacy Boot section above\u003c/li\u003e\r\n\u003cli\u003eif it is, then see below\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cp\u003eYou can safely reset the copy of SeaBIOS in your flash by running (as root):\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003e# chromeos-firmwareupdate --sb_extract /tmp\u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e# flashrom -w /tmp/bios.bin -i RW_LEGACY\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Running-Chromium-OS\" /\u003eRunning Chromium OS\u003c/h2\u003e\r\n\r\n\u003cp\u003eBefore you start fiddling with your own builds it is strongly recommend to create a recovery USB stick or SD card. As long as you don't disable hardware write protect on the system \u0026amp; EC firmware, you can get your machine back into working order by entering Recovery Mode and plugging in your recovery image. You can create a recovery image from Chrome OS by browsing to \u003ca href\u003d\"javascript:void(0);\"\u003echrome://imageburner\u003c/a\u003e or follow instructions for other OS on the \u003ca href\u003d\"https://support.google.com/chromebook/answer/1080595?hl\u003den\"\u003eChrome OS help center\u003c/a\u003e site.\u003c/p\u003e\r\n\u003cp\u003eYou can build and run Chromium OS on your Acer C720 (versions R32 and later). Follow the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/quick-start-guide\"\u003equick start guide\u003c/a\u003e to setup a build environment. The board name for the Acer C720 is \"peppy\". Build an image and write it to a USB stick or SD card.\u003c/p\u003e\r\n\r\n\r\n\u003cp\u003eTo boot your image you will first need to enable booting developer signed images from USB (or SD card). Switch your machine to Developer mode and get to a shell by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a user (or guest mode), starting a \"crosh\" shell with Ctrl+Alt+t, and typing \"shell\". Now run \"sudo crossystem dev_boot_usb\u003d1\" and reboot \"sudo reboot\".\u003c/p\u003e\r\n\u003cp\u003ePlug your USB stick or SD card in and on the scary \"OS Verification is OFF\" screen hit Ctrl+u to boot from external media. If all goes well you should see a \"Chromium OS\" logo screen. If you want to install your build to the SSD, open a shell and type \"sudo /usr/sbin/chromeos-install\". Note: This will replace EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock Chrome OS build.\u003c/p\u003e\r\n\u003cp\u003eHave fun!\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware\" /\u003eFirmware\u003c/h2\u003e\r\n\u003cp\u003eThis device uses \u003ca href\u003d\"http://www.coreboot.org/\" rel\u003d\"nofollow\"\u003ecoreboot\u003c/a\u003e to boot the system. You can find the source in the \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-falco_peppy-4389.B\"\u003eChromium OS coreboot git tree\u003c/a\u003e in the \u003ccode\u003efirmware-falco_peppy-4389.B\u003c/code\u003e branches.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Disclaimer\" /\u003eDisclaimer\u003c/h2\u003e\r\n\u003cp\u003e\u003cb\u003eCaution: Modifications you make to your Chromebook's hardware or software are not supported by Google, may compromise your online \u003c/b\u003e\u003cb\u003esecurity\u003c/b\u003e\u003cb\u003e, and may void your warranty....now on to the fun stuff.\u003c/b\u003e\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-What-s-Inside-\" /\u003eWhat's Inside?\u003c/h2\u003e\r\n\u003cp\u003eTaking apart your Chromebook is \u003cb\u003enot\u003c/b\u003e encouraged. If you have hardware troubles, please seek assistance first from an authorized center. Be advised that disassembly might void warranties or other obligations, so please consult any and all paperwork your received first. If you \u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003e just want to see what the inside looks like, gaze upon this (\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png?attredirects\u003d0\"\u003ehigh-res version\u003c/a\u003e):\u003c/span\u003e\u003c/p\u003e\r\n\u003cimg alt\u003d\"c720 innards\" border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1381990807648/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png\" style\u003d\"display:block;margin:5px auto 0px;text-align:center\" /\u003e\u003cbr /\u003e\r\n\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003eCPU\u003c/li\u003e\r\n\u003cli\u003eRAM\u003c/li\u003e\r\n\u003cli\u003eSystem firmware. 8MB SPI Flash.\u003c/li\u003e\r\n\u003cli\u003eNGFF (M.2) SSD\u003c/li\u003e\r\n\u003cli\u003eBattery enable switch\u003c/li\u003e\r\n\u003cli\u003eBattery enable screw\u003c/li\u003e\r\n\u003cli\u003eWrite-protect screw\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/servo\"\u003eServo debug header\u003c/a\u003e (probably missing on your machine)\u003c/li\u003e\r\n\u003cli\u003eNGFF (M.2) WWAN connector (probably missing on your machine)\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cp\u003e\r\nNotes:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eWhile it is possible to replace the NGFF (M.2) SSD, compatibility is not guaranteed. Reliability and power use may vary. If you install Chrome OS using a recovery image, the recovery process will partition the drive to use the full capacity.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eThe battery enable switch and battery enable screw are a safety mechanism to prevent the Acer C720 from being powered by the battery while the cover is removed. Either the swich must be pressed OR a screw inserted into #6 to power the device from the battery.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eThe debug header (probably missing) has access to all sorts of useful things like a serial UART from the EC and PCH, JTAG for the EC, and SPI for the system firmware. \u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eThe NGFF (M.2) WWAN connector (probably missing on WiFi models) has enabled USB + PCIe lines and connections to the SIM card reader.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eThe NGFF (M.2) WWAN connector cannot be connected to a SATA device as its SATA pins are not connected to the PCH.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2461203149256614225"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9041942356411587249"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9041942356411587249"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9041942356411587249"}],"author":[{"name":{"$t":"Mike Frysinger"},"email":{"$t":"vapier@chromium.org"}}],"sites$pageName":{"$t":"acer-c720-chromebook"},"sites$revision":{"$t":"28"}},{"gd$etag":"\"XSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/324211649192664036"},"published":{"$t":"2013-10-30T13:23:21.876Z"},"updated":{"$t":"2016-11-09T20:56:54.355Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-09T20:56:52.297Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Using breakpad with content shell"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis content now lives at \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/testing/using_breakpad_with_content_shell.md\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/testing/using_breakpad_with_content_shell.md\u003c/a\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/119541804460292484"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/324211649192664036"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/324211649192664036"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/324211649192664036"}],"author":[{"name":{"$t":"Jochen Eisinger"},"email":{"$t":"jochen@chromium.org"}}],"sites$pageName":{"$t":"using-breakpad-with-content-shell"},"sites$revision":{"$t":"14"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2598314845547252855"},"published":{"$t":"2016-06-20T16:21:00.601Z"},"updated":{"$t":"2016-11-08T03:13:47.209Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-11-08T03:13:44.145Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"A further update on SHA-1 certificates in Chrome"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eWe’ve previously made \u003c/span\u003e\u003ca href\u003d\"https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html\" style\u003d\"background-color:transparent;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eseveral\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html\" style\u003d\"background-color:transparent;font-size:10pt;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eannouncements\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e about Google Chrome's deprecation plans for SHA-1 certificates. This post provides an update on the final removal of support.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThe SHA-1 cryptographic hash algorithm first \u003c/span\u003e\u003ca href\u003d\"https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eshowed signs of weakness\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e over eleven years ago and \u003c/span\u003e\u003ca href\u003d\"https://eprint.iacr.org/2015/967\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003erecent research\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e points to the imminent possibility of attacks that could directly impact the integrity of the Web PKI. To protect users from such attacks, Chrome will stop trusting certificates that use the SHA-1 algorithm, and visiting a site using such a certificate will result in an interstitial warning.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eRelease schedule\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWe are planning to remove support for SHA-1 certificates in Chrome 56, which will be released to the stable channel \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/developers/calendar\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003earound the end of January 2017\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e. The removal will follow the \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/getting-involved/dev-channel\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome release process\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e, moving from Dev to Beta to Stable; there won't be a date-based change in behaviour.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWebsite operators are urged \u003c/span\u003e\u003ca href\u003d\"https://www.ssllabs.com/ssltest/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eto check\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e for the use of SHA-1 certificates and immediately contact their CA for a SHA-256 based replacement if any are found.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eSHA-1 use in private PKIs\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ePrevious posts made a distinction between certificates which chain to a public CA and those which chain to a locally installed trust anchor, such as those of a private PKI within an enterprise. We recognise there might be rare cases where an enterprise wishes to make their own risk management decision to continue using SHA-1 certificates.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eStarting with \u003c/span\u003e\u003ca href\u003d\"https://googlechromereleases.blogspot.com/2016/10/stable-channel-update-for-desktop.html\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome 54\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e we provide the \u003c/span\u003e\u003ca href\u003d\"https://www.chromium.org/administrators/policy-list-3#EnableSha1ForLocalAnchors\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Courier New;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eEnableSha1ForLocalAnchors\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://support.google.com/chrome/a/answer/187202\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003epolicy\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e that allows certificates which chain to a locally installed trust anchor to be used after support has otherwise been removed from Chrome. Features which\u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#1155cc;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003erequire a secure origin\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e, such as geolocation, will continue to work, and SHA-1 client certificates will still be presented to websites requesting client authentication, however pages will be displayed as “neutral, lacking security”. Without this policy set, SHA-1 certificates that chain to locally installed roots will not be trusted starting with Chrome 57, which will be released to the stable channel in March 2017.\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eSince this policy is intended only to allow additional time to complete the migration away from SHA-1, it will eventually be removed in the first Chrome release after January 1st 2019. \u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:#ffffff;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eAs Chrome makes use of certificate validation libraries provided by the host OS when possible, this option will have no effect if the underlying cryptographic library disables support for SHA-1 certificates; at that point, they will be unconditionally blocked. We may also remove support before 2019 if there is a catastrophic cryptographic break of SHA-1. Enterprises are encouraged to make every effort to stop using SHA-1 certificates as soon as possible and to consult with their security team before enabling the policy.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5354542157328448607"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/education/tls/sha-1"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2598314845547252855"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2598314845547252855"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2598314845547252855"}],"author":[{"name":{"$t":"Andrew Whalley"},"email":{"$t":"awhalley@chromium.org"}}],"sites$pageName":{"$t":"sha-1"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3877763250120499625"},"published":{"$t":"2016-10-29T01:03:08.568Z"},"updated":{"$t":"2016-10-29T01:03:08.594Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-29T01:03:08.568Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"f3a.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3877763250120499625"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8916636704403410309"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3877763250120499625"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3877763250120499625"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3877763250120499625"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3877763250120499625"}],"author":[{"name":{"$t":"Paul Irish"},"email":{"$t":"paulirish@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"},"published":{"$t":"2016-10-13T16:03:40.741Z"},"updated":{"$t":"2016-10-14T13:21:17.908Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-14T13:21:15.773Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Boot mainline kernel on veyron-jaq"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Note:-work-in-progress.\" /\u003eNote: work in progress.\u003c/h2\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-ChromiumOS\" /\u003eChromiumOS\u003c/h2\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Setup\" /\u003eSetup\u003c/h4\u003e\u003cp\u003eFollow the instructions in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide\" target\u003d\"_blank\"\u003eChromium OS Developer Guide\u003c/a\u003e, the tl;dr version being:\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003emkdir ~/s/chromium\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003ecd ~/s/chromium\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003erepo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003erepo sync -j50\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Build\" /\u003eBuild\u003c/h4\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003ecros_sdk # to enter chroot\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eBOARD\u003dveyron_jaq\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e./setup_board --board\u003d$BOARD\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e./build_packages --board\u003d$BOARD\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e./build_image --board\u003d$BOARD --noenable_rootfs_verification --enable_serial\u003dttyS2 test\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware\" /\u003eFirmware\u003c/h2\u003eBuild netboot firmware for veyron to pull kernel image and command line from a tftp share on the network. Do the following inside the chroot:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cb\u003eNote: \u003c/b\u003eThe following uses a servo to update firmware. I think you can do the flashrom command on the device itself, but that introduces a brick risk.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003ecros_sdk # to enter chroot\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eBOARD\u003dveyron_jaq\u003c/font\u003e\u003c/code\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eTFTP\u003d\u0026lt;tftpserver\u0026gt;\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eFTP_FOLDER\u003d${BOARD}\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eBOOTFILE\u003d${FTP_FOLDER}/vmlinuz\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eARGSFILE\u003d${FTP_FOLDER}/cmdline\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eBIOS\u003d/build/${BOARD}/firmware/image.net.bin\u003c/font\u003e\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eemerge-${BOARD} chromeos-ec libpayload depthcharge coreboot chromeos-bootimage\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003esudo gbb_utility -s --flags\u003d0x239 ${BIOS}\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003esudo ~/trunk/src/platform/factory/setup/update_firmware_settings.py \\\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e -i ${BIOS} \\\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e --tftpserverip\u003d${TFTP} \\\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e --bootfile\u003d${BOOTFILE} \\\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e --argsfile\u003d${ARGSFILE}\u003cbr /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003edut-control \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003ewarm_reset:on \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_buf_en:on \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_buf_on_flex_en:on \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_vref:pp1800\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003esudo flashrom \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e-p ft2232_spi:type\u003dservo-v2${SERIAL_SERVO} \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e--verbose \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e-w ${BIOS}\u003cbr /\u003e\u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003edut-control \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_buf_en:off \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_buf_on_flex_en:off \u003c/font\u003e\u003c/code\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003espi2_vref:off warm_reset:off\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC--\" /\u003e\u003cfont size\u003d\"2\"\u003e \u003c/font\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Kernel\" /\u003eKernel\u003c/h2\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Setup1\" /\u003eSetup\u003c/h4\u003e\u003cp\u003ePull down a copy of mainline and use multiv7 defconfig (a .config is also attached to this page, but will likely be stale by the time of reading)\u003c/p\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003emkdir ~/s/kernel\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003ecd ~/s/kernel\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003egit clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git .\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eARCH\u003darm CROSS_COMPILE\u003darm-linux-gnueabi- make O\u003d.build_multiv7 multiv7_defconfig\u003c/font\u003e\u003c/code\u003e\u003c/p\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Download-the-its-file-attachment-to-this-page-and-store-it-in-s-kernel-.build_mutliv7\" /\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003eDownload the its file attachment to this page and store it in ~/s/kernel/.build_mutliv7\u003c/span\u003e\u003c/h4\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Build-Deploy\" /\u003eBuild \u0026amp; Deploy\u003c/h4\u003e\u003cdiv\u003eCompile your kernel\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003eARCH\u003darm CROSS_COMPILE\u003darm-linux-gnueabi- make O\u003d.build_multiv7 -j40\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eCreate a fit image for veyron-jaq that contains the kernel and the device tree\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003emkimage -D \"-I dts -O dtb -p 2048\" -f rk3228-veyron-jaq.its arch/arm/boot/vmlinuz\u003c/font\u003e\u003c/code\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eCopy the fit image to your tftp share\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"2\"\u003escp arch/arm/boot/vmlinuz \u0026lt;tftpserver\u0026gt;:/tftpboot/veyron_jaq\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2671492693639094436"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4061537406890692522/4"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"}],"author":[{"name":{"$t":"Sean Paul"},"email":{"$t":"seanpaul@chromium.org"}}],"sites$pageName":{"$t":"boot-mainline-kernel-on-veyron-jaq"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4350250841648934561"},"published":{"$t":"2012-05-23T19:58:06.034Z"},"updated":{"$t":"2016-10-14T09:00:59.830Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-14T09:00:57.888Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Protobuf-encoded policy blobs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eCloud policy blobs encode policy settings in a protobuf format, protected with a signature. The signature facilitates authenticity checks, the key pair is typically created and owned by the entity managing the device or user. Policy blobs are also used as the canonical format for device settings on Chromium OS. They are stored on disk by session_manager, which also takes care of authenticating incoming protobufs.\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Structure\" /\u003eStructure\u003c/h2\u003e\r\n\u003cdiv\u003eThe term \"policy blob\" usually refers to a binary-encoded \u003cfont face\u003d\"courier new, monospace\"\u003ePolicyFetchResponse\u003c/font\u003e protobuf message as defined here: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/components/policy/proto/+/master/device_management_backend.proto\"\u003ehttps://chromium.googlesource.com/chromium/src/components/policy/proto/+/master/device_management_backend.proto\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThis protobuf message is a nested structure and contains binary-encoded payload protobufs. The layers are as follows:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePolicyFetchResponse\u003c/font\u003e is the outer protobuf. It wraps the actual payload - a \u003cfont face\u003d\"courier new, monospace\"\u003ePolicyData\u003c/font\u003e protobuf message - in binary form and includes a signature that's computed on the payload binary. It also contains fields for shipping a new key in case of key rotation. Rotation requires the signature on the new key to verify against the old key.\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePolicyData\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e hosts a fair amount of meta data about the policy, such as policy type, timestamps, intended receiver etc. These are used for further validity checks. The actual policy values are nested in the binary \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003epolicy_value\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e field. The field contains a binary-encoded protobuf, it's message type depends on the policy type.\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eCloudPolicySettings\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e message type is used for user-level policy, which is indicated by type \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003egoogle/chromeos/user\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. The protobuf definition is generated at compile time from \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003echrome/app/policy/policy_templates.json\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/policy/resources/policy_templates.json\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/components/policy/resources/policy_templates.json\u003c/a\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eChromium OS device policy is handled by \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eChromeDeviceSettingsProto\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e defined in \u003c/font\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/chrome/browser/chromeos/policy/proto/+/master/chrome_device_policy.proto\" style\u003d\"font-family:arial,sans-serif\"\u003ehttps://chromium.googlesource.com/chromium/src/chrome/browser/chromeos/policy/proto/+/master/chrome_device_policy.proto\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and is applicable if the policy type is \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003egoogle/chromeos/device\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e.\u003c/font\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Manipulating-binary-blobs\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eManipulating binary blobs\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBinary policy blobs are stored on Chromium OS in these locations:\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e/var/lib/whitelist/policy\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e - device policy blob\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e/home/root/\u0026lt;user-hash\u0026gt;/session_manager/policy/policy\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e - user policy blob\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eTo manipulate these files, the \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eprotoc\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e compiler (part of the protobuf distribution) comes in handy, as it is capable of decoding and encoding binary protobuf messages to and from human-readable text format. We have some tools that can help with this:\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eA pair of scripts, \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003edecode_policy_blob.sh\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eencode_policy_blob.sh\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, which breaks up the policy blob and decode the individual layers. Copies of the scripts are attached, you might have to adjust the \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePROTO_DIR\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e variable depending on the environment you use the scripts in. It needs to point at a directory containing the proto definition files, which are typically installed in \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e/usr/include/proto\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e a Chromium OS build chroot. When run, the scripts operate on text files in the current directory containing the textual protobuf representations for the individual layers:\u003c/font\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003epolicy_response.txt\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e for \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePolicyFetchResponse\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003epolicy_data.txt\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e for \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003ePolicyData\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003echrome_device_policy.txt\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e for \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eChromeDeviceSettingsProto\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e (note that user policy is currently not supported, but that should be straightforward to add)\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cfont face\u003d\"arial, sans-serif\"\u003eNote that re-encoding the policy uses a key for the signature that is hard-coded in the encoding script, so you might have to swap in the appropriate owner key.\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eA tool called \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003epolicy_reader,\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e which is installed on production images and dumps the current device policy blob in textual representation.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5063750816341369735"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/enterprise/protobuf-encoded-policy-blobs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4350250841648934561"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4350250841648934561"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4350250841648934561"}],"author":[{"name":{"$t":"Mattias Nissler"},"email":{"$t":"mnissler@chromium.org"}}],"sites$pageName":{"$t":"protobuf-encoded-policy-blobs"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4197453861091682083"},"published":{"$t":"2016-10-13T16:11:18.638Z"},"updated":{"$t":"2016-10-13T16:11:18.661Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-13T16:11:18.638Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"cmdline"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4197453861091682083"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/cmdline"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4197453861091682083"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4197453861091682083"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4197453861091682083"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4197453861091682083"}],"author":[{"name":{"$t":"Sean Paul"},"email":{"$t":"seanpaul@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7864897190246160289"},"published":{"$t":"2016-10-13T16:08:35.385Z"},"updated":{"$t":"2016-10-13T16:08:35.417Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-13T16:08:35.385Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"rk3228-veyron-jaq.its"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7864897190246160289"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/rk3228-veyron-jaq.its"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7864897190246160289"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7864897190246160289"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7864897190246160289"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7864897190246160289"}],"author":[{"name":{"$t":"Sean Paul"},"email":{"$t":"seanpaul@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4604461178282394385"},"published":{"$t":"2016-10-13T16:04:36.795Z"},"updated":{"$t":"2016-10-13T16:04:36.819Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-13T16:04:36.795Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":".config"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4604461178282394385"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2671492693639094436"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/.config"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4604461178282394385"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4604461178282394385"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4604461178282394385"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4604461178282394385"}],"author":[{"name":{"$t":"Sean Paul"},"email":{"$t":"seanpaul@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Wyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6778966690321791736"},"published":{"$t":"2013-08-01T05:08:16.131Z"},"updated":{"$t":"2016-10-07T07:43:29.270Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-07T07:43:27.309Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Blink Networking APIs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack\" style\u003d\"font-size:10pt\"\u003eSee here for Chromium Network Stack team info\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"goog_1365028860\"\u003e\u003cbr /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1PN8RN9NESiOtVzMWZf1f94H85Nf6Sfs9Lc9xgAsjVsU/edit\"\u003ehttps://docs.google.com/document/d/1PN8RN9NESiOtVzMWZf1f94H85Nf6Sfs9Lc9xgAsjVsU/edit\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003ch4 class\u003d\"sites-embed-title\"\u003eBlink Networking APIs\u003c/h4\u003e\u003cdiv class\u003d\"sites-embed-object-title\" style\u003d\"display:none;\"\u003eBlink Networking APIs\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-writely\"\u003e\u003ciframe src\u003d\"http://docs.google.com/document/preview?hgd\u003d1\u0026amp;id\u003d1PN8RN9NESiOtVzMWZf1f94H85Nf6Sfs9Lc9xgAsjVsU\" width\u003d\"100%\" height\u003d\"600\" title\u003d\"Blink Networking APIs\" frameborder\u003d\"0\" /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/blink-network-stack"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6778966690321791736"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6778966690321791736"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6778966690321791736"}],"author":[{"name":{"$t":"Takeshi Yoshino"},"email":{"$t":"tyoshino@chromium.org"}}],"sites$pageName":{"$t":"blink-network-stack"},"sites$revision":{"$t":"32"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/771281310329319686"},"published":{"$t":"2016-10-06T10:37:32.318Z"},"updated":{"$t":"2016-10-06T10:37:32.350Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-06T10:37:32.318Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"mmd_monitor_root.crt"},"summary":{},"content":{"type":"application/x-x509-ca-cert","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/771281310329319686"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4216105588793844107"},{"rel":"alternate","type":"application/x-x509-ca-cert","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/certificate-transparency/log-policy/mmd_monitor_root.crt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/771281310329319686"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/771281310329319686"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/771281310329319686"},{"rel":"edit-media","type":"application/x-x509-ca-cert","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/771281310329319686"}],"author":[{"name":{"$t":"Eran Messeri"},"email":{"$t":"eranm@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7848392314331072266"},"published":{"$t":"2015-07-22T22:43:23.064Z"},"updated":{"$t":"2016-10-04T15:32:28.278Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-04T15:32:26.517Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Eclipse Configuration for Android"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMoved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src.git/+/master/docs/eclipse.md\"\u003ehttps://chromium.googlesource.com/chromium/src.git/+/master/docs/eclipse.md\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/android-eclipse-dev"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7848392314331072266"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7848392314331072266"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7848392314331072266"}],"author":[{"name":{"$t":"Newton Allen"},"email":{"$t":"newt@chromium.org"}}],"sites$pageName":{"$t":"android-eclipse-dev"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"Wil7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/545622259474463805"},"published":{"$t":"2014-12-16T03:50:49.298Z"},"updated":{"$t":"2016-10-03T19:17:48.564Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-10-03T19:17:47.227Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"WebCrypto"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Accessing-it\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAccessing it\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Standards-compliance\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eStandards compliance\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Reporting-bugs\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eReporting bugs\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Supported-algorithms-as-of-Chrome-53-\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eSupported algorithms (as of Chrome 53)\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-RSA-support\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eRSA support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-AES-support\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eAES support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-EC-support\"\u003e\u003cstrong\u003e4.3 \u003c/strong\u003eEC support\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Supported-key-formats\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eSupported key formats\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Examples-of-how-to-use-WebCrypto\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eExamples of how to use WebCrypto\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Usage-data-for-WebCrypto\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eUsage data for WebCrypto\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Chromium-developer-s-guide\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eChromium developer's guide\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Code-location-reference\"\u003e\u003cstrong\u003e8.1 \u003c/strong\u003eCode location reference\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-the-Chromium-unit-tests\"\u003e\u003cstrong\u003e8.2 \u003c/strong\u003eRunning the Chromium unit-tests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Running-the-Blink-LayoutTests\"\u003e\u003cstrong\u003e8.3 \u003c/strong\u003eRunning the Blink LayoutTests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-cd-src-third_party-WebKitninja--C-out-Debug-blink_tests.-Tools-Scripts-run-webkit-tests---debug-crypto\"\u003e\u003cstrong\u003e8.4 \u003c/strong\u003ecd src/third_party/WebKitninja -C out/Debug blink_tests./Tools/Scripts/run-webkit-tests --debug crypto\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Getting-XOpenDisplay-failed-when-running-unittests\"\u003e\u003cstrong\u003e8.5 \u003c/strong\u003eGetting \"XOpenDisplay failed\" when running unittests\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-Accessing-it\" /\u003e\u003cfont size\u003d\"4\"\u003eAccessing it\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli style\u003d\"font-size:13.3333px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eThe WebCrypto API was enabled by default starting in \u003c/span\u003e\u003cb style\u003d\"font-size:small;background-color:transparent\"\u003eChrome 37 \u003c/b\u003e\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003e(August 26, 2014)\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:13.3333px;text-align:left\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eAccess to the WebCrypto API is restricted to \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/Home/chromium-security/security-faq#TOC-Which-origins-are-secure-\" style\u003d\"color:rgb(85,26,139);background-color:transparent\"\u003esecure origins\u003c/a\u003e (which is to say https:// pages).\u003c/font\u003e\u003c/li\u003e\u003cul\u003e\u003cli style\u003d\"text-align:left\"\u003e\u003cfont size\u003d\"2\"\u003eNote: \u003ca href\u003d\"https://github.com/w3c/webcrypto/issues/28\" rel\u003d\"nofollow\"\u003eIn the spec\u003c/a\u003e, \u003cfont face\u003d\"courier new, monospace\"\u003ecrypto.subtle\u003c/font\u003e is supposed to be \u003cfont face\u003d\"courier new, monospace\"\u003eundefined\u003c/font\u003e in insecure contexts, whereas in Chrome it is defined however any operation on it fails with NotSupportedError. (This will be updated in the future).\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"font-size:13.3333px;text-align:left\"\u003e\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\r\n\u003ch2 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-Standards-compliance\" /\u003e\u003cfont size\u003d\"4\"\u003eStandards compliance\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont size\u003d\"2\"\u003eChromium's implementation follows the \u003ca href\u003d\"https://w3c.github.io/webcrypto/Overview.html\" rel\u003d\"nofollow\"\u003eWeb Cryptography API Editor's Draft\u003c/a\u003e.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"2\"\u003eBe sure to refer to the copy of the spec on github \u003cb\u003eNOT the one hosted on w3c.org\u003c/b\u003e.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"2\"\u003eThe version on w3c.org is horribly out of date (as of October 3 2016).\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Reporting-bugs\" /\u003e\u003cfont size\u003d\"4\"\u003eReporting bugs\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eIssues with the implementation should be filed on \u003ca href\u003d\"https://code.google.com/p/chromium/issues/list\"\u003eChromium's bug tracker\u003c/a\u003e, and given the component \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/list?q\u003dcomponent:Blink%3EWebCrypto\" style\u003d\"font-size:small\"\u003eBlink\u0026gt;WebCrypto\u003c/a\u003e\u003cspan style\u003d\"font-size:small\"\u003e.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003eIssues with the\u003c/span\u003e\u003cspan style\u003d\"font-size:small\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://w3c.github.io/webcrypto/Overview.html\" style\u003d\"font-size:small\" rel\u003d\"nofollow\"\u003eWeb Cryptography specification\u003c/a\u003e should be filed on the \u003ca href\u003d\"https://github.com/w3c/webcrypto/issues\" rel\u003d\"nofollow\"\u003egithub\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-Supported-algorithms-as-of-Chrome-53-\" /\u003e\u003cfont size\u003d\"4\"\u003eSupported algorithms (as of Chrome 53)\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe WebCrypto specification does not mandate any particular algorithms.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eAt this time Chromium implements all of the algorithms described by the main specification:\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:justify\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:center;width:206px;height:21px\"\u003e\u003cb\u003e Algorithm\u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center;width:110px;height:21px\"\u003e\u003cb\u003e Supported\u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center;width:260px;height:21px\"\u003e\u003cb\u003e Notes\u003c/b\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:26px\"\u003e\u003cfont size\u003d\"3\"\u003e RSASSA-PKCS1-v1_5\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:26px\"\u003e \u003cfont color\u003d\"#38761d\"\u003eYES\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:26px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e RSA-PSS \u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e RSA-OAEP\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e ECDSA\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e ECDH\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-CTR\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-CBC\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-GCM\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-KW\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e HMAC\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e SHA-1\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e SHA-256\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e SHA-384\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e SHA-512\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e HKDF\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:left;width:260px;height:21px\"\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:206px;height:21px\"\u003e PBKDF2\u003c/td\u003e\r\n\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eYES\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:260px;height:21px\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:justify\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eAbandoned algorithms\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eEarlier drafts of the specification contained additional algorithms, which have since been pulled from both the spec and from Chromium's implementation:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cblockquote style\u003d\"font-size:13.3333px;text-align:start;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003e\u003cdiv style\u003d\"text-align:justify\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003e\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"text-align:center;width:206px;height:21px\"\u003e\u003cb\u003e Algorithm\u003c/b\u003e\u003c/td\u003e\u003ctd style\u003d\"text-align:center;width:110px;height:21px\"\u003e\u003cb\u003e Supported\u003c/b\u003e\u003c/td\u003e\u003ctd style\u003d\"text-align:center;width:260px;height:21px\"\u003e\u003cb\u003e Notes\u003c/b\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-CMAC\u003c/td\u003e\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(255,0,0)\"\u003eNO\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:260px;height:21px\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec\u003c/li\u003e\u003cli\u003eWas never implemented by Chrome\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:206px;height:21px\"\u003e AES-CFB\u003c/td\u003e\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(255,0,0)\"\u003eNO\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:260px;height:21px\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec\u003c/li\u003e\u003cli\u003eWas never implemented by Chrome\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:206px;height:21px\"\u003e Diffie-Hellman\u003c/td\u003e\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cfont color\u003d\"#ff0000\"\u003eNO\u003c/font\u003e\u003c/td\u003e\u003ctd style\u003d\"width:260px;height:21px\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec\u003c/li\u003e\u003cli\u003eWas never implemented by Chrome\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:206px;height:21px\"\u003e Concat KDF\u003c/td\u003e\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(255,0,0)\"\u003eNO\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:260px;height:21px\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec\u003c/li\u003e\u003cli\u003eWas never implemented by Chrome\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:206px;height:21px\"\u003e HKDF-CTR\u003c/td\u003e\u003ctd style\u003d\"width:110px;height:21px\"\u003e \u003cspan style\u003d\"color:rgb(255,0,0)\"\u003eNO\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"text-align:left;width:260px;height:21px\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec\u003c/li\u003e\u003cli\u003eWas never implemented by Chrome\u003c/li\u003e\u003cli\u003eThe spec has redefined this as \u003ca href\u003d\"https://github.com/w3c/webcrypto/issues/27\" style\u003d\"background-color:transparent\" rel\u003d\"nofollow\"\u003eredefined this as HKDF\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e RSAES-PKCS1-v1_5\u003c/td\u003e\u003ctd\u003e \u003cspan style\u003d\"color:rgb(255,0,0)\"\u003eNO\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"text-align:left\"\u003e\u003cul\u003e\u003cli\u003eNo longer part of the spec.\u003c/li\u003e\u003cli\u003eChrome supported this in early days before Web Crypto was enabled by default, but has since dropped support.\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv style\u003d\"font-size:13.3333px;text-align:start\"\u003e\u003cdiv style\u003d\"text-align:justify\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003ch3 style\u003d\"text-align:justify\"\u003e\u003ca name\u003d\"TOC-RSA-support\" /\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003eRSA support\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(51,51,51);font-family:Lucida Grande,Lucida Sans Unicode,sans-serif;line-height:22px;background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003eThe modulus length must be a multiple of 8 bits\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"line-height:22px\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003eThe modulus length must be \u0026gt;\u003d 256 \u003cspan style\u003d\"background-color:transparent\"\u003e and \u0026lt;\u003d 16384 bits\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px;background-color:transparent\"\u003eWhen \u003ci\u003egenerating\u003c/i\u003e RSA keys the public exponent must be \u003c/span\u003e\u003cspan style\u003d\"line-height:22px\"\u003e3 or 65537. This limitation does not apply when importing keys.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003ch3 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-AES-support\" /\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003eAES support\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eThe supported key sizes are:\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003e128 bits\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003e256 bits\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"text-align:left\"\u003e\u003cfont color\u003d\"#ff0000\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003e192 bit AES keys are not supported\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003ch3 style\u003d\"text-align:left\"\u003e\u003ca name\u003d\"TOC-EC-support\" /\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:22px\"\u003eEC support\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eThe supported \u003ca href\u003d\"https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-NamedCurve\" rel\u003d\"nofollow\"\u003enamedCurves\u003c/a\u003e are:\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eP-256\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eP-384\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eP-521\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Supported-key-formats\" /\u003e\u003cfont color\u003d\"#333333\" face\u003d\"Lucida Grande, Lucida Sans Unicode, sans-serif\" size\u003d\"4\"\u003e\u003cspan style\u003d\"line-height:22px\"\u003eSupported key formats\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eChromium's WebCrypto implementation supports all of the key formats - \"raw\", \"spki\", \"pkcs8\", \"jwk\", with the following caveats:\u003cbr /\u003e\u003cbr /\u003e\u003cul\u003e\u003cli\u003eThere are differences in DER key format handling between Web Crypto implementations. Where possible for compatibility prefer using \"raw\" keys or \"jwk\" which have better interoperability.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eWhen importing/exporting \"spki\" and \"pkcs8\" formats, the only OIDs supported by Chromiumare those recognized by OpenSSL/BoringSSL.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eImporting ECDH keys \u003c/span\u003e\u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/detail?id\u003d532728\" style\u003d\"font-size:10pt;background-color:transparent\"\u003edoes not accept id-ecDH\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. The OID must instead be id-ecPublicKey (This can cause problems importing keys generated by Firefox; use \"raw\" EC keys as a workaround; Chromium in this case is not spec compliant)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eImporting RSA-PSS keys does not accept id-RSASSA-PSS. The OID must instead be rsaEncryption\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eImporting RSA-OAEP keys does not accept id-RSAES-OAEP. The OID must instead be rsaEncryption.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eExporting ECDH keys uses OID id-ecPublicKey, whereas the WebCrypto spec says to use id-ecDH.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eExporting RSA-PSS keys uses OID rsaEncryption, whereas the WebCrypto spec says to use RSA-PSS.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eExporting RSA-OAEP keys uses OID rsaEncryption, whereas the WebCrypto spec says to use id-RSAES-OAEP.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Examples-of-how-to-use-WebCrypto\" /\u003e\u003cfont size\u003d\"4\"\u003eExamples of how to use WebCrypto\u003c/font\u003e\u003c/h2\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eSome examples of using WebCrypto can be found in the \u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/master/LayoutTests/crypto/\"\u003eBlink LayoutTests\u003c/a\u003e.\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e(These can't be run directly in the browser because they access functionality from the test harness, however it gives an idea of how to call the various operations)\u003c/font\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Usage-data-for-WebCrypto\" /\u003e\u003cfont size\u003d\"4\"\u003eUsage data for WebCrypto\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eGoogle Chrome measures how commonly WebCrypto algorithms and methods are across web pages.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nTo explore the data use the \u003ca href\u003d\"https://www.chromestatus.com/metrics/feature/popularity\"\u003eChromium feature stack rank dashboard\u003c/a\u003e. This counts the number of pageloads that made use of the given feature (internal users can navigate an equivalent histogram using \"WebCore.FeatureObserver\").\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFor details on how the metrics are measured read the comment block in \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/modules/crypto/CryptoHistograms.h\"\u003eCryptoHistograms.h\u003c/a\u003e.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nHere is the co\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003errespondence between the feature names found on the \u003c/span\u003e\u003ca href\u003d\"https://www.chromestatus.com/metrics/feature/popularity\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eChromium feature stack rank dashboard\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and WebCrypto's operations/algorithms:\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"font-size:10pt;border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px;background-color:transparent\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e\u003cfont size\u003d\"3\"\u003e \u003c/font\u003e\u003cb style\u003d\"color:rgb(51,51,51);font-family:Lucida Grande,Lucida Sans Unicode,sans-serif;font-size:15px;line-height:22px;text-align:center\"\u003eFeature\u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e \u003c/font\u003e\u003c/b\u003e\u003cb style\u003d\"text-align:center;color:rgb(51,51,51);font-family:Lucida Grande,Lucida Sans Unicode,sans-serif;font-size:15px;line-height:22px\"\u003eWebCrypto method\u003c/b\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoGetRandomValues\u003c/code\u003e \u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.getRandomValues()\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoEncrypt\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.encrypt()\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoDecrypt\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.decrypt() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoSign\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.sign() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoVerify\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.verify() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoDigest\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.digest()\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoGenerateKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.generateKey() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoImportKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.importKey() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoExportKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.exportKey() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoDeriveBits\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.deriveBits()\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoDeriveKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.deriveKey() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoWrapKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e crypto.subtle.wrapKey() \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:227px;height:14px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eSubtleCryptoUnwrapKey\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:232px;height:14px\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e crypto.subtle.unwrapKey()\u003c/font\u003e\u003ccode\u003e \u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\r\n\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"font-size:10pt;font-weight:normal;border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px;background-color:transparent\"\u003e\r\n\u003ctbody\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003e\u003cb style\u003d\"text-align:center;color:rgb(51,51,51);font-family:Lucida Grande,Lucida Sans Unicode,sans-serif;font-size:15px;line-height:22px\"\u003eFeature\u003c/b\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:left\"\u003e\u003cb style\u003d\"text-align:center;color:rgb(51,51,51);font-family:Lucida Grande,Lucida Sans Unicode,sans-serif;font-size:15px;line-height:22px\"\u003eWebCrypto algorithm\u003c/b\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"text-align:left;width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003e \u003c/code\u003e\u003ccode\u003eCryptoAlgorithmAesCbc \u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:left;width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003cfont color\u003d\"#006000\"\u003e \u003c/font\u003eAES-CBC\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmHmac\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e HMAC\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmRsaSsaPkcs1v1_5\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e RSASSA-PKCS1-v1_5\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmSha1\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e SHA-1\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmSha256\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e SHA-256\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmSha384\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e SHA-384 \u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmSha512\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e SHA-512\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmAesGcm\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e AES-GCM\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmRsaOaep\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e RSA-OAEP\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmAesCtr\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e AES-CTR\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmAesKw\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e AES-KW\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmRsaPss\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e RSA-PSS\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmEcdsa\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e ECDSA\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmEcdh\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e ECDH\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmHkdf\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e HKDF\u003c/font\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:269px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e \u003ccode\u003eCryptoAlgorithmPbkdf2\u003c/code\u003e\u003c/font\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:228px;height:15px\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e PBKDF2\u003c/font\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cfont size\u003d\"4\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Chromium-developer-s-guide\" /\u003e\u003cfont size\u003d\"4\"\u003eChromium developer's guide\u003c/font\u003e\u003c/h2\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eThis section is intended for Chromium developers writing patches to address WebCrypto bugs/features.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Code-location-reference\" /\u003eCode location reference\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/webcrypto\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/components/webcrypto\u003c/a\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eContains the actual crypto algorithm implementations (HMAC, ECDH, RSA-PSS, etc.).\u003cbr /\u003e\r\n\u003c/span\u003e\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/test/data/webcrypto\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/components/test/data/webcrypto\u003c/a\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eTest data used by \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/components/webcrypto\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/components/webcrypto\u003c/a\u003e. Note that more extensive tests live in LayoutTests, and these will eventually be transitioned there too.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/master/LayoutTests/crypto\"\u003esrc/third_party/WebKit/LayoutTests/crypto\u003c/a\u003e\u003cbr /\u003e\r\nThe end-to-end Javascript tests that exercise WebCrypto's crypto.subtle.* methods.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/master/public/platform/WebCrypto.h\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/third_party/WebKit/public/platform/WebCrypto.h\u003c/a\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003ePublic interface that defines the Blink \u0026lt;--\u0026gt; Chromium layer\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/master/Source/modules/crypto\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/third_party/WebKit/Source/modules/crypto\u003c/a\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eThe Blink layer (responsible for interacting with the Javascript), and then calling into Chromium side using the WebCrypto interface.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/master/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp\" style\u003d\"font-size:small;background-color:transparent\"\u003esrc/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp\u003c/a\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:small;background-color:transparent\"\u003eImplements the structured clone for CryptoKey\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Running-the-Chromium-unit-tests\" /\u003eRunning the Chromium unit-tests\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cdiv /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003ecd src\u003c/code\u003e\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003eninja -C out/Debug components_unittests\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003e./out/Debug/components_unittests --gtest_filter\u003d\"WebCrypto*\"\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003c/blockquote\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Running-the-Blink-LayoutTests\" /\u003eRunning the Blink LayoutTests\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-cd-src-third_party-WebKitninja--C-out-Debug-blink_tests.-Tools-Scripts-run-webkit-tests---debug-crypto\" /\u003e\u003cdiv style\u003d\"font-size:13.3333px;font-weight:normal\" /\u003e\u003cblockquote style\u003d\"font-size:13.3333px;font-weight:normal;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003ecd src/third_party/WebKit\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003eninja -C out/Debug blink_tests\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003e./Tools/Scripts/run-webkit-tests --debug crypto\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"font-size:13.3333px;font-weight:normal;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003e\u003cdiv /\u003e\u003c/blockquote\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Getting-XOpenDisplay-failed-when-running-unittests\" /\u003eGetting\u003cfont color\u003d\"#ff0000\"\u003e \"XOpenDisplay failed\"\u003c/font\u003e when running unittests\u003c/h3\u003e\u003cdiv\u003eUnfortunately \u003ccode\u003ecomponents_unittests\u003c/code\u003e requires a display to run, even though WebCrypto itself has no such dependency. If you are running from a terminal and get this error the easiest fix is to use Xvfb to create a mock display server (on port 4 in my example)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e#Run this in the background....\u003cbr /\u003e\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"font-size:10pt;line-height:1\"\u003eXvfb :4 -screen 0 1024x768x24\u003cbr /\u003e\u003c/span\u003e\u003cbr /\u003e# And once it is up, re-run the unit-tests with its display port\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:medium;line-height:13px\"\u003eDISPLAY:4 ./out/Debug/\u003c/span\u003e\u003cspan style\u003d\"line-height:1;font-size:10pt;color:rgb(0,96,0)\"\u003ecomponents_unittests --gtest_filter\u003d\"WebCrypto*\"\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/webcrypto"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/545622259474463805"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/545622259474463805"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/545622259474463805"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$pageName":{"$t":"webcrypto"},"sites$revision":{"$t":"53"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},"published":{"$t":"2016-09-29T18:04:19.309Z"},"updated":{"$t":"2016-09-29T19:01:52.155Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:01:50.107Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Editing Components"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eHave you ever wanted to edit a component's description, add cc-es, automatically set labels, or even retire (deprecate) them? It's actually pretty simple, if you know where to look.\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cspan style\u003d\"font-size:12.8px;background-color:transparent\"\u003e1. Once you load up the issue tracker, click on the \"Development process\" link on the top most menu.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Development%20Process.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175651066/issue-tracking/editing-components/Development%20Process.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e2. Select \"Components\" from the sub-menu that appears.\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Components.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175666168/issue-tracking/editing-components/Components.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cdiv\u003e3. Find your component from the current set of \"Active components\" (Pro tip: There are a lot, so Ctrl+F is helpful).\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Component%20List.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175680365/issue-tracking/editing-components/Component%20List.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e4. Edit the\u003cspan style\u003d\"font-size:12.8px;background-color:transparent\"\u003e component.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:12.8px;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:12.8px\"\u003e\u003cb\u003ePro Tip: \u003c/b\u003e\"Deprecated\" versus \"Delete component\". Both will remove the component from auto-complete, however Delete will remove all references to the component from any existing issues that might have it (e.g. if one were to forget to query for \"All issues\" to migrate over fixed issues). Delete basically has no \"undo,\" in case a mistake is made. Given that errors happen, it's best practice to use \"Deprecated\" over delete to afford a measure of recovery.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:12.8px\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Component%20Edit%20View.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175697898/issue-tracking/editing-components/Component%20Edit%20View.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3869517436419863375"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"editing-components"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/495385443230113886"},"published":{"$t":"2016-09-29T19:01:37.893Z"},"updated":{"$t":"2016-09-29T19:01:37.898Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:01:37.893Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Component Edit View.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/495385443230113886"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Component%20Edit%20View.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/495385443230113886"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/495385443230113886"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/495385443230113886"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/495385443230113886"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/281768888701531425"},"published":{"$t":"2016-09-29T19:01:20.350Z"},"updated":{"$t":"2016-09-29T19:01:20.365Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:01:20.350Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Component List.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/281768888701531425"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Component%20List.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/281768888701531425"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/281768888701531425"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/281768888701531425"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/281768888701531425"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4558407240560567729"},"published":{"$t":"2016-09-29T19:01:06.103Z"},"updated":{"$t":"2016-09-29T19:01:06.168Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:01:06.103Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Components.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4558407240560567729"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Components.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4558407240560567729"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4558407240560567729"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4558407240560567729"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4558407240560567729"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/842490289917143007"},"published":{"$t":"2016-09-29T19:00:51.049Z"},"updated":{"$t":"2016-09-29T19:00:51.066Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:00:51.049Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Development Process.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/842490289917143007"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3869517436419863375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components/Development%20Process.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/842490289917143007"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/842490289917143007"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/842490289917143007"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/842490289917143007"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"},"published":{"$t":"2016-09-29T17:20:55.581Z"},"updated":{"$t":"2016-09-29T19:00:36.158Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:00:33.122Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"How to Bulk Edit"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eDid you know that Monorail has a super powerful bulk editor built-in? If not, then let me tell you more... or better yet show you demo (I promise, it's really straight forward).\u003cdiv\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e1. \u003cb\u003eSearch for the issues that you want to bulk edit\u003c/b\u003e, using the correct \"bucket\" (e.g. \"Open Issues\", \"All Issues\", etc...). \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003ci\u003ePro Tip\u003c/i\u003e\u003c/span\u003e\u003cb style\u003d\"background-color:transparent;font-size:10pt\"\u003e:\u003c/b\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e Depending on what you are doing (e.g. moving issues between components), it may be advisable to change the default search from \"Open Issues\" to \"All Issues\" to ensure that future queries continue to work.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e2. \u003cb\u003ePick the issues that you want to bulk edit\u003c/b\u003e or click on the (Select) All\" issues link.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e3. \u003cb\u003eFrom the \"Actions...\" drop down, select \"Bulk edit...\"\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475170473653/issue-tracking/how-to-bulk-edit/Bulk%20Edit.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e4.\u003cb\u003e Edit away.\u003c/b\u003e To remove values (e.g. Components, Owners, Labels, etc...) you simply have to select either (\"Append +\u003d\" or \"Remove -\u003d\"). Click on the \"Update ## Issues,\" and watch it work...magic.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003ci\u003ePro Tip 0:\u003c/i\u003e\u003c/b\u003e It's good practice, when making a bulk edit to add a comment!\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ci\u003e\u003cb\u003ePro Tip 1: \u003c/b\u003eTo move a component or label w/ a single edit... use the \"Append +\u003d\" mode, start w/ the component that you want to add, and then starting with as dash \"-\" add the second component that you want to remove (e.g. \"Blink\u0026gt;GetUserMedia, -Blink\u0026gt;Webrtc\u0026gt;GetUserMedia\" would add the \u003c/i\u003e\u003ci style\u003d\"background-color:transparent;font-size:13.3333px\"\u003eBlink\u0026gt;GetUserMedia and remove \u003c/i\u003e\u003ci style\u003d\"background-color:transparent;font-size:13.3333px\"\u003eBlink\u0026gt;Webrtc\u0026gt;GetUserMedia\"\u003c/i\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ci style\u003d\"background-color:transparent;font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ci style\u003d\"background-color:transparent;font-size:13.3333px\"\u003e\u003cb\u003ePro Tip 2:\u003c/b\u003e If you are moving a lot of things, it maybe worthwhile to uncheck \"Send email\"\u003c/i\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Confirm.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475170664667/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Confirm.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e5. \u003cb\u003eYou're done.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Worked.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475171114033/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Worked.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5889690567164835821"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"how-to-bulk-edit"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},"published":{"$t":"2016-09-29T17:51:23.941Z"},"updated":{"$t":"2016-09-29T19:00:02.667Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T19:00:01.204Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Migrating Issue Components"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003eBasically it's a two step process 1.) \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit\"\u003eBulk edit\u003c/a\u003e 2.) \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/editing-components\"\u003eEdit the component\u003c/a\u003e, marking it as \"Deprecated\".\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:12.8px\"\u003eLet's go through an example, migrating issues from \"Blink\u0026gt;Webrtc\u0026gt;GetUserMedia\" to \"Blink\u0026gt;GetUserMedia\".\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cfont size\u003d\"4\"\u003eStep 1 - Bulk Edit\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e1. Search \"All issues\" for the component that you want to deprecate (e.g. Blink\u0026gt;\u0026gt;Webrtc\u0026gt;GetUserMedia). Once the results list appears, Select \"All,\" go to the \"Actions...\" drop down and select \"Bulk edit...\".\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Bulk%20Edit.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175455704/issue-tracking/migrating-issue-components/Bulk%20Edit.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u200b\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e2. In the Components field (w/ Append +\u003d set), add the replacement component (e.g. Blink\u0026gt;GetUserMedia), followed by the component that you want to remove/ deprecate starting with a minus (\"-\"). In this example (\"-Blink\u0026gt;Webrtc\u0026gt;GetUserMedia). Click the \"Update ## Issues\" button.\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003ePro tip:\u003c/b\u003e Uncheck the Send email box.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Bulk%20Edit%20-%20Confirm.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175487840/issue-tracking/migrating-issue-components/Bulk%20Edit%20-%20Confirm.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003eStep 2 - Deprecate the component (to keep it out of Auto-complete)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e1. Once you load up the issue tracker, click on the \"Development process\" link on the top most menu.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Development%20Process.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175523300/issue-tracking/migrating-issue-components/Development%20Process.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e2. Select \"Components\" from the sub-menu that appears.\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Components.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175552306/issue-tracking/migrating-issue-components/Components.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cdiv\u003e3. Find your component from the current set of \"Active components\" (Pro tip: There are a lot, so ctrl+F is helpful).\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Component%20List.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475175570672/issue-tracking/migrating-issue-components/Component%20List.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e4. Check \"Deprecated\" and click on \"Submit changes.\"\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003ePro Tip: \u003c/b\u003e\"Deprecated\" versus \"Delete component\". Both will remove the component from auto-complete, however Delete will remove all references to the component from any existing issues that might have it (e.g. if one were to forget to query for \"All issues\" to migrate over fixed issues). Delete basically has no \"undo,\" in case a mistake is made. Given that errors happen, it's best practice to use \"Deprecated\" over delete to afford a measure of recovery.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Depercate%20Component.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1475171922336/issue-tracking/migrating-issue-components/Depercate%20Component.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9123073410465110935"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"migrating-issue-components"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6796465076831364061"},"published":{"$t":"2016-09-29T18:59:30.667Z"},"updated":{"$t":"2016-09-29T18:59:30.672Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T18:59:30.667Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Component List.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6796465076831364061"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Component%20List.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6796465076831364061"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6796465076831364061"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6796465076831364061"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6796465076831364061"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6317093162305992459"},"published":{"$t":"2016-09-29T18:59:12.299Z"},"updated":{"$t":"2016-09-29T18:59:12.306Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T18:59:12.299Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Components.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6317093162305992459"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Components.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6317093162305992459"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6317093162305992459"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6317093162305992459"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6317093162305992459"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5810356398573850942"},"published":{"$t":"2016-09-29T18:58:43.294Z"},"updated":{"$t":"2016-09-29T18:58:43.300Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T18:58:43.294Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Development Process.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5810356398573850942"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Development%20Process.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5810356398573850942"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5810356398573850942"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5810356398573850942"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5810356398573850942"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7535097645996215860"},"published":{"$t":"2016-09-29T18:58:07.821Z"},"updated":{"$t":"2016-09-29T18:58:07.840Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T18:58:07.821Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Bulk Edit - Confirm.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7535097645996215860"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Bulk%20Edit%20-%20Confirm.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7535097645996215860"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7535097645996215860"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7535097645996215860"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7535097645996215860"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6765070549963485344"},"published":{"$t":"2016-09-29T18:57:35.686Z"},"updated":{"$t":"2016-09-29T18:57:35.704Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T18:57:35.686Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Bulk Edit.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6765070549963485344"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Bulk%20Edit.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6765070549963485344"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6765070549963485344"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6765070549963485344"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6765070549963485344"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2584154149357701144"},"published":{"$t":"2016-09-29T17:58:42.332Z"},"updated":{"$t":"2016-09-29T17:58:42.336Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T17:58:42.332Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Depercate Component.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2584154149357701144"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9123073410465110935"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/migrating-issue-components/Depercate%20Component.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2584154149357701144"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2584154149357701144"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2584154149357701144"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2584154149357701144"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1042465766824319768"},"published":{"$t":"2016-09-29T17:44:53.133Z"},"updated":{"$t":"2016-09-29T17:45:14.033Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T17:45:14.026Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Bulk Edit - Worked.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1042465766824319768"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Worked.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1042465766824319768"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1042465766824319768"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1042465766824319768"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1042465766824319768"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8876173669096036941"},"published":{"$t":"2016-09-29T17:37:32.617Z"},"updated":{"$t":"2016-09-29T17:37:44.667Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T17:37:44.636Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Bulk Edit - Confirm.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8876173669096036941"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Confirm.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8876173669096036941"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8876173669096036941"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8876173669096036941"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8876173669096036941"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3907294303122955948"},"published":{"$t":"2016-09-29T17:34:33.648Z"},"updated":{"$t":"2016-09-29T17:34:33.653Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-29T17:34:33.648Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Bulk Edit.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3907294303122955948"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5889690567164835821"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/how-to-bulk-edit/Bulk%20Edit.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3907294303122955948"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3907294303122955948"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3907294303122955948"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3907294303122955948"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6358282796978129936"},"published":{"$t":"2016-09-22T06:36:16.346Z"},"updated":{"$t":"2016-09-25T23:39:20.298Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-25T23:39:18.661Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Permissions"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-New-Permissions\" /\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eTesting New Permissions\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eIt's important to test new permissions adequately to ensure they behave as expected and regressions are caught. Features that have permissions tend to be privacy or security sensitive and if there are circumstances where a malicious website can access the feature without adequate user approval it can have a particularly negative impact. Please see \u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1daQk9A05T0BcSMO9KQQN8x0TdT2a23KqAkS7maIUJT0/edit?usp\u003ddrive_web\"\u003eTesting New Permissions\u003c/a\u003e for important test cases to consider when adding new permissions.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6333507778373553020"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/enamel/permissions"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6358282796978129936"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6358282796978129936"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6358282796978129936"}],"author":[{"name":{"$t":"Raymes Khoury"},"email":{"$t":"raymes@chromium.org"}}],"sites$pageName":{"$t":"permissions"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4612859425471645382"},"published":{"$t":"2014-06-19T19:33:37.367Z"},"updated":{"$t":"2016-09-22T22:34:09.062Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-22T22:34:06.021Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Example of working with a dump."},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eLet's say that you are looking at a crash dump, so following the first command from \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/debugging-on-windows/windbg-help#TOC-Common-commands-when-working-with-a-crash\"\u003ethis page\u003c/a\u003e you do:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; !analyze -v\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003ePart of what the command prints is:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003eFAULTING_IP: \u003c/div\u003e\r\n\u003cdiv\u003eYCWebCameraSource+14c7e\u003c/div\u003e\r\n\u003cdiv\u003e1c414c7e 8b01 mov eax,dword ptr [ecx]\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eEXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)\u003c/div\u003e\r\n\u003cdiv\u003eExceptionAddress: 1c414c7e (YCWebCameraSource+0x00014c7e)\u003c/div\u003e\r\n\u003cdiv\u003e ExceptionCode: c0000005 (Access violation)\u003c/div\u003e\r\n\u003cdiv\u003e ExceptionFlags: 00000000\u003c/div\u003e\r\n\u003cdiv\u003eNumberParameters: 2\u003c/div\u003e\r\n\u003cdiv\u003e Parameter[0]: 00000000\u003c/div\u003e\r\n\u003cdiv\u003e Parameter[1]: 00000000\u003c/div\u003e\r\n\u003cdiv\u003eAttempt to read from address 00000000\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eCONTEXT: 00000000 -- (.cxr 0x0;r)\u003c/div\u003e\r\n\u003cdiv\u003eeax\u003d00000000 ebx\u003d0465c528 ecx\u003d00000000 edx\u003d00000500 esi\u003d0465c498 edi\u003d00000000\u003c/div\u003e\r\n\u003cdiv\u003eeip\u003d77c2e1a4 esp\u003d0465c370 ebp\u003d0465c4f0 iopl\u003d0 nv up ei pl nz ac po nc\u003c/div\u003e\r\n\u003cdiv\u003ecs\u003d0023 ss\u003d002b ds\u003d002b es\u003d002b fs\u003d0053 gs\u003d002b efl\u003d00200212\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003ePROCESS_NAME: chrome.exe\u003c/div\u003e\r\n\u003cdiv\u003eERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.\u003c/div\u003e\r\n\u003cdiv\u003eEXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.\u003c/div\u003e\r\n\u003cdiv\u003eEXCEPTION_PARAMETER1: 00000000\u003c/div\u003e\r\n\u003cdiv\u003eEXCEPTION_PARAMETER2: 00000000\u003c/div\u003e\r\n\u003cdiv\u003eREAD_ADDRESS: 00000000 \u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eFOLLOWUP_IP: \u003c/div\u003e\r\n\u003cdiv\u003eYCWebCameraSource+14c7e\u003c/div\u003e\r\n\u003cdiv\u003e1c414c7e 8b01 mov eax,dword ptr [ecx]\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eBUGCHECK_STR: APPLICATION_FAULT_NULL_POINTER_READ_INVALID_POINTER_READ_BEFORE_CALL\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eSTACK_TEXT: \u003c/div\u003e\r\n\u003cdiv\u003e0465cab8 00000000 0465cbc4 096052c0 1c414fe1 YCWebCameraSource+0x14c7e\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003ewhich basically says that there is an attempt to read from NULL:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eYCWebCameraSource+14c7e\u003c/div\u003e\r\n\u003cdiv\u003e1c414c7e 8b01 mov eax,dword ptr [ecx]\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eand ECX is 0.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eThe problematic part is the last one: the stack is a single line of text, inside a DLL that you know nothing about. Moving on to the next command,\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; .ecxr\u003c/div\u003e\r\n\u003cdiv\u003eeax\u003d0bd00048 ebx\u003d000000f0 ecx\u003d00000000 edx\u003d00000500 esi\u003d0465cbc4 edi\u003d00000140\u003c/div\u003e\r\n\u003cdiv\u003eeip\u003d1c414c7e esp\u003d0465cabc ebp\u003d000000f0 iopl\u003d0 nv up ei pl nz na po nc\u003c/div\u003e\r\n\u003cdiv\u003ecs\u003d0023 ss\u003d002b ds\u003d002b es\u003d002b fs\u003d0053 gs\u003d002b efl\u003d00210202\u003c/div\u003e\r\n\u003cdiv\u003eYCWebCameraSource+0x14c7e:\u003c/div\u003e\r\n\u003cdiv\u003e1c414c7e 8b01 mov eax,dword ptr [ecx] ds:002b:00000000\u003d????????\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003econfirms what we already know as the debugger loads the context when the exception was received. The stack window shows only one line of text.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; k\u003c/div\u003e\r\n\u003cdiv\u003e *** Stack trace for last set context - .thread/.cxr resets it\u003c/div\u003e\r\n\u003cdiv\u003eChildEBP RetAddr \u003c/div\u003e\r\n\u003cdiv\u003eWARNING: Stack unwind information not available. Following frames may be wrong.\u003c/div\u003e\r\n\u003cdiv\u003e0465cab8 00000000 YCWebCameraSource+0x14c7e\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eLooking at the registers show the reason: EBP is 0xF0, which is not a pointer to the stack. ESP looks fine, so let's see what's there using the next command from the list:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; dds esp\u003c/div\u003e\r\n\u003cdiv\u003e0465cabc 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cac0 0465cbc4\u003c/div\u003e\r\n\u003cdiv\u003e0465cac4 096052c0\u003c/div\u003e\r\n\u003cdiv\u003e0465cac8 1c414fe1 YCWebCameraSource+0x14fe1\u003c/div\u003e\r\n\u003cdiv\u003e0465cacc 0b7b0000\u003c/div\u003e\r\n\u003cdiv\u003e0465cad0 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cad4 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cad8 00000500\u003c/div\u003e\r\n\u003cdiv\u003e0465cadc 09710000\u003c/div\u003e\r\n\u003cdiv\u003e0465cae0 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cae4 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cae8 000003c0\u003c/div\u003e\r\n\u003cdiv\u003e0465caec 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465caf0 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465caf4 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465caf8 1c40c24e YCWebCameraSource+0xc24e\u003c/div\u003e\r\n\u003cdiv\u003e0465cafc 0b7b0000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb00 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cb04 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb08 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb0c 00000500\u003c/div\u003e\r\n\u003cdiv\u003e0465cb10 09710000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb14 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cb18 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb1c 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb20 000003c0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb24 0465e074\u003c/div\u003e\r\n\u003cdiv\u003e0465cb28 09158124\u003c/div\u003e\r\n\u003cdiv\u003e0465cb2c 091561c8\u003c/div\u003e\r\n\u003cdiv\u003e0465cb30 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb34 09605848\u003c/div\u003e\r\n\u003cdiv\u003e0465cb38 0b8007c8\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eA few pointers to code close to the address that crashed, which is good because it means the control flow before the crash is reasonable. But clearly that code is not using EBP to maintain stack frames (more on that later). So see what else is on the stack:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; dds\u003c/div\u003e\r\n\u003cdiv\u003e0465cb3c 0b800960\u003c/div\u003e\r\n\u003cdiv\u003e0465cb40 000003c0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb44 091561c8\u003c/div\u003e\r\n\u003cdiv\u003e0465cb48 00022009\u003c/div\u003e\r\n\u003cdiv\u003e0465cb4c 80004005\u003c/div\u003e\r\n\u003cdiv\u003e0465cb50 1c4238f8 YCWebCameraSource+0x238f8\u003c/div\u003e\r\n\u003cdiv\u003e0465cb54 09605848\u003c/div\u003e\r\n\u003cdiv\u003e0465cb58 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb5c 000000b2\u003c/div\u003e\r\n\u003cdiv\u003e0465cb60 096052c0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb64 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb68 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb6c 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cb70 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb74 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cb78 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cb7c 00000500\u003c/div\u003e\r\n\u003cdiv\u003e0465cb80 00022009\u003c/div\u003e\r\n\u003cdiv\u003e0465cb84 0b7b0000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb88 00000001\u003c/div\u003e\r\n\u003cdiv\u003e0465cb8c 1c4238f8 YCWebCameraSource+0x238f8\u003c/div\u003e\r\n\u003cdiv\u003e0465cb90 096046c8\u003c/div\u003e\r\n\u003cdiv\u003e0465cb94 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465cb98 0465cc28\u003c/div\u003e\r\n\u003cdiv\u003e0465cb9c 00000140\u003c/div\u003e\r\n\u003cdiv\u003e0465cba0 000000f0\u003c/div\u003e\r\n\u003cdiv\u003e0465cba4 000003c0\u003c/div\u003e\r\n\u003cdiv\u003e0465cba8 00021808\u003c/div\u003e\r\n\u003cdiv\u003e0465cbac 09710000\u003c/div\u003e\r\n\u003cdiv\u003e0465cbb0 00000002\u003c/div\u003e\r\n\u003cdiv\u003e0465cbb4 557cf400\u003c/div\u003e\r\n\u003cdiv\u003e0465cbb8 11d31a04\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eNote that issuing the command without an argument just continues where the last invocation left of. Furthermore, just hitting enter repeats the last command so after this point is a matter of keep hitting enter. Which is good because in this case interesting things happen after a long time:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; \u003c/div\u003e\r\n\u003cdiv\u003e0465f22c f15f2bff\u003c/div\u003e\r\n\u003cdiv\u003e0465f230 0465f27c\u003c/div\u003e\r\n\u003cdiv\u003e0465f234 772b9b03 msvcrt!free+0x65\u003c/div\u003e\r\n\u003cdiv\u003e0465f238 01700000\u003c/div\u003e\r\n\u003cdiv\u003e0465f23c 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465f240 772b9b10 msvcrt!free+0x84\u003c/div\u003e\r\n\u003cdiv\u003e0465f244 f1a4c16f\u003c/div\u003e\r\n\u003cdiv\u003e0465f248 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465f24c 0170b3f8\u003c/div\u003e\r\n\u003cdiv\u003e0465f250 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465f254 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465f258 0465f238\u003c/div\u003e\r\n\u003cdiv\u003e0465f25c ffffffff\u003c/div\u003e\r\n\u003cdiv\u003e0465f260 00000000\u003c/div\u003e\r\n\u003cdiv\u003e0465f264 0465f244\u003c/div\u003e\r\n\u003cdiv\u003e0465f268 82eaa80b\u003c/div\u003e\r\n\u003cdiv\u003e0465f26c 0465f98c\u003c/div\u003e\r\n\u003cdiv\u003e0465f270 772dc265 msvcrt!_except_handler4\u003c/div\u003e\r\n\u003cdiv\u003e0465f274 82eaa80b\u003c/div\u003e\r\n\u003cdiv\u003e0465f278 fffffffe\u003c/div\u003e\r\n\u003cdiv\u003e0465f27c 772b9b10 msvcrt!free+0x84\u003c/div\u003e\r\n\u003cdiv\u003e0465f280 732343a5 devenum!ATL::CComObject\u0026lt;CCreateSwEnum\u0026gt;::`scalar deleting destructor'+0x3d\u003c/div\u003e\r\n\u003cdiv\u003e0465f284 0170b3f8\u003c/div\u003e\r\n\u003cdiv\u003e0465f288 73234566 devenum!ATL::CComObject\u0026lt;CCreateSwEnum\u0026gt;::Release+0x23\u003c/div\u003e\r\n\u003cdiv\u003e0465f28c 03290d90\u003c/div\u003e\r\n\u003cdiv\u003e0465f290 031f0b50\u003c/div\u003e\r\n\u003cdiv\u003e0465f294 0465f4bc\u003c/div\u003e\r\n\u003cdiv\u003e0465f298 6fb647db chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3ab\u003c/div\u003e\r\n\u003cdiv\u003e0465f29c 6fb647e5 chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3b5\u003c/div\u003e\r\n\u003cdiv\u003e0465f2a0 0465f2b8\u003c/div\u003e\r\n\u003cdiv\u003e0465f2a4 6faf22b5 chrome_6faf0000!tcmalloc::FL_Push+0x71\u003c/div\u003e\r\n\u003cdiv\u003e0465f2a8 01192308\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eAfter a while of seeing symbols from various DLLs go through the stack we start to see symbols from Chrome. The last part looks relatively good. Note that at address 0465f298 there is a pointer to Chrome code, and more importantly, 4 bytes before there is a pointer to another place in the stack, some bytes after the current position: 0465f294 0465f4bc. This is the typical pattern of a call to a function that use EBP to track stack frames. Time to use the next command from the list:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; k \u003d 0465f294 0465f294 0465f294 \u003c/div\u003e\r\n\u003cdiv\u003eChildEBP RetAddr \u003c/div\u003e\r\n\u003cdiv\u003eWARNING: Frame IP not in any known module. Following frames may be wrong.\u003c/div\u003e\r\n\u003cdiv\u003e0465f294 6fb647db 0x465f294\u003c/div\u003e\r\n\u003cdiv\u003e0465f4bc 07554180 chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3ab\u003c/div\u003e\r\n\u003cdiv\u003e0465f4cc 6fb643d2 0x7554180\u003c/div\u003e\r\n\u003cdiv\u003e0465f4e8 6fb64386 chrome_6faf0000!media::VideoCaptureDeviceFactory::EnumerateDeviceNames+0x45\u003c/div\u003e\r\n\u003cdiv\u003e0465f4f4 6fb55ece chrome_6faf0000!base::internal::Invoker\u0026lt;\u0026gt;\u003c/div\u003e\r\n\u003cdiv\u003e0465f5d4 6fb5552d chrome_6faf0000!base::MessageLoop::RunTask+0x50a\u003c/div\u003e\r\n\u003cdiv\u003e0465f718 6fb62bad chrome_6faf0000!base::MessageLoop::DoWork+0x359\u003c/div\u003e\r\n\u003cdiv\u003e0465f744 6fb5503a chrome_6faf0000!base::MessagePumpDefault::Run+0xc7\u003c/div\u003e\r\n\u003cdiv\u003e0465f768 6fb54f2d chrome_6faf0000!base::MessageLoop::RunHandler+0x6e\u003c/div\u003e\r\n\u003cdiv\u003e0465f794 6fb54ec4 chrome_6faf0000!base::MessageLoop::Run+0x65\u003c/div\u003e\r\n\u003cdiv\u003e0465f79c 6fb5291e chrome_6faf0000!base::Thread::Run+0xb\u003c/div\u003e\r\n\u003cdiv\u003e0465f928 6fb52509 chrome_6faf0000!base::Thread::ThreadMain+0x26e\u003c/div\u003e\r\n\u003cdiv\u003e0465f94c 778a850d chrome_6faf0000!base::`anonymous namespace'::ThreadFunc+0xcb\u003c/div\u003e\r\n\u003cdiv\u003e0465f958 77c5bf39 kernel32!BaseThreadInitThunk+0xe\u003c/div\u003e\r\n\u003cdiv\u003e0465f99c 77c5bf0c ntdll!__RtlUserThreadStart+0x72\u003c/div\u003e\r\n\u003cdiv\u003e0465f9b4 00000000 ntdll!_RtlUserThreadStart+0x1b\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eStrictly speaking the format that I just used is not correct, but the debugger does a decent job figuring out what I want just complaining about the first frame. The good part is that now we have a stack that looks reasonable. Time to go up and try to get something better.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eThe pattern that we just saw, a pointer a few bytes ahead followed by a symbol should repeat itself... as in the pointer should point to another pointer followed by a symbol. Se if we search up on the debugger output for 0465f294 we should get to the previous frame. If there is no match, it means that either we reached a function call that doesn't use EBP, or we are following stale data from the stack (traces of something that happened before, and has not been overwritten yet, but it is not the current call sequence).\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eAnd that's exactly what happens in this case. But going up and following stack manually a few times provides a better stack. Remember that the goal is not to get a perfect stack trace but to get enough information to do something about it. We already know that get the actual stack will be impossible because close to the crash point there's no EBP and no symbols. But the type of symbols that you see going through while executing dds gives you a rough idea of how the flow ends up at the code that crashes.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\r\n\u003ccode\u003e\r\n\u003cdiv\u003e0:006\u0026gt; k \u003d 0465e0ac 0465e0ac 0465e0ac \u003c/div\u003e\r\n\u003cdiv\u003eChildEBP RetAddr \u003c/div\u003e\r\n\u003cdiv\u003eWARNING: Frame IP not in any known module. Following frames may be wrong.\u003c/div\u003e\r\n\u003cdiv\u003e0465e0ac 76ec7543 0x465e0ac\u003c/div\u003e\r\n\u003cdiv\u003e0465e11c 76ec4fdf combase!CServerContextActivator::CreateInstance+0x18b\u003c/div\u003e\r\n\u003cdiv\u003e0465e15c 76ec7610 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c\u003c/div\u003e\r\n\u003cdiv\u003e0465e1b0 76ec7334 combase!CApartmentActivator::CreateInstance+0x75\u003c/div\u003e\r\n\u003cdiv\u003e0465e1d4 76ec6d52 combase!CProcessActivator::CCICallback+0x3b\u003c/div\u003e\r\n\u003cdiv\u003e0465e1f4 76ec72cf combase!CProcessActivator::AttemptActivation+0x2c\u003c/div\u003e\r\n\u003cdiv\u003e0465e22c 76ec73a9 combase!CProcessActivator::ActivateByContext+0x97\u003c/div\u003e\r\n\u003cdiv\u003e0465e25c 76ec4fdf combase!CProcessActivator::CreateInstance+0x5d\u003c/div\u003e\r\n\u003cdiv\u003e0465e29c 76ec50d7 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c\u003c/div\u003e\r\n\u003cdiv\u003e0465e4fc 76ec4fdf combase!CClientContextActivator::CreateInstance+0xdd\u003c/div\u003e\r\n\u003cdiv\u003e0465e53c 76ec5ba6 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c\u003c/div\u003e\r\n\u003cdiv\u003e0465ede8 76ebc9c2 combase!ICoCreateInstanceEx+0xfb6\u003c/div\u003e\r\n\u003cdiv\u003e(Inline) -------- combase!CComActivator::DoCreateInstance+0x11a\u003c/div\u003e\r\n\u003cdiv\u003e(Inline) -------- combase!CoCreateInstanceEx+0x14e\u003c/div\u003e\r\n\u003cdiv\u003e0465ee3c 732352c3 combase!CoCreateInstance+0x169\u003c/div\u003e\r\n\u003cdiv\u003e0465eef0 70cedfbd devenum!CDeviceMoniker::BindToObject+0x1ac\u003c/div\u003e\r\n\u003cdiv\u003e0465f0e0 70ce59df chrome_6faf0000!media::VideoCaptureDeviceWin::GetDeviceFilter+0x234\u003c/div\u003e\r\n\u003cdiv\u003e0465f3ac 70ce56a2 chrome_6faf0000!media::GetDeviceSupportedFormatsDirectShow+0x335\u003c/div\u003e\r\n\u003cdiv\u003e0465f3c0 6fb64995 chrome_6faf0000!media::VideoCaptureDeviceFactoryWin::GetDeviceSupportedFormats+0x20\u003c/div\u003e\r\n\u003cdiv\u003e0465f44c 6fb648c1 chrome_6faf0000!content::VideoCaptureManager::ConsolidateDevicesInfoOnDeviceThread+0xc1\u003c/div\u003e\r\n\u003cdiv\u003e0465f46c 6fb64883 chrome_6faf0000!base::internal::RunnableAdapter\u0026lt;\u0026gt;::Run+0x2e\u003c/div\u003e\r\n\u003cdiv\u003e0465f488 6fb64848 chrome_6faf0000!base::internal::InvokeHelper\u0026lt;\u0026gt;::MakeItSo+0x25\u003c/div\u003e\r\n\u003cdiv\u003e0465f4b8 6fb64800 chrome_6faf0000!base::internal::Invoker\u0026lt;\u0026lt;media::VideoCaptureDevice::N+0x33\u003c/div\u003e\r\n\u003cdiv\u003e0465f4cc 6fb643d2 chrome_6faf0000!base::Callback\u0026lt;\u0026gt;::Run+0x17\u003c/div\u003e\r\n\u003cdiv\u003e0465f4e8 6fb64386 chrome_6faf0000!media::VideoCaptureDeviceFactory::EnumerateDeviceNames+0x45\u003c/div\u003e\r\n\u003cdiv\u003e0465f4f4 6fb55ece chrome_6faf0000!base::internal::Invoker\u0026lt;2,base::internal::BindState\u0026lt;\u0026gt;::Run+0x10\u003c/div\u003e\r\n\u003cdiv\u003e0465f5d4 6fb5552d chrome_6faf0000!base::MessageLoop::RunTask+0x50a\u003c/div\u003e\r\n\u003cdiv\u003e0465f718 6fb62bad chrome_6faf0000!base::MessageLoop::DoWork+0x359\u003c/div\u003e\r\n\u003cdiv\u003e0465f744 6fb5503a chrome_6faf0000!base::MessagePumpDefault::Run+0xc7\u003c/div\u003e\r\n\u003cdiv\u003e0465f768 6fb54f2d chrome_6faf0000!base::MessageLoop::RunHandler+0x6e\u003c/div\u003e\r\n\u003cdiv\u003e0465f794 6fb54ec4 chrome_6faf0000!base::MessageLoop::Run+0x65\u003c/div\u003e\r\n\u003cdiv\u003e0465f79c 6fb5291e chrome_6faf0000!base::Thread::Run+0xb\u003c/div\u003e\r\n\u003cdiv\u003e0465f928 6fb52509 chrome_6faf0000!base::Thread::ThreadMain+0x26e\u003c/div\u003e\r\n\u003cdiv\u003e0465f94c 778a850d chrome_6faf0000!base::`anonymous namespace'::ThreadFunc+0xcb\u003c/div\u003e\r\n\u003cdiv\u003e0465f958 77c5bf39 kernel32!BaseThreadInitThunk+0xe\u003c/div\u003e\r\n\u003cdiv\u003e0465f99c 77c5bf0c ntdll!__RtlUserThreadStart+0x72\u003c/div\u003e\r\n\u003cdiv\u003e0465f9b4 00000000 ntdll!_RtlUserThreadStart+0x1b\u003c/div\u003e\r\n\u003c/code\u003e\r\n\u003c/font\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003eNote how this stack is slightly different right where the previous stack started, but it flows nicely into a sequence of com calls. There's usually no point in going too deep into code we don't control, so that is all we need in this case.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5941679169189588859"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4612859425471645382"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4612859425471645382"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4612859425471645382"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$pageName":{"$t":"example-of-working-with-a-dump"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"WCl7JmA1\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7960892143921275114"},"published":{"$t":"2010-09-02T18:55:02.426Z"},"updated":{"$t":"2016-09-22T21:57:25.930Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-22T21:57:23.675Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Security Hall of Fame"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-following-bugs-qualified-for-a-Chromium-Security-Reward-or-represent-a-win-at-our-Pwnium-competition.-On-behalf-of-our-millions-of-users-we-thank-the-named-researchers-for-helping-make-Chromium-safer.\" /\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eThe following bugs qualified for a Chromium Security Reward, or represent a win at our Pwnium competition. On behalf of our millions of users, we thank the named researchers for helping make Chromium safer.\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cb\u003eThis information is historical and isn't being updated\u003c/b\u003e\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e. \u003c/span\u003e\u003c/div\u003e\u003cul\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$60000 to Sergey Glazunov for \u003c/span\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117226\" style\u003d\"background-color:transparent;font-size:10pt;color:rgb(0,102,204)\"\u003ebug 117226\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$60000 to PinkiePie for \u003c/span\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117620\" style\u003d\"background-color:transparent;font-size:10pt;color:rgb(0,102,204)\"\u003ebug 117620\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$40000 to PinkiePie for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d181083\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 181083\u003c/a\u003e and others\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$31336 to Ralf-Philipp Weinmann for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d227181\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 227181\u003c/a\u003e and others\u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116661\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003e\u003cbr /\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$30000 to someone who wishes to remain anonymous\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$30000 to someone who wishes to remain anonymous\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$21500 to Andrey Labunets for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d252062\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 252062\u003c/a\u003e and others\u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116661\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003e\u003cbr /\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116661\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 116661\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116662\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 116662\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116663\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 116663\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d143439\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 143439\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d157047\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 157047\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to Atte Kettunen for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d157048\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 157048\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$10000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d157049\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 157049\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$7331 to PinkiePie for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d162835\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 162835\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$5000 to \u003cspan style\u003d\"font-family:arial,sans-serif;font-size:13px\"\u003eJoão Lucas Melo Brasio\u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px\"\u003e \u003c/span\u003efrom \u003ca href\u003d\"http://www.whitehathackers.com.br/\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eWhite Hat Hackers Consultoria de Segurança da Informação LTDA\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d321940\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 321940\u003c/a\u003e and others\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$4000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d143437\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 143437\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$3133.7 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 179522\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$3133.7 to \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eAtte K\u003c/span\u003eettunen for bug 147499\u003c/li\u003e\u003cli\u003e$3133.7 to Collin Payn\u003cfont size\u003d\"2\"\u003ee for \u003c/font\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d242762\" style\u003d\"font-size:10pt;background-color:transparent\"\u003ebug 242762\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$3133.7 to Collin Payne for \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d244746\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 244746\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68666\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68666\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83275\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 83275\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88944\"\u003ebug 88944\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d107182\"\u003ebug 107182\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108071\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 108071\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d128178\"\u003ebug 128178\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d135043\"\u003ebug 135043\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$3133.7 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d141901\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 141901\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98053\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 98053\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99512\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 99512\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99750\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 99750\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93906\"\u003ebug 93906\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d96047\"\u003ebug 96047\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d96885\"\u003ebug 96885\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$2000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 279277\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$2000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 265838\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93416\"\u003ebug 93416\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d95671\"\u003ebug 95671\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Daniel Divricean for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93416\"\u003ebug 93416\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117550\"\u003ebug 117550\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d139814\"\u003ebug 139814\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Christian Schneider for \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/detail?id\u003d380885\"\u003ebug 380885\u003c/a\u003e (\u003ca href\u003d\"https://christian-schneider.net/ChromeSopBypassWithSvg.html#main\" rel\u003d\"nofollow\"\u003ewriteup\u003c/a\u003e)\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1500 to Atte Kett\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eunen for bug 150729\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d35724\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 35724\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d45400\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 45400\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d50553\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 50553\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Keith Campbell for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51630\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51630\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d59036\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 59036\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d65764\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 65764\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70165\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70165\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Daniel Divricean for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d69187\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 69187\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Daniel Divricean for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70877\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70877\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Vincenzo Iozzo, Ralf Philipp Weinmann and Willem Pinckaers, through ZDI, for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75712\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75712\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77026\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77026\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to Michael Braithwaite of Turbulenz Limited for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89836\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 89836\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1337 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d100059\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 100059\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73196\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73196\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73595\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73595\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74991\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74991\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77463\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77463\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73746\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73746\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74562\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74562\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75170\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75170\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d79199\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 79199\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89520\"\u003ebug 89520\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d90222\"\u003ebug 90222\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d91598\"\u003ebug 91598\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97451\"\u003ebug 97451\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97520\"\u003ebug 97520\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97615\"\u003ebug 97615\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97784\"\u003ebug 97784\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98407\"\u003ebug 98407\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 + $500 to Chamal de Silva for \u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d171951\"\u003ebug 171951\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for bug 235733\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 292422\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e bug 271939\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 223238\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 172926\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 172342\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 172331\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 172243\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 168768\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 162551\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 162494\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 161077\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 159338\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 156231\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 154055\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 152707\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 151008\u003c/span\u003e\u003c/li\u003e\u003cli\u003e$1000 to Atte Kettunen for bug 138208\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for bug 133571\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for bug 133214\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$1000 to Atte Kettunen for bug 130240\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Tokuji Akamine for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d30660\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 30660\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d37383\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 37383\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d40445\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 40445\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d39985\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 39985\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d39047\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 39047\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d45983\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 45983\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Mike Taylor for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d49964\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 49964\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d50515\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 50515\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51835\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51835\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51654\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51654\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51670\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51670\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d48437\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 48437\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d52204\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 52204\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d50386\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 50386\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Ashutosh Mehra and Vineet Batra of the Adobe Reader Sandbox Team for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d52682\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 52682\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d50712\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 50712\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Stefano Di Paola of MindedSecurity for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d55350\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 55350\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d54691\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 54691\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d56760\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 56760\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d61338\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 61338\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d55257\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 55257\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d58657\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 58657\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d59320\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 59320\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christoph Diehl for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60055\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60055\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60688\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60688\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62623\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62623\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62127\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62127\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62401\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62401\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Chris Rohlf for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d63866\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 63866\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d64959\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 64959\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d64945\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 64945\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d66560\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 66560\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jared Allar of \u003ca href\u003d\"http://www.cert.org/\" rel\u003d\"nofollow\"\u003eCERT\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67208\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67208\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67303\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67303\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67393\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67393\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to David Warren of \u003ca href\u003d\"http://www.cert.org/\" rel\u003d\"nofollow\"\u003eCERT\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68115\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68115\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68170\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68170\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68178\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68178\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68181\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68181\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68439\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68439\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68558\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68558\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d63248\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 63248\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d55831\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 55831\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d64051\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 64051\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d65577\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 65577\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68641\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68641\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68120\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68120\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d69556\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 69556\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to David Warren of \u003ca href\u003d\"http://www.cert.org/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eCERT\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70456\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70456\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d54262\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 54262\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68263\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68263\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68741\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68741\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70244\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70244\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71114\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71114\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71115\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71115\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71296\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71296\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71386\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71386\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71388\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71388\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71595\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71595\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71855\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71855\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72437\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72437\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73235\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73235\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70027\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70027\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70442\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70442\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71763\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71763\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72028\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72028\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73066\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73066\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73134\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73134\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74030\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74030\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74662\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74662\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74675\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74675\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73216\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73216\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74660\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74660\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74665\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74665\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74666\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74666\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74669\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74669\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74671\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74671\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74672\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74672\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74673\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74673\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74678\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74678\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christoph Diehl for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78524\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 78524\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73526\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73526\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74653\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74653\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jose A. Vazquez for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75186\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75186\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75801\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75801\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76001\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76001\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76666\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76666\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77507\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77507\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78031\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 78031\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76966\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76966\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77130\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77130\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Marek Majkowski for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77346\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77346\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72340\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72340\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78071\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 78071\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78270\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 78270\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76059\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76059\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72387\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72387\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d73962\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 73962\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d79746\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 79746\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d81949\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 81949\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Vladislavas Jarmalis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83010\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 83010\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83743\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 83743\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84452\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 84452\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d82546\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 82546\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84234\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 84234\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Philippe Arteau for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77493\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77493\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84355\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 84355\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85003\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 85003\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85211\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 85211\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85418\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 85418\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88850\"\u003ebug 88850\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to the Microsoft Java Team and Microsoft Vulnerability Research (MSVR) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88093\"\u003ebug 88093\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78841\"\u003ebug 78841\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78841\"\u003ebug 78841\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d86502\"\u003ebug 86502\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87148\"\u003ebug 87148\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87227\"\u003ebug 87227\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87729\"\u003ebug 87729\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87925\"\u003ebug 87925\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88591\"\u003ebug 88591\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88846\"\u003ebug 88846\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88889\"\u003ebug 88889\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Vladimir Vorontsov, \u003ca href\u003d\"http://onsec.ru\" rel\u003d\"nofollow\"\u003eONsec company\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72492\"\u003ebug 72492\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88216\"\u003ebug 88216\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87453\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 87453\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d90668\"\u003ebug 90668\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d91665\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 91665\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89219\"\u003ebug 89219\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89330\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 89330\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d92651\"\u003ebug 92651\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d92959\"\u003ebug 92959\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93420\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 93420\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93587\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 93587\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d95920\"\u003ebug 95920\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93788\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 93788\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d95072\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 95072\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d95672\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 95672\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98773\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 98773\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99167\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 99167\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97599\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 97599\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98064\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 98064\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98556\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 98556\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99294\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 99294\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99880\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 99880\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d96902\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 96902\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99138\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 99138\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 x2 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99211\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 99211\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d100464\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 100464\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d97092\"\u003ebug 97092\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62925\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62925\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d101458\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 101458\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d103259\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 103259\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d103058\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 103058\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d102810\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 102810\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d102628\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 102628\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d102359\"\u003ebug 102359\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d103921\"\u003ebug 103921\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104011\"\u003ebug 104011\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104859\"\u003ebug 104859\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104056\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 104056\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d103239\"\u003ebug 103239\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104529\"\u003ebug 104529\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Luka Treiber of ACROS Security for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d99016\"\u003ebug 99016\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d106441\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 106441\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Shawn Goertzen for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108871\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 108871\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109716\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 109716\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109743\"\u003ebug 109743\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d110112\"\u003ebug 110112\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d110374\"\u003ebug 110374\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 x2 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d105459\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 105459\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d106484\"\u003ebug 106484\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108605\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 108605\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109556\"\u003ebug 109556\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Boris Zbarsky of Mozilla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d106672\"\u003ebug 106672\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108695\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 108695\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d110172\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 110172\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d111779\"\u003ebug 111779\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112847\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 112847\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d105867\"\u003ebug 105867\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d111748\"\u003ebug 111748\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108037\"\u003ebug 108037\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$2000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112212\"\u003ebug 112212\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116093\"\u003ebug 116093\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108406\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 108406\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d115471\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 115471\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113258\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 113258\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113439\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 113439\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114924\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 114924\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d115028\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 115028\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113497\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 113497\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113707\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 113707\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114068\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 114068\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114219\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 114219\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d115681\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 115681\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113902\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 113902\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116746\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 116746\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116461\"\u003ebug 116461\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104863\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 104863\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d107758\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 107758\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108207\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 108207\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108544\"\u003ebug 108544\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d107244\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 107244\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d110764\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 110764\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112151\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 112151\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112833\" style\u003d\"color:rgb(85,26,139)\"\u003ebug 112833\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d111467\"\u003ebug 111467\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112411\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 112411\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204)\" target\u003d\"_blank\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114342\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 114342\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d113837\"\u003ebug 113837\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117471\"\u003ebug 117471\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Omair for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117588\"\u003ebug 117588\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d135432\"\u003ebug 135432\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d140803\"\u003ebug 140803\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d143609\"\u003ebug 143609\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d143656\"\u003ebug 143656\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d144899\"\u003ebug 144899\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d145544\"\u003ebug 145544\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d134897\"\u003ebug 134897\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d136235\"\u003ebug 136235\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jüri Aedla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d136894\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 136894\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d129898\"\u003ebug 129898\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d130595\"\u003ebug 130595\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d120222\"\u003ebug 120222\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d120944\"\u003ebug 120944\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d124356\"\u003ebug 124356\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d125374\"\u003ebug 125374\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d129947\"\u003ebug 129947\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d129951\"\u003ebug 129951\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d130356\"\u003ebug 130356\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Jüri Aedla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d132779\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 132779\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$1000 to Collin Payne for \u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d150737\"\u003ebug 150737\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$509 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d34978\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 34978\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e$500 to \u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eHironori Tokuta for \u003c/span\u003ebug 169401\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 284785\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 271161\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 270758\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 223962\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 152569\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e bug 253550\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003ebug 167069\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e$500 to Atte Kettunen for bug 148638\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eto \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eAtte K\u003c/span\u003eettunen for bug 142169\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Isaac Dawson for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d21338\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 21338\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Billy Rios for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d26129\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 26129\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Timothy D. Morgan of \u003ca href\u003d\"http://www.vsecurity.com/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003eVSR\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d32718\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 32718\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d35732\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 35732\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d37061\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 37061\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d39443\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 39443\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d40635\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 40635\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d42294\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 42294\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d42723\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 42723\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Rodrigo Marcos of SECFORCE for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d46126\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 46126\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d44424\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 44424\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d46360\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 46360\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d48115\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 48115\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Michail Nikolaev for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d42736\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 42736\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to sp3x of \u003ca href\u003d\"http://securityreason.com/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eSecurityReason.com\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d43813\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 43813\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to \u003ca href\u003d\"http://spa-s3c.blogspot.com/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eJose A. Vazquez\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d47866\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 47866\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d48284\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 48284\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d49596\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 49596\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d49628\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 49628\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d45331\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 45331\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51653\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51653\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Isaac Dawson for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53001\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53001\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to David Weston of Microsoft Vulnerability Research (MSVR) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d50250\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 50250\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51252\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51252\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51252\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51919\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Sergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53361\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53361\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to remy.saissy for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53361\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53361\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53394\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53394\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to wushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d55114\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 55114\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d57501\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 57501\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51680\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51680\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Simon Schaak for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d54500\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 54500\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to \"vkouchna\" for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d58741\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 58741\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to \"gundlach\" / various for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60238\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60238\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to \"fam.lam\" for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60327\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60327\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Stefan Troger for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d59554\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 59554\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d63051\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 63051\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62956\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62956\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Chamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d65299\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 65299\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Jan Tošovský for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d66748\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 66748\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to \u003ci\u003eanonymous\u003c/i\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67363\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67363\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Sergey Radchenko for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d63732\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 63732\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Stefan van Zanden for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70078\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70078\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Martin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d69628\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 69628\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Daniel Divricean for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70336\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70336\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Alex Turpin for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72517\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72517\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d74670\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 74670\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Yuri Ko for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70070\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70070\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71586\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71586\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Michael Griffiths for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75347\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75347\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Dan Rosenberg for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76542\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76542\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Jordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77786\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77786\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Collin Payne for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d81916\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 81916\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85177\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 85177\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85102\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 85102\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Mario Gomes for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85808\"\u003ebug 85808\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to kuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85808\"\u003ebug 85808\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87298\"\u003ebug 87298\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Shih Wei-Long for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d87339\"\u003ebug 87339\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Juho Nurminen for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88337\"\u003ebug 88337\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89142\"\u003ebug 89142\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Mario Gomes for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78639\"\u003ebug 78639\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Jordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89564\"\u003ebug 89564\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89991\"\u003ebug 89991\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d91120\"\u003ebug 91120\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Jordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d86758\"\u003ebug 86758\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Simon Sarris for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d91016\"\u003ebug 91016\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d100465\"\u003ebug 100465\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d98809\"\u003ebug 98809\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d104959\"\u003ebug 104959\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d105714\"\u003ebug 105714\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108416\"\u003ebug 108416\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108901\"\u003ebug 108901\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Aki Helin of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d110277\"\u003ebug 110277\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d106336\"\u003ebug 106336\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to pa_kt for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112259\"\u003ebug 112259\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112670\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 112670\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Sławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114054\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 114054\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108467\"\u003ebug 108467\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Masato Kinugawa for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109574\"\u003ebug 109574\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Arthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112317\"\u003ebug 112317\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d114056\"\u003ebug 114056\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Christian Holler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d117794\"\u003ebug 117794\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Nir Moshe for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d137707\"\u003ebug 137707\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to pawlkt for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d139168\"\u003ebug 139168\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Atte Kettunen of \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d141651\"\u003ebug 141651\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d121347\"\u003ebug 121347\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to miaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d136881\"\u003ebug 136881\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Emmanuel Bronshtein for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d142956\"\u003ebug 142956\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Takeshi Terada for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d144813\"\u003ebug 144813\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Takeshi Terada for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d144820\"\u003ebug 144820\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Takeshi Terada for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d137532\"\u003ebug 137532\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Takeshi Terada for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d144866\"\u003ebug 144866\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Takeshi Terada for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d141889\"\u003ebug 141889\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Artem Chaykin for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d138210\"\u003ebug 138210\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Artem Chaykin for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d138035\"\u003ebug 138035\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"font-size:10pt;background-color:transparent\"\u003e$500 to Ayush Jindal for \u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d68342\"\u003ebug 68342\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv /\u003e\u003cdiv\u003eThe following special-case rewards were issued for bugs in components external to the Chromium project. We sometimes issue rewards for bugs in external components where information of the bug enabled us to proactively protect our users.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e$5000 to Eetu Luodemaa and Joni Vähämäki, both from Documill, for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d146254\"\u003ebug 146254\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$4000 to Jüri Aedla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d107128\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 107128\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$3000 to Jüri Aedla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d129930\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 129930\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1337 to Marc Schoenefeld for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d48283\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 48283\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e$1337 to Simon Berry-Byrne for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d48733\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 48733\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1337 to Marc Schoenefeld for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51070\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51070\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1337 to Jüri Aedla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112822\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 112822\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Bui Quang Minh from Bkis (\u003ca href\u003d\"http://www.bkis.com\" rel\u003d\"nofollow\"\u003ewww.bkis.com\u003c/a\u003e) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d58731\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 58731\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Yang Dingning from NCNIPC, Graduate University of Chinese Academy of Sciences for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d63444\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 63444\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Yang Dingning from NCNIPC, Graduate University of Chinese Academy of Sciences for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d86900\"\u003ebug 86900\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Yang Dingning from NCNIPC, Graduate University of Chinese Academy of Sciences for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89402\"\u003ebug 89402\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Yang Dingning from NCNIPC, Graduate University of Chinese Academy of Sciences for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93472\"\u003ebug 93472\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$1000 to Nicolas Gregoire for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d138673\"\u003ebug 138673\u003c/a\u003e\u003c/li\u003e\u003cli\u003e$500 to Nicolas Gregoire for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d127417\"\u003ebug 127417\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e(Note that some of the above individuals elected to donate the rewards to charity. In these cases, Google often increased the value of the donation beyond the stated reward amount.)\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Honorable-mention\" /\u003e\u003cb\u003eHonorable mention\u003c/b\u003e\u003c/h3\u003eThe following lower severity or duplicate bugs were responsibly reported to the Chromium project. Thanks to these named individuals for helping Chromium security!\u003cbr /\u003e\u003cul\u003e\u003cli\u003eMike Dougherty of dotSyntax, LLC for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d33572\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 33572\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d37007\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 37007\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eRSnake of \u003ca href\u003d\"http://ha.ckers.org/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eha.ckers.org\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d33445\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 33445\u003c/a\u003e\u003c/li\u003e\u003cli\u003eTobias Klein (\u003ca href\u003d\"http://www.trapkit.de/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003ewww.trapkit.de\u003c/a\u003e) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d38845\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 38845\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCarlos Ghan for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d33952\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 33952\u003c/a\u003e\u003c/li\u003e\u003cli\u003eWHK \u0026lt;elhacker.net\u0026gt; and The-0utl4w From Aria-Security for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d34721\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 34721\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d35979\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 35979\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d36976\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 36976\u003c/a\u003e\u003c/li\u003e\u003cli\u003eJordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d37447\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 37447\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d39277\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 39277\u003c/a\u003e\u003c/li\u003e\u003cli\u003eFlorent, Skyrecon systems for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d40801\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 40801\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d41778\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 41778\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d42538\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 42538\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d40628\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 40628\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d41447\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 41447\u003c/a\u003e\u003c/li\u003e\u003cli\u003eFlorian Rienhardt, BSI for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d36553\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 36553\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBen Davis and Emanuele Gentili for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d38105\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 38105\u003c/a\u003e\u003c/li\u003e\u003cli\u003eSergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d42396\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 42396\u003c/a\u003e\u003c/li\u003e\u003cli\u003eJose A. Vazquez for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d45164\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 45164\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMats Ahlgren for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d46575\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 46575\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d47056\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 47056\u003c/a\u003e\u003c/li\u003e\u003cli\u003eLostmon for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d28001\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 28001\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\"ironfist99\" for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d34414\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 34414\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChris Weber from Casaba Security for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d37201\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 37201\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBrook Novak for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d41654\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 41654\u003c/a\u003e\u003c/li\u003e\u003cli\u003eLostmon for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d45876\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 45876\u003c/a\u003e\u003c/li\u003e\u003cli\u003eKeith Campbell for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51846\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51846\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.vupen.com/\" rel\u003d\"nofollow\"\u003eVUPEN Vulnerability Research Team\u003c/a\u003e (VUPEN-SR-2010-249) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d52443\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 52443\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\"magnusmorton\" for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51709\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51709\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53176\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53176\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\"adriennefelt\" for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d54006\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 54006\u003c/a\u003e\u003c/li\u003e\u003cli\u003eJordi Chancel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51680\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 51680\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d53002\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 53002\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDan Rosenberg, Virtual Security Research for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d54132\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 54132\u003c/a\u003e\u003c/li\u003e\u003cli\u003eNirankush Panchbhai and Microsoft Vulnerability Research (MSVR) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d55745\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 55745\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCezary Tomczak for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d58319\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 58319\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMohammed Bouhlel for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d61701\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 61701\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62168\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62168\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDavid Weston of Microsoft Vulnerability Research (MSVR) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60055\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60055\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d60761\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 60761\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMarius Wachtler for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62276\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62276\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d65299\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 65299\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d66591\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 66591\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDavid Warren of \u003ca href\u003d\"http://www.cert.org/\" rel\u003d\"nofollow\"\u003eCERT\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67303\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67303\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67363\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67363\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBrian Kirchoff for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d62791\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 62791\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDan Morrison for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d66931\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 66931\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMatthew Heidermann for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d68244\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 68244\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.reddit.com\" rel\u003d\"nofollow\"\u003eReddit\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d69195\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 69195\u003c/a\u003e\u003c/li\u003e\u003cli\u003eRik Cabanier for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d67234\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 67234\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71717\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71717\u003c/a\u003e\u003c/li\u003e\u003cli\u003eLouis Lang for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d49747\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 49747\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" style\u003d\"color:rgb(0,102,204);outline-style:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d66962\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 66962\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDavid Weston of Microsoft and Microsoft Vulnerability Research (MSVR) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d71788\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 71788\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMartin Barbella for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d61502\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 61502\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChamal de Silva for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d70538\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 70538\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCole Snodgrass for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72523\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72523\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d72910\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 72910\u003c/a\u003e\u003c/li\u003e\u003cli\u003ewushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75801\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 75801\u003c/a\u003e\u003c/li\u003e\u003cli\u003ewushi of team509 for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d76646\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 76646\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d77349\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 77349\u003c/a\u003e\u003c/li\u003e\u003cli\u003eSergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d75821\"\u003ebug 75821\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d79266\"\u003ebug 79266\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d79426\"\u003ebug 79426\u003c/a\u003e\u003c/li\u003e\u003cli\u003eSergey Glazunov for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83273\"\u003ebug 83273\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83841\"\u003ebug 83841\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84402\"\u003ebug 84402\u003c/a\u003e\u003c/li\u003e\u003cli\u003eOlli Pettay of Mozilla for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84600\"\u003ebug 84600\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84805\"\u003ebug 84805\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMikołaj Małecki for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85559\"\u003ebug 85559\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCollin Payne for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d84933\"\u003ebug 84933\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d82552\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 82552\u003c/a\u003e\u003c/li\u003e\u003cli\u003ewushi of team509 (reported through ZDI) for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88670\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 88670\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d88670\" style\u003d\"color:rgb(0,102,204);outline-style:none\"\u003ebug 88670\u003c/a\u003e\u003c/li\u003e\u003cli\u003eelectronixtar for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d51464\"\u003ebug 51464\u003c/a\u003e\u003c/li\u003e\u003cli\u003ewbrana for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d57908\"\u003ebug 57908\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d78427\"\u003ebug 78427\u003c/a\u003e\u003c/li\u003e\u003cli\u003ekuzzcc for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d83031\"\u003ebug 83031\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAaron Sigel of \u003ca href\u003d\"http://vtty.com\" rel\u003d\"nofollow\"\u003evtty.com\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d80680\"\u003ebug 80680\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMario Gomes for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d85041\"\u003ebug 85041\u003c/a\u003e\u003c/li\u003e\u003cli\u003eArthur Gerkis for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d89795\"\u003ebug 89795\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d90134\"\u003ebug 90134\u003c/a\u003e\u003c/li\u003e\u003cli\u003emiaubiz for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d94800\"\u003ebug 94800\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBernhard 'Bruhns' Brehm of Recurity Labs for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93497\"\u003ebug 93497\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d93596\"\u003ebug 93596\u003c/a\u003e\u003c/li\u003e\u003cli\u003eNishant Yadant of VMware and Craig Chamberlain for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d95917\"\u003ebug 95917\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChu for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d101010\"\u003ebug 101010\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAki Helin from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d100863\"\u003ebug 100863\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCollin Payne for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d92550\"\u003ebug 92550\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDevdatta Akhawe, UC Berkeley for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d103630\"\u003ebug 103630\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAtte Kettunen from \u003ca href\u003d\"https://www.ee.oulu.fi/research/ouspg/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eOUSPG\u003c/a\u003e for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109094\"\u003ebug 109094\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCode Audit Labs of VulnHunt.com for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109245\"\u003ebug 109245\u003c/a\u003e\u003c/li\u003e\u003cli\u003eSławomir Błażek for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109664\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 109664\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBen Carrillo for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d109717\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 109717\u003c/a\u003e\u003c/li\u003e\u003cli\u003echrometot for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d112451\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 112451\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMichael Gundlach for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d108648\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 108648\u003c/a\u003e\u003c/li\u003e\u003cli\u003eGlenn Randers-Pehrson for \u003ca href\u003d\"http://code.google.com/p/chromium/issues/detail?id\u003d116162\" style\u003d\"color:rgb(0,102,204)\"\u003ebug 116162\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6743906577140407009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/hall-of-fame"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7960892143921275114"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7960892143921275114"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7960892143921275114"}],"author":[{"name":{"$t":"Justin Schuh"},"email":{"$t":"jschuh@chromium.org"}}],"sites$pageName":{"$t":"hall-of-fame"},"sites$revision":{"$t":"91"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4724803148756453844"},"published":{"$t":"2013-01-25T21:45:20.747Z"},"updated":{"$t":"2016-09-22T16:27:19.207Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-22T16:27:09.965Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tools we use in Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eNinja\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e - This is a command line build system which is much faster than building from IDEs such as MSVS or Xcode.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003egclient\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e - This is a wrapper which lets us act on all the various projects as one - for instance, we use “gclient sync” and “gclient runhooks” often.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eGN\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e - This generates our project files to use with Ninja, MSVS, and/or Xcode. It is run by gclient, we don’t normally call it directly. .gn files take the place of makefiles or build files from other projects.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium/grit\"\u003eGRIT\u003c/a\u003e\u003c/b\u003e - Short for \"Google Resource and Internationalization Tool,\" this is a Google-created tool used by Chromium and usable by other projects.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eGit \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e- The base repository is using git hosted at \u003ca href\u003d\"https://chromium.googlesource.com\"\u003ehttps://chromium.googlesource.com\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eDiffMerge\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e - A graphical tool to view diffs graphically on your own machine before commiting to your local branch. This can be hooked up to Git and Subversion (search for instructions on the web). There are other graphical diff viewers that we use, but this one will work on all main supported platforms (Win, Mac, Linux)\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eEditor extensions \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e- Emacs has some custom extensions to make chromium development easier - \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/emacs.md\" style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chromium.googlesource.com/chromium/src/+/master/docs/emacs.md\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e (TODO: as we find others for other editors, add them here!)\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/tools-we-use-in-chromium"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4724803148756453844"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4724803148756453844"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4724803148756453844"}],"author":[{"name":{"$t":"Peter Williamson"},"email":{"$t":"petewil@chromium.org"}}],"sites$pageName":{"$t":"tools-we-use-in-chromium"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8016898297214312938"},"published":{"$t":"2009-12-11T00:16:53.350Z"},"updated":{"$t":"2016-09-22T00:55:09.183Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-22T00:55:07.984Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Git documentation elsewhere"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tech-Talks\" /\u003eTech Talks\u003c/h2\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eRandall Schwartz's \u003ca href\u003d\"http://www.youtube.com/watch?v\u003d8dhZ9BXQgc4\"\u003eTech Talk on git\u003c/a\u003e \u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fgitcasts.com%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzdXGanWebnB47ED_tYigjprxxyXlA\"\u003egitcasts\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Online-References\" /\u003eOnline References\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fwww-cs-students.stanford.edu%2F%257Eblynn%2Fgitmagic%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzd0LcYKlFSHeWlQzalvRlf4sTBLiA\"\u003eGit Magic\u003c/a\u003e \u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Feagain.net%2Farticles%2Fgit-for-computer-scientists%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzcOLmdu1_j4wvdnWaUkgTNwig-zxg\"\u003eGit for computer scientists\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fwww.kernel.org%2Fpub%2Fsoftware%2Fscm%2Fgit%2Fdocs%2Fuser-manual.html\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzfv8SPESPQ4stacQ08cvUzlMXbbKA\"\u003eGit Manual\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fwww.git-scm.com%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzfgZQlz4_hsTqn7WUSTXOLr3NjfHQ\"\u003egit-scm.\u003c/a\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fwww.git-scm.com%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzfgZQlz4_hsTqn7WUSTXOLr3NjfHQ\"\u003ecom\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://marklodato.github.com/visual-git-guide/\" rel\u003d\"nofollow\"\u003eGit Visual Guide\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Online-Books\" /\u003eOnline Books\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fprogit.org%2Fbook%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzd8OyxDVoHmTqpvytsEpbMxueIC2A\"\u003ePro Git\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fbook.git-scm.com%2F\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFrqEzeeHhoe_KJJGnPfXy5HvHYTkvCz0Q\"\u003eGit Community Book\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/git-helpers"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8016898297214312938"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8016898297214312938"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8016898297214312938"}],"author":[{}],"sites$pageName":{"$t":"git-helpers"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8683887004275983620"},"published":{"$t":"2016-06-20T02:35:59.097Z"},"updated":{"$t":"2016-09-14T17:52:55.736Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-14T17:52:53.055Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Sideload Android apps on your Chromebook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont color\u003d\"#666666\" face\u003d\"arial, sans-serif\"\u003eThis article has been relocated to \u003ca href\u003d\"https://developer.android.com/topic/arc/sideload.html\"\u003ehttps://developer.android.com/topic/arc/sideload.html\u003c/a\u003e\u003c/font\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/sideload-android-apps-on-chromebook"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8683887004275983620"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8683887004275983620"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8683887004275983620"}],"author":[{"name":{"$t":"Omri Amarilio"},"email":{"$t":"omrilio@chromium.org"}}],"sites$pageName":{"$t":"sideload-android-apps-on-chromebook"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"Xyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5469081092882769864"},"published":{"$t":"2016-05-19T17:55:38.160Z"},"updated":{"$t":"2016-09-14T17:52:05.896Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-14T17:52:04.239Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Optimize Android Apps for Chromebooks"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont color\u003d\"#212121\" face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:18.4px;white-space:pre-wrap\"\u003eThis article has been relocated to \u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;line-height:18.4px;white-space:pre-wrap\"\u003e\u003cfont color\u003d\"#212121\" face\u003d\"arial, sans-serif\"\u003e\u003ca href\u003d\"https://developer.android.com/topic/arc/index.html\"\u003ehttps://developer.android.com/topic/arc/index.html\u003c/a\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/android-apps"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5469081092882769864"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5469081092882769864"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5469081092882769864"}],"author":[{"name":{"$t":"Saswat Panigrahi"},"email":{"$t":"saswat@chromium.org"}}],"sites$pageName":{"$t":"android-apps"},"sites$revision":{"$t":"16"}},{"gd$etag":"\"USl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7738794733803697961"},"published":{"$t":"2014-12-20T02:21:41.189Z"},"updated":{"$t":"2016-09-14T06:25:50.318Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-14T06:25:48.645Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Debugging Features"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Enabling-debugging-features\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eEnabling debugging features\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Disabling-debugging-features\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDisabling debugging features\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003cp\u003eThis page describes Chromium OS features that are supported beginning in release M41.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eYou can enable debugging features on your Chrome OS device to support installing and testing custom code on your device. These features allow you to: \u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eRemove rootfs verification so you can modify OS files\u003c/li\u003e\r\n\u003cli\u003eEnable SSH access to the device using the standard test keys so you can use tools such as \u003ccode\u003ecros flash\u003c/code\u003e to access the device\u003c/li\u003e\r\n\u003cli\u003eEnable booting from USB so you can install an OS image from a USB drive\u003c/li\u003e\r\n\u003cli\u003eSet both the dev and the system root login password to a custom value so you can manually SSH into the device\u003c/li\u003e\u003c/ul\u003e\r\n\u003cp\u003eDebugging features lower system security, primarily by allowing remote access via SSH using publicly known keys. For this reason, you can enable them only during the Out of the Box Experience (OOBE) when the device is booted in Developer Mode. Once you've finished OOBE (e.g. you've logged in to an account), you can't access this section again. You'd have to powerwash it to reset back.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Enabling-debugging-features\" /\u003eEnabling debugging features\u003c/h2\u003e\r\n\u003cp\u003eTo enable debugging features, do the following: \u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003eUse the \u003ca href\u003d\"https://support.google.com/chromebook/answer/183084\"\u003epowerwash process\u003c/a\u003e or the \u003ca href\u003d\"https://support.google.com/chromebook/answer/1080595\"\u003erecovery process\u003c/a\u003e to wipe your hard drive. After the device reboots and you sign in again, you’ll see the first screen.\u003cbr /\u003e\r\n\u003cb\u003eNote:\u003c/b\u003e For managed Chrome OS devices, do NOT follow the powerwash or recovery instructions because you won’t be able re-enroll the device afterwards. Instead, \u003ca href\u003d\"https://support.google.com/chrome/a/answer/1360642\"\u003ewipe the data on your Chrome OS device\u003c/a\u003e to reset the device.\u003c/li\u003e\r\n\u003cli\u003eSet the device to Developer Mode (see \u003ca href\u003d\"http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices\"\u003eDeveloper Information for Chrome OS Devices\u003c/a\u003e). The system reboots, then displays the “OS Verification is OFF\" screen.\u003c/li\u003e\r\n\u003cli\u003ePress Ctrl+D to dismiss this screen. The device reboots and shows the first screen.\u003c/li\u003e\r\n\u003cli\u003eClick the \u003cb\u003eEnable debugging features\u003c/b\u003e link. A confirmation dialog displays.\u003c/li\u003e\r\n\u003cli\u003eClick \u003cb\u003eProceed\u003c/b\u003e. The system reboots and displays a dialog with password prompts.\u003c/li\u003e\r\n\u003cli\u003e[OPTIONAL] Set the new root password.\u003cbr /\u003e\r\n\u003cb\u003eNote:\u003c/b\u003e If you leave the root password blank, the password defaults to .\u003c/li\u003e\r\n\u003cli\u003eClick \u003cb\u003eEnable\u003c/b\u003e. The screen displays messages indicating success or failure.\u003c/li\u003e\r\n\u003cli\u003eClick \u003cb\u003eOK\u003c/b\u003e. You'll see the first screen again.\u003c/li\u003e\r\n\u003cli\u003eFollow the remaining prompts to configure your Chrome device.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Disabling-debugging-features\" /\u003eDisabling debugging features\u003c/h2\u003e\r\n\u003cp\u003eOn a managed Chrome OS device, most debugging features remain enabled, even after powerwashing or wiping the data. Use one of the following processes to disable features, depending on your requirements:\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://support.google.com/chromebook/answer/1080595\"\u003eChrome OS recovery process\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eThe \u003ca href\u003d\"http://www.chromium.org/chromium-os/build/cros-flash\"\u003ecros flash\u003c/a\u003e script for updating the Chrome OS image directly\u003c/li\u003e\r\n\u003cli\u003eThe \u003ca href\u003d\"http://www.chromium.org/chromium-os/build/cros-flash\"\u003ecros flash\u003c/a\u003e script for updating the Chrome OS image via USB (or directly using the \u003ccode\u003e--clobber-stateful\u003c/code\u003e flag)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://support.google.com/chromebook/answer/183084\"\u003ePowerwash\u003c/a\u003e process\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003eThis table summarizes the features reset by each procedure (✓ means the feature is reset):\u003c/p\u003e\r\n\u003ctable border\u003d\"1\" cellpadding\u003d\"5px\" cellspacing\u003d\"0\"\u003e\r\n\u003ctbody\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd /\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003eChrome OS Recovery\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e\u003ccode\u003ecros flash\u003c/code\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e\u003ccode\u003ecros flash usb://\u003c/code\u003e\u003cbr /\u003e\r\nor\u003cbr /\u003e\r\n\u003ccode\u003ecros flash --clobber-stateful\u003c/code\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003ePowerwash\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd\u003e Rootfs verification\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd /\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd\u003e SSH w/ test keys\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd /\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd\u003e USB boot\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd /\u003e\r\n\u003ctd /\u003e\r\n\u003ctd /\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd\u003e System password\u003cbr /\u003e\r\n (for SSH login)\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd /\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003ctr\u003e\r\n\u003ctd\u003e Dev password\u003cbr /\u003e\r\n (if present, overrides\u003cbr /\u003e\r\n system password for VT2 login)\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd /\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003ctd style\u003d\"text-align:center\"\u003e✓\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\r\n\u003cp\u003eTo manually disable booting from USB:\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003eMake sure the device is in developer mode.\u003c/li\u003e\r\n\u003cli\u003eOpen the terminal window by pressing Ctrl + Alt + F2.\u003c/li\u003e\r\n\u003cli\u003eLog in as \u003ccode\u003eroot\u003c/code\u003e.\u003c/li\u003e\r\n\u003cli\u003eType the default password \u003ccode\u003etest0000,\u003c/code\u003e or the custom password you set previously.\u003c/li\u003e\r\n\u003cli\u003eAt the command prompt, type \u003ccode\u003ecrossystem dev_boot_usb\u003d0\u003c/code\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/debugging-features"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7738794733803697961"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7738794733803697961"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7738794733803697961"}],"author":[{"name":{"$t":"Tania Lissitskaia"},"email":{"$t":"tls@chromium.org"}}],"sites$pageName":{"$t":"debugging-features"},"sites$revision":{"$t":"18"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4406347036425381476"},"published":{"$t":"2016-09-09T22:02:55.215Z"},"updated":{"$t":"2016-09-09T22:23:03.956Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-09T22:23:02.737Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chromium OS Cgroups"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eAll cgroups are optional, but highly-recommended and if present will be used by Chrome and Chrome OS\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003etop-level cgroups created by /etc/init/cgroups.conf \u003cdiv\u003e\u003cul\u003e\u003cli\u003ecpu - \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eUses CPU time accounting to set limits on certain tasks \u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cul\u003e\u003cli\u003echrome_renderers - Set by Chrome code in \u0026lt;fixme\u0026gt;\u003c/li\u003e\u003cli\u003esession_manager_container - set by session manager in \u0026lt;fixme\u0026gt;\u003c/li\u003e\u003cli\u003eupdate-engine - set by update-engine in \u0026lt;fixme\u0026gt;\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli\u003efreezer\u003c/li\u003e\u003cul\u003e\u003cli\u003egroup of threads which stop running when we suspend or resume\u003c/li\u003e\u003cli\u003ethis limits the amount of work that happens at resume\u003c/li\u003e\u003cli\u003edone by \u0026lt;fixme\u0026gt;\u003c/li\u003e\u003c/ul\u003e\u003cli\u003edevices\u003c/li\u003e\u003cul\u003e\u003cli\u003elimits the devices available to a process\u003c/li\u003e\u003cli\u003edone by \u0026lt;fixme\u0026gt;\u003c/li\u003e\u003c/ul\u003e\u003cli\u003ecpuacct\u003c/li\u003e\u003cul\u003e\u003cli\u003ekeeps track of resources consumed by a given group\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eThere are also cgroups which are board-specific. \u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ecpuset\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eFor big.LITTLE systems with different types of CPU cores, we set up cpusets for background tasks called cpuset/chrome/non-urgent/ which will be pinned to little CPUs and another for performance-sensitive tasks called cpuset/chrome/urgent/\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIt's up to Chrome to put the correct tasks (threads) into the {non-,}urgent group as appropriate.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/chromium-os-cgroups"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4406347036425381476"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4406347036425381476"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4406347036425381476"}],"author":[{"name":{"$t":"Sonny Rao"},"email":{"$t":"sonnyrao@chromium.org"}}],"sites$pageName":{"$t":"chromium-os-cgroups"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7942518092120313924"},"published":{"$t":"2016-08-29T05:54:56.354Z"},"updated":{"$t":"2016-09-06T06:36:39.183Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-09-06T06:36:37.288Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Site Engagement"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe Site Engagement Service provides information about how engaged a user is with a site. The primary signal is the amount of active time the user spends on the site but various other signals may be incorporated (e.g whether a site is added to the homescreen).\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat is a site?\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSite is an inexact term. For the purposes of site engagement, we’ll be treating origins as sites.\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat is engagement?\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eEngagement is an even more nebulous term. We want to track that the user is giving some amount of active attention to the site. To approximate this, we register a user as active when the user scrolls, clicks or types on the page. Media playback also provides a small engagement increase.\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eEngagement Score\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe engagement score has the following properties:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-size:13.3333px;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe score is a double from 0-100. The highest number in the range represents a site the user engages with heavily, and the lowest number represents zero engagement.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eScores are keyed by origin.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eActivity on a site increases its score, up to some maximum amount per day.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAfter a period of inactivity the score will start to decay.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe engagement score is not intended to be a dumping ground for ‘signals we want to include’. If other signals that are not directly user-attention based are required, they should be tracked separately.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe current activity based signals are:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-size:13.3333px;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eDirect navigations to a site (e.g omnibox, bookmark and not link clicks, popups)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eActive time on the site (where active time is represented by e.g. scrolling, clicking, keypresses)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMedia playback on a site\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe current grant based signals are:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-size:13.3333px;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAdding the site to the homescreen / desktop\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe user engagement score are not synced, so decisions made on a given device are made based on the users’ activity on that device alone.\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUsage of the engagement score\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSite Engagement clients should consider how their use case relates to engagement. We expect that many clients should only be using engagement as one facet of a more tailored heuristic. The engagement score has been designed with these use cases in mind:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-size:13.3333px;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSorting or prioritizing sites in order of engagement (e.g tab discarding, most used list on NTP)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSetting engagement cutoff points for features (e.g app banner, video autoplay, window.alert())\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAllocating resources based on the proportion of overall engagement a site has (e.g storage, background sync)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePrivacy Considerations\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhen in incognito mode, site engagement will be copied from the original profile and then allowed to decay and grow independently. There will be no information flow from the incognito profile back to the original profile. Incognito information is deleted when the browser is shut down.\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eEngagement scores are cleared with browsing history. Origins are deleted when the history service deletes URLs and subsequently reports zero URLs belonging to that origin are left in history.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:14.6667px;white-space:pre-wrap\"\u003eURLs are cleared when scores decay to zero.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/site-engagement"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7942518092120313924"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7942518092120313924"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7942518092120313924"}],"author":[{"name":{"$t":"Christopher Lam"},"email":{"$t":"calamity@chromium.org"}}],"sites$pageName":{"$t":"site-engagement"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/177896469687854744"},"published":{"$t":"2015-08-28T19:34:19.313Z"},"updated":{"$t":"2016-08-26T17:54:27.873Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-26T17:54:26.343Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Reproducing ClusterFuzz bugs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eIf you've been assigned a ClusterFuzz bug but aren't sure what to do next, you're in the right place. If you want to help catch more bugs, you should also read up on \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz\"\u003edeveloping new fuzzers\u003c/a\u003e and \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/bugs/using-clusterfuzz\"\u003eusing ClusterFuzz\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNoticed a problem? File a bug using \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?components\u003dTools%3EStability%3EClusterFuzz\"\u003ethis template\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Getting-started\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eGetting started\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Common-problems\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eCommon problems\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Setting-up-the-local-reproduction-script-Googler-only-\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eSetting up the local reproduction script (Googler only)\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Getting-started\" /\u003eGetting started\u003c/h2\u003e\u003cdiv\u003eIn the best case scenario, downloading the minimized test case and running it in chrome (or whatever binary you are testing) will be enough to reproduce the issue. Usually, you will also need to include the command line flags specified in the report as well.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen this doesn't work, you can also try downloading the exact build that the crash was found in via the \"build\" link in the ClusterFuzz report. If you are able to reproduce the issue using that, but not in your build, it may be a sign that you need to enable some kind of memory debugging tool, such as \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/addresssanitizer\" style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eAddressSanitizer\u003c/a\u003e. The tool that you should will depend on the type of bug. See the common problems section for more information.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMore complicated cases, such as test cases with gestures, may require you to use the ClusterFuzz local reproduction script. There are several quirks about that bot environment that this script is able to emulate which may also help you reproduce the crash consistently. Download the \"local reproduction config\" file from the report, and pass it as the --config argument to the script. If you haven't installed the script yet, see the instructions below. Unfortunately, it is Googler-only at the moment :(\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you still aren't able to reproduce the issue, you have a few options. For certain job types such as \u003ca href\u003d\"https://code.google.com/p/syzygy/wiki/SyzyASanBug\"\u003eSyzyASan\u003c/a\u003e ones, a minidump may also be available. The report itself also includes some information about what may have gone wrong. If this is enough to work with, you could attempt a speculative fix. If there is nothing actionable in the report, simply mark it as WontFix.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Common-problems\" /\u003eCommon problems\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eTest cases with gestures tend to be very difficult to reproduce. If you notice that a test case has gestures (look for the \"interaction gestures\" section at the top of the report), you should try using the local reproduction script.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eSome test cases do not reproduce correctly unless served over HTTP. Look for a \"requires\" section in the report, or a notification that the test case requires HTTP on the bug.\u003c/span\u003e\u003c/li\u003e\u003cli\u003eYou may not be able to reproduce all issues in a normal chromium build since ClusterFuzz makes heavy use of various memory debugging tools. Try using \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/addresssanitizer\"\u003eAddressSanitizer\u003c/a\u003e, \u003ca href\u003d\"https://code.google.com/p/syzygy/wiki/SyzyASanBug\"\u003eSyzyASan\u003c/a\u003e, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/memorysanitizer\"\u003eMemorySanitizer\u003c/a\u003e, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/leaksanitizer\"\u003eLeakSanitizer\u003c/a\u003e, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/threadsanitizer-tsan-v2\"\u003eThreadSanitizer\u003c/a\u003e, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/testing/undefinedbehaviorsanitizer\"\u003eUndefinedBehaviorSanitizer\u003c/a\u003e, or whichever tool is being used in the report that has been assigned to you.\u003c/li\u003e\u003cli\u003eSometimes, a crash just isn't reproducible. If a crash is marked as unreproducible in ClusterFuzz and you're seeing similar results, don't spend too long re-running it. If the information in the report isn't enough to work with, don't be afraid to mark the bug as WontFix.\u003c/li\u003e\u003cli\u003eSome tools, like the IPC fuzzer, have a more complicated setup process. In these cases, we try to provide additional help links in the report itself to documentation which may be useful.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Setting-up-the-local-reproduction-script-Googler-only-\" /\u003eSetting up the local reproduction script (Googler only)\u003c/h2\u003e\u003cdiv\u003eIf you weren't able to reproduce the issue using only the minimized test case and command line arguments from the report, you may want to try using the local reproduction script. It attempts to mimic the environment on the ClusterFuzz bots as closely as possible, and will attempt to run the test multiple times in case it's flaky.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSee \u003ca href\u003d\"http://goto.google.com/clusterfuzz-repro\"\u003egoto.google.com/clusterfuzz-repro\u003c/a\u003e for setup details.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568775710312449219"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/177896469687854744"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/177896469687854744"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/177896469687854744"}],"author":[{"name":{"$t":"Martin Barbella"},"email":{"$t":"mbarbella@chromium.org"}}],"sites$pageName":{"$t":"reproducing-clusterfuzz-bugs"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5051830918032442007"},"published":{"$t":"2016-08-26T17:24:15.504Z"},"updated":{"$t":"2016-08-26T17:30:03.897Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-26T17:30:03.897Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Clusterfuzz automatic bug filing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"background-color:rgb(234,153,153)\"\u003e\u003cb\u003eThis page is still under construction.\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eClusterFuzz will file certain issues automatically. Currently, this is only done for reproducible security bugs for which it does not seem like a similar issue has been filed already.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you have a concern, please file a bug using \u003ca href\u003d\"https://bugs.chromium.org/p/chromium/issues/entry?components\u003dTools%3EStability%3EClusterFuzz\"\u003ethis template\u003c/a\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5568775710312449219"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/bugs/automatic-filing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5051830918032442007"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5051830918032442007"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5051830918032442007"}],"author":[{"name":{"$t":"Martin Barbella"},"email":{"$t":"mbarbella@chromium.org"}}],"sites$pageName":{"$t":"automatic-filing"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7673029562140054330"},"published":{"$t":"2016-08-24T21:37:04.459Z"},"updated":{"$t":"2016-08-24T21:37:04.488Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-24T21:37:04.459Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_977.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7673029562140054330"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7673029562140054330"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7673029562140054330"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7673029562140054330"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7673029562140054330"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3667861166806532038"},"published":{"$t":"2016-08-24T21:32:58.227Z"},"updated":{"$t":"2016-08-24T21:32:58.255Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-24T21:32:58.227Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_978.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3667861166806532038"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3667861166806532038"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3667861166806532038"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3667861166806532038"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3667861166806532038"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6936374383952810436"},"published":{"$t":"2016-08-24T21:31:37.644Z"},"updated":{"$t":"2016-08-24T21:31:37.672Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-24T21:31:37.644Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_982.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6936374383952810436"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6936374383952810436"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6936374383952810436"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6936374383952810436"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6936374383952810436"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2735717427566293830"},"published":{"$t":"2016-08-24T21:27:30.541Z"},"updated":{"$t":"2016-08-24T21:27:30.570Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-24T21:27:30.541Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_980.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2735717427566293830"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7013358383000086029"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2735717427566293830"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2735717427566293830"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2735717427566293830"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2735717427566293830"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3652656357779905392"},"published":{"$t":"2014-09-04T00:31:56.014Z"},"updated":{"$t":"2016-08-18T18:04:35.438Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-27T17:02:54.776Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Viewing change logs for Chromium and Blink"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-way-to-generate-change-logs-for-Chromium-is-via-gitiles.-The-format-of-the-URLs-is-as-follows:\" /\u003e\u003cspan style\u003d\"font-size:10pt;font-weight:normal;background-color:transparent\"\u003eThe way to generate change logs for Chromium is via gitiles. The format of the URLs is as follows:\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ehttps://chromium.googlesource.com/chromium/src/+log/oldhash..newhash?pretty\u003dfull\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\"pretty\" can be left off. Options are \"full\" and \"fuller\".\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48\" target\u003d\"_blank\"\u003eExample changelog without pretty option\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48?pretty\u003dfull\" target\u003d\"_blank\"\u003eExample changelog with pretty\u003dfull\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48?pretty\u003dfuller\" target\u003d\"_blank\"\u003eExample changelog with pretty\u003dfuller\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003eJSON format queries:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eadd format\u003dJSON to any query (note the ALL CAPS). E.g.: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;format\u003dJSON\"\u003ehttps://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;format\u003dJSON\u003c/a\u003e\u003c/li\u003e\u003cli\u003eThe \"next\" key inside JSON provides a cursor for the next page. Use it with s\u003d\u0026lt;next_cursor\u0026gt;, e.g. \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;s\u003dbaa385c24c57df62f64a5f1fecee739dc2dcc3ba\"\u003ehttps://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;s\u003dbaa385c24c57df62f64a5f1fecee739dc2dcc3ba\u003c/a\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003eThe last page will have no \"next\" key. Also any page except for the first will have a \"previous\" cursor to page backwards.\u003c/li\u003e\u003c/ul\u003e\u003cli\u003ePage size: e.g. n\u003d1000: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;format\u003dJSON\u0026amp;n\u003d1000\"\u003ehttps://chromium.googlesource.com/chromium/src/+log/master?pretty\u003dfull\u0026amp;format\u003dJSON\u0026amp;n\u003d1000\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003eNote, that JSON format has a \")]}'\" line at the top, to prevent cross-site scripting. When parsing, assert that the first line has \")]}'\", strip it, and parse the rest of JSON normally.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/change-logs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3652656357779905392"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3652656357779905392"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3652656357779905392"}],"author":[{"name":{"$t":"Kenneth Russell"},"email":{"$t":"kbr@chromium.org"}}],"sites$pageName":{"$t":"change-logs"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9165147550424172692"},"published":{"$t":"2014-08-05T00:51:39.376Z"},"updated":{"$t":"2016-08-18T17:26:52.557Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-18T17:26:50.259Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Speed Hall of Fame"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor some time in 2013-2015, we listed a performance improvement of the week\u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;font-size:10pt;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. This page is now here for historical purposes.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:1.15;font-size:10pt;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:1.15;font-size:10pt;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBut, feel free to nominate future changes! \u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;font-size:10pt;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAll Chromium contributors are eligible. To ensure a change is considered, nominate it to \u003c/span\u003e\u003ca href\u003d\"mailto:perf-sheriffs@chromium.org\" style\u003d\"line-height:1.15;font-size:10pt;text-decoration:none;background-color:transparent\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eperf-sheriffs@chromium.org\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"line-height:1.15;font-size:10pt;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-1\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-2015\"\u003e\u003cstrong\u003e1 \u003c/strong\u003e2015\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-2014\"\u003e\u003cstrong\u003e2 \u003c/strong\u003e2014\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-2013\"\u003e\u003cstrong\u003e3 \u003c/strong\u003e2013\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2 style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2015\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2015\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal;line-height:1.43181818181818;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2015-02-11\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2015-02-11\u003c/span\u003e\u003c/h3\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;white-space:normal\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"line-height:1.38;background-color:transparent\"\u003eThis week, we highlight the performance sheriffing process working as it should due to reliability improvements.\u003c/span\u003e A few weeks ago, Joshua Bell landed a \u003c/span\u003e\u003ca href\u003d\"http://f27dd1d7e9322388546c613cfed39bafda153859/\" style\u003d\"color:rgb(17,85,204);text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epatch impacting IndexedDB\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. The performance sheriff Oystein Eftevaag filed a \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/454622\" style\u003d\"color:rgb(17,85,204);text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ebug for an IndexedDB regression\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e and the autobisect bot submitted a bisect job on his behalf. It returned with high confidence that Joshua's patch was to blame. While the regression was unexpected, Joshua investigated, determined it was his patch, and then posted a \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/05d0eec7715de17e1a9b7b9b16a5a5f37d36fb73\" style\u003d\"color:rgb(17,85,204);text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efix that resolved the performance regression\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. While we still have plenty of work to do improving reliability and decreasing latency, successes like these show that our improvements are making progress. Thank you to Oystein for the find and Joshua for the fix!\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333330154419px;white-space:normal\"\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal;line-height:1.43181818181818;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2015-01-20\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2015-01-20\u003c/span\u003e\u003c/h3\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:13px;white-space:pre-wrap\"\u003eThis week Balazs Engedy \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/41c91fbbdcfde75c9058d06ceae816f12699fc2f\"\u003emoved opening the LoginDatabase off of the UI thread\u003c/a\u003e and out of the critical path for opening Chrome. This \u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dstartup.warm.blank_page%2Fmessageloop_start_time\u0026amp;checked\u003dmessageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref\u0026amp;rev\u003d312613\"\u003eshaved hundreds of milliseconds off startup times\u003c/a\u003e for Windows and Linux, decreasing the amount of time until the browser windows becomes responsive. Thanks for your help Balazs!\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333330154419px;white-space:normal\"\u003e\u003cspan style\u003d\"font-size:21px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;vertical-align:baseline;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003ch2 style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014\" /\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\"\u003e2014\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal;line-height:1.43181818181818;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-10-28\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-10-28\u003c/span\u003e\u003c/h3\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:21px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;vertical-align:baseline;background-color:transparent\"\u003eThis week's improvement of the week goes to Ulan Degenbaev. A few weeks ago we noticed recurring, long garbage collection activity and a seemingly related 80% spike in metrics from the field\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;vertical-align:baseline;background-color:transparent\"\u003e. The V8 team triaged this back an issue with their idle notification scheme, and Ulan \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/662543008\" style\u003d\"font-family:Trebuchet MS;text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003elanded a fix\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;vertical-align:baseline;background-color:transparent\"\u003e to make things right\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;vertical-align:baseline;background-color:transparent\"\u003e. The patch has already been merged to M39 and will go out with the next push. Thanks Ulan!\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-09-17\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-09-17\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003eLast week Mike Klein turned on the \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/c3d2efb33238a3ee19cc8e21f4d91ef8c55f23c4\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003enew SkRecord-based backend for SkPicture\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e, which resulted in \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-motoe%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2\u0026amp;tests\u003drasterize_and_record_micro.key_silk_cases%2Frecord_time\u0026amp;checked\u003drecord_time%2Crecord_time%2Crecord_time%2Crecord_time%2Crecord_time\u0026amp;start_rev\u003d293371\u0026amp;end_rev\u003d294785\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003e25-30% faster recording\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e on Android devices. Recording is one phase of the painting process, so faster recording will result in smaller paint times and faster framerates. This new backend is the result of several months of Mike's work. Thanks Mike!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-08-20\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-08-20\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003eLast week Oystein Eftevaag \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/169043004/\" style\u003d\"font-family:Arial;text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003elanded a patch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e to start the commit upon receiving the last blocking stylesheet. This res\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eulted in a \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e25% improvement\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e from \u003c/font\u003e\u003cfont face\u003d\"Arial\"\u003ethe time the user initiates a request to the time they see the first paint. \u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003eUnlike most metrics we quote here, this didn't come from from our devices in the lab, but from real users in the wild.\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap;background-color:transparent\"\u003e Great work Oystein!\u003c/span\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-08-06\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-08-06\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003eLast week, Danno Clifford landed a JavaScript \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/v8/source/detail?r\u003d22645\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003earray allocation optimization\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e targeted at the Kraken benchmark suite. It improved Chromium's score on the \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus4%2Cchromium-rel-win7-dual\u0026amp;tests\u003dkraken%2Faudio-dft\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003eaudio-dft subtest by 30-70%\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e and the \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus4%2Cchromium-rel-win7-dual\u0026amp;tests\u003dkraken%2FTotal\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;background-color:transparent\"\u003ebenchmark total score by 5-15%\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);vertical-align:baseline;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"vertical-align:baseline\"\u003e Danno was so pleased with his work that he immediately left on a well-deserved vacation. Thanks Danno!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-07-13\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-07-13\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week, Fadi Meawad \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/401083002/\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efixed a bug in Chrome's power monitor\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e on Windows that resulted in an improvement of 7% of the entire system's battery life while running Chrome. This particular bug gathered\u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d153139\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e over 7,000 stars on the issue tracker\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e - the most of any bug by \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dstars%3A5000\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eseveral thousand\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. While these savings are impressive, our power work is nowhere near complete. Stay tuned for more improvements!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-06-18\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-06-18 \u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJakob Kummerow landed \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/v8/source/detail?r\u003d21816\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etwo\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://code.google.com/p/v8/source/detail?r\u003d21834\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e optimizations\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e to V8 specifically targeted at optimizing the \u003c/span\u003e\u003ca href\u003d\"http://facebook.github.io/react/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eReact\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e framework. Thanks for your work!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-06-11\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-06-11 \u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week, Emil Eklund \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/315623002/\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efinished up work\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e on \u003c/span\u003e\u003ca href\u003d\"http://msdn.microsoft.com/en-us/library/windows/desktop/dd368038(v\u003dvs.85).aspx\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eDirectWrite\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e for Windows. In addition to being a widely requested feature by users and developers with \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d25541\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eover 500 stars on the bug\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, DirectWrite also has performance considerations. For example, we're seeing about a 7-10% warm page \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual\u0026amp;tests\u003dpage_cycler.intl_ko_th_vi%2Fwarm_times\u0026amp;checked\u003dpage_load_time%2Cpage_load_time_ref\u0026amp;start_rev\u003d274147\u0026amp;end_rev\u003d276826\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eload\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual\u0026amp;tests\u003dpage_cycler.intl_hi_ru%2Fwarm_times\u0026amp;checked\u003dcore\u0026amp;start_rev\u003d274147\u0026amp;end_rev\u003d276826\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e time\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual\u0026amp;tests\u003dpage_cycler.intl_ar_fa_he%2Fwarm_times\u0026amp;checked\u003dcore\u0026amp;start_rev\u003d274147\u0026amp;end_rev\u003d276826\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e improvement\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e on pages with non-Latin fonts. Thanks Emil, for your work toward a beautiful and speedy user experience.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-05-28\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-05-28\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eOver the past few weeks, Sami Kyostila landed a \u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d273530\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eseries\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d273984\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e of\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d269094\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e patches\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e for increased reliability and decreased cycle time of our performance tests. Performance improvements are fantastic, but without work like Sami's we would be flying blind with a bunch of broken tests. Thanks for your hard work Sami!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-04-30\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-04-30\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eSimon Hatch\u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d266629\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eupgraded\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e the capabilities of our bisect bots so that they can now bisect functional breakages and changes in variance. You can find instructions in the \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions#TOC-Tips\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e\"tips\" section of the documentation\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e, but it's as easy as setting \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ebisect_mode\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e to \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003ereturn_code\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e or \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003estd_dev\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e in your bisect jobs. Simon's work should help us quite a bit in our quest for reliable, stable benchmarks!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-04-16\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-04-16\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003eDale Curtis landed a\u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d264741\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003epatch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e this week that increases the buffer size for audio streams when appropriate, reducing both CPU and power usage. For certain media types (such as mp3) the system-wide power consumption improved by\u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac9\u0026amp;tests\u003dmedia.tough_media_cases%2Fenergy_consumption_mwh\u0026amp;checked\u003dvideo.html%3Fsrc_tulip2.mp3_type_audio\u0026amp;start_rev\u003d263589\u0026amp;end_rev\u003d264782\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eup to 35%\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e, with about\u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac9\u0026amp;tests\u003dmedia.tough_media_cases%2Fenergy_consumption_mwh\u0026amp;checked\u003dcore\u0026amp;start_rev\u003d263589\u0026amp;end_rev\u003d264782\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003e20% savings on average\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e. This is the first of many great power patches we expect to see now that the infrastructure is in place. Great work Dale!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-03-26\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-03-26\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week David Reveman landed a \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?revision\u003d254436\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epatch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e to remove task references from RasterWorkerPool on all platforms. I can't possibly produce a better summary than his own patch description: \"This moves the responsibility to keep tasks alive while scheduled from the RasterWorkerPool to the client where unnecessary reference counting can be avoided. The result is a \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Candroid-nexus10%2Candroid-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dcc_perftests%2Fbuild_raster_task_queue\u0026amp;rev\u003d254610\u0026amp;checked\u003d32_0\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e~5x improvement in BuildRasterTaskQueue performance\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, which under some circumstances translate to almost \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Candroid-nexus10%2Candroid-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dcc_perftests%2Fschedule_tasks_direct_raster_worker_pool\u0026amp;rev\u003d254610\u0026amp;checked\u003d32_1\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2x improvement in ScheduleTasks performance\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\" Thanks David!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-03-12\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-03-12\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLast week Hayato Ito reduced checking if a DOM tree is a descendent of another from O(N) in the height of the tree of trees to O(1). In smaller trees this produces\u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus5%2Cchromium-rel-mac8%2Cchromium-rel-win7-dual\u0026amp;tests\u003dblink_perf%2FEvents_EventsDispatchingInShadowTrees\u0026amp;rev\u003d256330\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 2-3x faster event dispatching\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, but in the deeply nested trees Hayato created he saw more than a 400x improvement! I'd also like to thank Hayato for the\u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?revision\u003d168901\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e fantastic description\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e of the patch and its effects in the CL description. Great work!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-03-05\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-03-05\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week's improvement goes to Chris Harrelson, who \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?view\u003drev\u0026amp;revision\u003d168238\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003elanded a patch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e speeding up CSS descendant selectors by an astounding factor of \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2%2Cchromium-rel-mac6%2Cchromium-rel-mac8%2Cchromium-rel-mac9%2Cchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual%2Cchromium-rel-win8-dual%2Cchromium-rel-xp-dual%2Clinux-release\u0026amp;tests\u003dblink_perf%2FCSS_ClassDescendantSelector\u0026amp;checked\u003dCSS_ClassDescendantSelector\u0026amp;start_rev\u003d254375\u0026amp;end_rev\u003d255079\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e20-30x across all platforms\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. Though it can be difficult to trust microbenchmark results, this change is expected to save 90% or 50ms of style recalc time from expand animations. One more step in the direction of silky smooth web apps!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-02-26\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-02-26\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003eThis week's improvement belongs to Kentaro Hara, whose\u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?view\u003drevision\u0026amp;revision\u003d167879\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eV8 bindings patch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e resulted in a 20-30% improvement in\u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?rev\u003d253452\u0026amp;masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dblink_perf%2FBindings_insert-before\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eseveral\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?rev\u003d253452\u0026amp;masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dblink_perf%2FBindings_append-child\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ebindings\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?rev\u003d253452\u0026amp;masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release\u0026amp;tests\u003dblink_perf%2FBindings_node-list-access\u0026amp;checked\u003dcore\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ebenchmarks\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e across all platforms. Great work!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-02-19\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-02-19\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week Oystein Eftevaag landed a \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/157963002\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epatch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e that allows faster first paints in the lack of pending stylesheet loads. This produced a \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSpeed Index\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e improvement of about 5% on Android, and a radically faster Google Search loading time -- beginning to show the page a full 2.5s sooner! Oystein's work also unlocked the possibility for several further performance enhancements, so stay tuned for more progress.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2012-02-12\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2012-02-12\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week it was impossible to choose between three truly epic improvements! So they’ll have to share the winnings. First, Daniel Sievers \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/148243011\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003edropped\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Windows cold message loop start time from \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-dual\u0026amp;tests\u003dstartup.cold.blank_page%2Fmessageloop_start_time\u0026amp;checked\u003dmessageloop_start_time%2Cref\u0026amp;start_rev\u003d247437\u0026amp;end_rev\u003d250669\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e~4s to ~1s\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, returning us to pre-Aura levels. David Reveman pwnd some compositing benchmarks in a \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/154003006\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eseries\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://codereview.chromium.org/131543014\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e of\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://codereview.chromium.org/144463012\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e patches\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, improving them \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?rev\u003d249602\u0026amp;masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win7-single\u0026amp;tests\u003dcc_perftests%2Fschedule_alternate_tasks\u0026amp;checked\u003d2_1_0\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eseveral fold\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e across platforms. Last but not least, Camille Lamy shaved \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2\u0026amp;tests\u003dpage_cycler.top_10_mobile%2Fwarm_times\u0026amp;checked\u003dpage_load_time\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ea couple hundred milliseconds\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e off some page loads in the top 10 mobile sites suite by \u003c/span\u003e\u003ca href\u003d\"https://codereview.chromium.org/88503002/\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emoving\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e unload event handling off of the critical path.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2012-02-05\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2012-02-05\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week's improvement has been over a year in the making. Toon Verwaest succeeded in reducing code duplication and complexity by removing call inline caches from the V8 codebase. The result was the deletion of over 10,000 lines of code and several \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac6%2Cchromium-rel-mac8%2Cchromium-rel-mac9%2Cchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual%2Cchromium-rel-win8-dual%2Cchromium-rel-xp-dual%2Clinux-release\u0026amp;tests\u003ddromaeo.jslibeventprototype%2Fjslib\u0026amp;rev\u003d248514\u0026amp;checked\u003djslib%2Cref\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eunexpected\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac8%2Cchromium-rel-mac9\u0026amp;tests\u003dblink_perf%2FCSS_ClassDescendantSelector\u0026amp;rev\u003d248527\u0026amp;checked\u003dCSS_ClassDescendantSelector%2Cref\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e perf\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac8%2Cchromium-rel-mac9\u0026amp;tests\u003dblink_perf%2FLayout_SimpleTextPathLineLayout\u0026amp;rev\u003d248527\u0026amp;checked\u003dLayout_SimpleTextPathLineLayout%2Cref\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e improvements\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e - not to mention the improvement to the developers' lives who would have had to maintain that code. Thank you Toon for all your hard work!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-01-22\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-01-22\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week’s improvement is in our ability to measure. We’re now receiving the first \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac9\u0026amp;tests\u003dsmoothness.top_25%2Fenergy_consumption_mwh\u0026amp;rev\u003d247255\u0026amp;checked\u003denergy_consumption_mwh%2Cref\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eenergy consumption metrics\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e on the Mac 10.9 perf bots (with Android soon to follow). This enables us to begin optimizing while avoiding regressions. Huge thanks to Jeremy Moskovich, Elliot Friedman, and the Chrome Infra team for getting our first energy benchmark up and running!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2014-01-08\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2014-01-08\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJust before the holidays, the on-duty performance sheriff Victoria Clarke noticed significant \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d330285\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estartup time performance regressions\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; in some cases, the regression was as much as 350%. Victoria traced it back to an innocuous-looking \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drevision\u0026amp;revision\u003d241930\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echange in the password manager\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. Upon revert our \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win8-dual\u0026amp;tests\u003dstartup.warm.blank_page%2Fopen_tabs_time\u0026amp;checked\u003dopen_tabs_time%2Cref\u0026amp;start_rev\u003d241294\u0026amp;end_rev\u003d243265\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estartup metrics\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e recovered completely. Thanks Victoria!\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:30pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013\" /\u003e\u003cspan style\u003d\"font-size:21px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013\u003c/span\u003e\u003c/h2\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-12-18\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-12-18\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSimon Hatch landed a \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?view\u003drevision\u0026amp;revision\u003d163110\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epatch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e that prioritizes the loading of visible images. This is a huge user win in perceived loading time, but the initial attempt also unexpectedly introduced \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-single\u0026amp;tests\u003dblink_perf%2FLayout_fixed-grid-lots-of-data\u0026amp;checked\u003dLayout_fixed-grid-lots-of-data\u0026amp;start_rev\u003d238327\u0026amp;end_rev\u003d241268\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eseveral\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac8\u0026amp;tests\u003dpage_cycler.typical_25%2Fcold_times%2Fpage_load_time\u0026amp;checked\u003dpage_load_time\u0026amp;start_rev\u003d238426\u0026amp;end_rev\u003d241090\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e large\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac8\u0026amp;tests\u003dblink_perf%2FLayout_floats_50_100\u0026amp;rev\u003d238938\u0026amp;checked\u003dLayout_floats_50_100\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e performance\u003c/span\u003e\u003c/a\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win7-gpu-intel\u0026amp;tests\u003drobohornet_pro%2FTotal\u0026amp;rev\u003d238982\u0026amp;checked\u003dTotal\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e regressions\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e which probably would have went to stable in the olden days. Pat Meenan, the performance sheriff on duty, \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d326165\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etracked them back to Simon’s patch\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. This enabled Simon to \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?revision\u003d163362\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003erevert\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e the patch and \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/blink?view\u003drevision\u0026amp;revision\u003d163563\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereland\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e it a few days later with all regressions resolved.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-12-11\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-12-11\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMore compositor improvements this week, thanks to Vlad Levin. Vlad \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?revision\u003d239074\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eintroduced the concept of TileBundles\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e into the compositor, resulting in a \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-mac8%2Cchromium-rel-win7-dual%2Clinux-release\u0026amp;tests\u003dcc_perftests%2Fupdate_tile_priorities_stationary\u0026amp;rev\u003d239020\u0026amp;checked\u003dperspective\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e3-4x performance gain\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e in updating tile priorities on desktop.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-12-04\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-12-04\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week we saw a \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dandroid-gn%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2%2Cchromium-rel-mac7-gpu-intel%2Cchromium-rel-win7-gpu-intel%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release\u0026amp;tests\u003dcc_perftests%2Flayer_tree_host_commit_time\u0026amp;rev\u003d237085\u0026amp;checked\u003dheavy_page_page_scale\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e70-90% improvement\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e in composited layer tree host commit time across all platforms with impl-side painting. This is due in part to two changes, \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?revision\u003d237136\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eone by Adrienne Walker\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e and \u003c/span\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drevision\u0026amp;revision\u003d237179\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eone by Eric Penner\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. The former ensures that on a page with many layers, Chrome only spends time updating ones that have actually changed; the latter optimizes tiling resolution when scaling. Thanks to you both!\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-11-13\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-11-13\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week’s improvement comes from outside Google: Jun Jiang from Intel landed an \u003c/span\u003e\u003ca href\u003d\"https://chromeperf.appspot.com/report?masters\u003dChromiumPerf\u0026amp;bots\u003dchromium-rel-win8-dual\u0026amp;tests\u003dblink_perf%2FCanvas_draw-dynamic-webgl-to-hw-accelerated-canvas-2d\u0026amp;rev\u003d234806\u0026amp;checked\u003dCanvas_draw-dynamic-webgl-to-hw-accelerated-canvas-2d\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eorder of magnitude speed increase\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e for drawing dynamic WebGL to hardware-accelerated Canvas 2D.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-11-07\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-11-07\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eElly Jones \u003c/span\u003e\u003ca href\u003d\"https://src.chromium.org/viewvc/chrome?revision\u003d224030\u0026amp;view\u003drevision\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003elanded a fix\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e that reduces startup time by 1.5s for most users on Windows. The win was secured by decreasing the timeout for \u003c/span\u003e\u003ca href\u003d\"http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWPAD\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e to a reasonable value.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-10-31\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-10-31\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week we wanted to recognize the folks working on Aura and the Ubercompositor, who not only reversed a number of Windows regressions but pushed them further into solid performance enhancements. Specifically they were able to improve framerate (as much as double!) on the \u003c/span\u003e\u003ca href\u003d\"http://webglsamples.googlecode.com/hg/blob/blob.html\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eblob demo\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \u003c/span\u003e\u003ca href\u003d\"http://codeflow.org/webgl/deferred-irradiance-volumes/www/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003edeferred irradiance volume demo\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, and \u003c/span\u003e\u003ca href\u003d\"http://webglsamples.googlecode.com/hg/aquarium/aquarium.html\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWebGL aquarium\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. The changes also affected real-world applications, similarly improving framerate on properties such as Google Maps.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-10-23\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-10-23\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week’s top improvement is from a perf sheriff, Prasad Vuppalapu, who diagnosed a 50% regression in loading Japanese and Chinese web pages on Windows. The \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/detail?id\u003d304868\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003erevert\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e recovered the performance. Holding on to the speed we have is equally as important as improving our speed in the first place.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.4318181818181819;margin-top:24pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2013-10-16\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2013-10-16\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis week’s top improvement is from Elliott Sprehn, who landed a massive 93.5% performance improvement to CSS/StyleSheetInsert. Great work Elliott!\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/speed-hall-of-fame"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9165147550424172692"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9165147550424172692"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9165147550424172692"}],"author":[{"name":{"$t":"Ryan Schoen"},"email":{"$t":"rschoen@chromium.org"}}],"sites$pageName":{"$t":"speed-hall-of-fame"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"UCl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2428921674240838575"},"published":{"$t":"2011-12-19T22:02:48.728Z"},"updated":{"$t":"2016-08-17T00:14:54.757Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-17T00:14:53.373Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Setup Autotest Server"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis document will go over how to set up a local Autotest server for developing purposes. \u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cb\u003e\u003cfont color\u003d\"#0000ff\"\u003e\u003cfont size\u003d\"5\"\u003eNote that there is a script which will automate this process: src/third_party/autotest/files/site_utils/setup_dev_autotest.sh \u003c/font\u003e\u003c/font\u003e\u003c/b\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou need to manually edit the generated shadow_config.ini and fill in your dev server hostname.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou need to set up SSH for the apache user (www-data) in its home directory. Follow the directions for ssh key setup, using the directory /var/www/.ssh and make sure everything is owned by www-data with user only permissions: \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/ssh-test-keys-setup\"\u003ehttps://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/ssh-test-keys-setup\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you ran the setup script please proceed to the Autotest Server Usage Guide: \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/autotest-server-usage\"\u003ehttps://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/autotest-server-usage\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou will want to re-run this script or the below steps for changes that are not easily testable in the production server. Generally this will not be needed for test development. This is if you are changing RPCs, The Scheduler, Any of the frontend GUI or common library changes. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eReference: \u003ca href\u003d\"https://github.com/autotest/autotest/wiki/AutotestServerInstall\" rel\u003d\"nofollow\"\u003ehttps://github.com/autotest/autotest/wiki/AutotestServerInstall\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cfont color\u003d\"#0000ff\"\u003e\u003cfont size\u003d\"5\"\u003eNote that the following may be out of date. \u003c/font\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch1\u003e\u003ca name\u003d\"TOC-Debian-Ubuntu\" /\u003eDebian/Ubuntu\u003c/h1\u003e\u003cdiv\u003eThese instructions will only work with a Debian based installation. Most likely you can use the package names to set up Autotest for Fedora/Redhat.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Base-deb-packages-to-install\" /\u003eBase deb packages to install\u003c/h2\u003e\u003cdiv\u003eAfter installing all of the packages below you will end up with a server running MySQL, Apache, and have the supporting libraries need to bootstrap the Autotest installation. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e**Be sure to remember the password you set up for the root user in Mysql (If any)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e\u003cdiv\u003e sudo apt-get install mysql-server mysql-common libapache2-mod-wsgi python-mysqldb gnuplot apache2-mpm-prefork unzip python-imaging libpng12-dev libfreetype6-dev sqlite3 python-pysqlite2 git-core pbzip2 openjdk-6-jre openjdk-6-jdk python-crypto python-dev subversion build-essential python-setuptools\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003ci\u003e*Note you will be prompted to enter a 'root' user password for MySQL this is reserved for administering the MySQL instance itself. You should not use this for the next section but do not forget it either.\u003c/i\u003e\u003c/b\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Setup-MySQL-DBs\" /\u003eSetup MySQL DBs\u003c/h2\u003e\u003cdiv\u003eAutotest use MySQL for all of its result storing and queuing jobs for the scheduler to interface with. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSetup the Autotest MYSQL user:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003emysql -u root -p\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003ecreate database chromeos_autotest_db;\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003egrant all privileges on chromeos_autotest_db.* TO 'chromeosqa-admin'@'localhost' identified by '\u003cb\u003esome_password\u003c/b\u003e'; \u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003eFLUSH PRIVILEGES;\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003ci\u003e*some_password can be whatever you want. Make note of it as you will need it later on.\u003c/i\u003e\u003c/b\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Setup-Autotest-Directory-on-the-server\" /\u003eSetup Autotest Directory on the server\u003c/h2\u003e\u003cdiv\u003e\u003cfont color\u003d\"#ff0000\"\u003eNOTE: Do not try to make the autotest server run directly from your home directory and DO follow the \"/usr/local/autotest\" bind mount or checkout. Changing all the paths in the source and making it work at the same time seems downright impossible.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e*Preferred way, if you have a Chromium OS checkout you should already have the Autotest soure.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003eCHECKOUT\u003d/your/chromiumos/checkout\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo mkdir /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo mount --bind $CHECKOUT/src/third_party/autotest/files /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you don't have a Chromium OS checkout and just want the Autotest bits:\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003emkdir /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003egit clone https://chromium.googlesource.com/chromiumos/third_party/autotest.git /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eEdit the \u003ci\u003eglobal_config.ini, \u003c/i\u003eor better yet, create a shadow configuration (place it in\u003ci\u003e shadow_config.ini)\u003c/i\u003e to update the following areas:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e[AUTOTEST_WEB]\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ehost, set it to \u003cb\u003elocalhost\u003c/b\u003e\u003c/li\u003e\u003cli\u003euser, \u003cb\u003echromeosqa-admin\u003c/b\u003e, as set above\u003c/li\u003e\u003cli\u003epassword, set it to the password you set, in this doc that would be \u003cb\u003e\u003ci\u003esome_password\u003c/i\u003e\u003c/b\u003e\u003c/li\u003e\u003cli\u003ereadonly_host, set it to \u003cb\u003elocalhost\u003c/b\u003e\u003c/li\u003e\u003cli\u003ereadonly_user, set it to \u003cb\u003echromeosqa-admin\u003c/b\u003e\u003c/li\u003e\u003cli\u003ereadonly_password, set this to the password you set, in this doc that would be \u003cb\u003esome_password\u003c/b\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e[SERVER]\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ehostname, set it to localhost\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e[SCHEDULER]\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003edrones, set it to localhost\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Build-external-packages-for-use-in-Autotest\" /\u003eBuild external packages for use in Autotest\u003c/h4\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e# Run this as the user you want to run the Autotest server as. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e/usr/local/autotest/utils/build_externals.py\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv\u003e/usr/local/autotest/utils/compile_gwt_clients.py -a\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Setup-Initial-db\" /\u003eSetup Initial db\u003c/h4\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e/usr/local/autotest/database/migrate.py sync\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ccode\u003e/usr/local/autotest/frontend/manage.py syncdb\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# You may have to run this twice. \u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv\u003e/usr/local/autotest/frontend/manage.py syncdb\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Setup-Apache\" /\u003eSetup Apache\u003c/h2\u003e\u003cdiv\u003eIf you ran the above package install command you should already have a running apache server. All we need to do is point that configuration at the Autotest configuration. \u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003esudo ln -s /usr/local/autotest/apache/apache-conf /etc/apache2/sites-available/autotest-server.conf\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# disable currently active default\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ccode\u003esudo a2dissite 000-default\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# enable autotest server\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo a2ensite autotest-server\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# Enable rewrite module\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo a2enmod rewrite\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# Enable version for IfVersion code (may not be needed anymore)\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo a2enmod version\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# Disable mod-python\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo a2dismod python\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003e# Enable mod-wsgi\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003esudo a2enmod wsgi\u003c/code\u003e\u003c/div\u003e\u003c/code\u003e\u003cdiv style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e\u003ccode\u003e# Enable mod_headers\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e\u003ccode\u003esudo a2enmod headers\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# Setup permissions so that Apache web user can read the proper files. \u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003echmod -R o+r /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003efind /usr/local/autotest/ -type d | xargs chmod o+x\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003echmod o+x /usr/local/autotest/tko/*.cgi\u003c/code\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# restart server\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003esudo /etc/init.d/apache2 restart\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you try http://localhost, and Autotest afe page fails to load, you might want to check the apache's port configuration file (\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px\"\u003e/etc/apache2/ports.conf\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e) to make sure the file has port 80 listed:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"color:rgb(0,0,0);font-size:13.600000381469727px\"\u003e\u003ccode\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eNameVirtualHost *:80\u003c/font\u003e\u003cbr /\u003e\u003c/code\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;color:rgb(0,96,0);line-height:1\"\u003eListen 80\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-size:13.600000381469727px;font-family:Arial,Verdana,sans-serif\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-size:13.600000381469727px;font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px\"\u003eOtherwise, apache will not be listening on port 80.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.600000381469727px\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px\"\u003eIf you get 503 errors and see the following message in /var/log/apache2/error.log:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e(2)No such file or directory: mod_wsgi: Couldn't bind unix domain socket '/etc/apache2/run/wsgi.30365.0.1.sock'.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003eJust create the \u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e/etc/apache2/run directory.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Viewing-test-logs-from-jobs-ran-via-the-scheduler\" /\u003eViewing test logs from jobs ran via the scheduler\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003eTo view logs of a currently running job from the AFE click on the \"Debug logs\" link. From there you have a few different choices, you will most likely want to look at all the logs which are all in autoserv.DEBUG. Although this file does not automatically update when viewed in your browser if you refresh your view you will see the progress of the job.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAll logs from jobs run via the scheduler are stored under: /usr/local/autotest/results. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you get 403 Forbidden when viewing the results, or if the AFE starts giving Error 500 and strugging to import code, then you either need to re-run\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);line-height:1;font-size:10pt\"\u003e# Setup permissions so that Apache web user can read the proper files. \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003echmod -R o+r /usr/local/autotest\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003efind /usr/local/autotest/ -type d | xargs chmod o+x\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode\u003echmod o+x /usr/local/autotest/tko/*.cgi\u003c/code\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eOr (recommended) edit /etc/apache2/envvars so that it reads\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:10pt;line-height:1\"\u003eexport APACHE_RUN_USER\u003d\u0026lt;user\u0026gt;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;line-height:1;font-size:10pt\"\u003eexport APACHE_RUN_GROUP\u003d\u0026lt;group\u0026gt;\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003ewhere \u0026lt;user\u0026gt; is what is returned by running |id -un| and \u0026lt;group\u0026gt; is the result of running |id -gn|\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Import-Tests\" /\u003eImport Tests\u003c/h2\u003e\u003cdiv\u003eImport tests\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e/usr/local/autotest/utils/test_importer.py\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e***This is the end of what is done for you by setup_dev_autotest.sh.***\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Using-the-Autotest-Server\" /\u003eUsing the Autotest Server\u003c/h2\u003e\u003cdiv\u003eNow that everything is setup, please proceed to the Autotest Server Usage Guide \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/autotest-server-usage\"\u003ehttps://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/autotest-server-usage\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2663446590929411560"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/setup-autotest-server"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2428921674240838575"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2428921674240838575"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2428921674240838575"}],"author":[{"name":{"$t":"Scott Zawalski"},"email":{"$t":"scottz@chromium.org"}}],"sites$pageName":{"$t":"setup-autotest-server"},"sites$revision":{"$t":"39"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/436595379234295619"},"published":{"$t":"2014-03-25T22:12:34.480Z"},"updated":{"$t":"2016-08-17T00:05:30.804Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-17T00:04:28.792Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autotest Server Usage Guide"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eNote these steps are to be ran after you have setup Autotest: \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/setup-autotest-server\"\u003ehttps://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/setup-autotest-server\u003c/a\u003e and have the local Autotest Web Frontend running. To verify simply navigate to \u003ca href\u003d\"http://localhost\" rel\u003d\"nofollow\"\u003ehttp://localhost\u003c/a\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Add-Hosts\" /\u003e Add Hosts\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eAdd hosts. \u003ci\u003eNote you need to ensure that you have SSH Access Setup Properly: \u003c/i\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003ci\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/ssh-test-keys-setup\"\u003ehttps://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/ssh-test-keys-setup\u003c/a\u003e\u003c/i\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e/usr/local/autotest/cli/atest host create hostname\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Start-the-Autotest-Test-Scheduler\" /\u003eStart the Autotest Test Scheduler\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eStart the scheduler.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e*You may want to run the scheduler in \u003cb\u003e\u003ci\u003escreen\u003c/i\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003ci\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e/usr/local/autotest/scheduler/monitor_db.py /usr/local/autotest/results\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cbr /\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2663446590929411560"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autotest-developer-faq/autotest-server-usage"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/436595379234295619"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/436595379234295619"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/436595379234295619"}],"author":[{"name":{"$t":"Simran Basi"},"email":{"$t":"sbasi@chromium.org"}}],"sites$pageName":{"$t":"autotest-server-usage"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4170805112946854780"},"published":{"$t":"2015-11-13T19:31:44.037Z"},"updated":{"$t":"2016-08-16T23:59:34.697Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-11-17T20:53:31.327Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Unified Sync And Storage Overview"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:20pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-What-is-it-\" /\u003e\u003cspan style\u003d\"font-size:26.6667px;font-family:Arial;font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat is it?\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUnified Sync and Storage (USS) is a refactoring of Sync internals and services that depend on Sync. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe goal of the refactoring is to address the following existing issues:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAddress sync data consistency issues that stem from the lack of transactional consistency between Sync database and native model specific storages.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eReduce disk and memory usage by Sync data on the client.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eImprove parallelism, eliminate thread contention on shared objects (Sync Directory).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eReduce code complexity.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCurrently, all synced data is stored locally in two different locations (see the first diagram below). The first is the \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enative storage\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, which exists regardless of whether or not sync is turned on. Examples of the native model storage are Preferences JSON file, Bookmarks file, Autofill SQLite Database. The second is \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSync DB\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, a file in SQLite format, which is managed entirely by Sync. Sync DB contains snapshots of synced data and sync specific metadata. \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOn Sync startup the database is loaded into the Directory - the in-memory repository of all sync data and metadata. The directory is shared between threads and provides transactional semantics for all changes triggered by local model changes as well as changes coming with server updates. The directory provides a decoupling between the model facing part of Sync Engine and the server facing part of the engine running on the sync thread. For example, if there is a local change, it first gets updated in the directory, marked as unsynced, then sync thread separately reads it from the directory when it is time to commit changes to the server. This makes the directory the centerpiece of the current design. But at the same time this makes the directory the the main bottleneck - an exclusive access to the directory is needed for any operation with it. Also since the directory keeps all the data and sync metadata readily available in memory there the scalability of this approach is limited to tens of thousands of entries. \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003eThe idea is to decentralize Sync storage and to shift the storage responsibility, at least conceptually, from Sync engine to Sync clients e.g. native models that own the actual synced data. The core Sync components don’t have to know anything about the storage, they just pass messages containing sync data asynchronously all the way to model type specific sync service (the adapter between Sync engine and the native model). The sync service encapsulates the storage capable of storing sync metadata along with the model data. The storage implementation is responsible for ensuring consistency of the model data with sync metadata. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThat doesn’t mean every native model has to roll out its own storage. Sync team will provide a generic levelDB based storage that should satisfy requirements for most simple model types that want to leverage the simple “syncable storage” API.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMore complex data types can roll their own sync metadata storage implementation on top of their already existing storage mechanism or on top of an in-memory object model. In most cases it would be a thin adapter over the existing storage that allows Sync to bundle Sync metadata with the corresponding data entities or to store Sync metadata side-by-side (e.g. in a separate table in case of SQLite DB). The expectation is that in most cases no or very little changes would be needed to the existing native model and/or storage implementations. The customization would be handled by the model specific sync service.\u003c/span\u003e\u003c/p\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:20pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-High-Level-design-comparison\" /\u003e\u003cspan style\u003d\"font-size:26.6667px;font-family:Arial;font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHigh Level design comparison\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe two pictures below illustrate the current Sync design (the first picture) and compare that to the proposed USS changes (the second picture).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCurrent\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1447793312743/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png\" /\u003e\u003c/a\u003e\u003c/div\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProposed changes\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1447793389422/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eColor coding:\u003c/span\u003e\u003c/p\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"margin-left:0pt\"\u003e\u003ctable style\u003d\"border:none;border-collapse:collapse\"\u003e\u003ccolgroup\u003e\u003ccol width\u003d\"112\" /\u003e\u003ccol width\u003d\"568\" /\u003e\u003c/colgroup\u003e\u003ctbody\u003e\u003ctr style\u003d\"height:44px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px;background-color:rgb(239,239,239)\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eGrey\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eExisting Sync components shared between the existing implementation and USS implementation.\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px;background-color:rgb(207,226,243)\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBlue\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNew USS specific components (typically one instance per native model type).\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px;background-color:rgb(255,242,204)\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eYellow\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNative model type specific components. The most typical case of model type implementation is shown, but a more complex custom implementation is possible.\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe most significant difference between the current Sync design and USS is where the storage for sync data and metadata is.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWith the USS proposal there is no centralized in-memory Directory and Sync DB. The responsibility for providing the storage for sync metadata is shifted to the native model, the storage is encapsulated by the model specific implementation of \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModelTypeService\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe in-memory repository of sync entities is handled by a generic type agnostic sync processor component - \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSharedModelTypeProcessor\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. This component is roughly a counterpart of SharedChangeProcessor and GenericChangeProcessor in the current design.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModelTypeService\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e works in conjunction with \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSharedModelTypeProcessor. \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe pair is designed to be fairly decoupled from the rest of Sync engine and to handle native model changes even when the rest of Sync isn’t running. Here is how responsibilities are divided between them:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv dir\u003d\"ltr\" style\u003d\"margin-left:0pt\"\u003e\u003ctable style\u003d\"border:none;border-collapse:collapse;width:682px\"\u003e\u003ccolgroup\u003e\u003ccol width\u003d\"*\" /\u003e\u003ccol width\u003d\"*\" /\u003e\u003c/colgroup\u003e\u003ctbody\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModel specific ModelTypeService (the service)\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSharedModelTypeProcessor (the processor)\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAn “adapter” between the native model and the Sync engine.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eObserves the local native model changes, translates them into local Sync changes, and submits changes to the processor.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eApplies sync changes coming from the processor to the native model\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles complex conflict resolution that requires understanding sync data.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eEncapsulates the metadata storage - either directly or via the model\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAbstracts storage of sync metadata for the rest of Sync engine\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHas ability to asynchronously fetch model data and translate it to sync data on demand.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.2;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIntegrates the model type specific service with the rest of Sync engine.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eServes as a broker between the model specific service and Sync backend (the worker).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles messages from the worker and commits local changes to the worker.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e“Understands” sync metadata. Owns metadata cache and knows how to translate local and remote changes into metadata changes.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles simple conflict resolution that doesn't require understanding sync data, delegates data specific conflict resolution to the service.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHaving a separate copy of synced data is no longer necessary except for holding on to it for a short time in memory, only for in-flight entities that are being committed to the server or passed back with a server update. The transactional semantics of the directory as a way to pass the data between the model and the sync thread is replaced with asynchronous messaging with sync data payloads. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUSS reuses a significant part of the current design. There are two integration points where USS specific components plug into Sync architecture: \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eOn the UI thread sync datatype configuration and management is done through model type specific instance of \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNonBlockingDataTypeController\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(USS specific implementation of DataTypeController). It has the same responsibilities as regular DataType controllers in the current implementation:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAbstracts USS datatype management from the rest of Sync engine.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles USS datatype initialization, configuration and state transition logic during startup and shutdown.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles activation and deactivation of the datatype with Sync backend.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModelTypeWorker \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(the worker)\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eis USS specific implementation of Sync engine’s UpdateHandler and CommitContributer interfaces. The key difference between this component and currently existing counterparts is that the existing implementation propagates sync changes through the shared directory by writing updates to the directory and querying uncommitted local changes from the directory. The USS based implementation achieves the same by exchanging the data across the thread boundary with the processor. The worker provides a short term in-memory cache for pending committed entities waiting for the next scheduled sync cycle or for the network connection to the server. If the application terminates before successfully committing pending entities to the server, the processor running on the model, based on the last saved snapshot of the metadata, can still determine all the entities with unfinished commit and re-commit them through the engine pipeline.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModelTypeWorker has the following responsibilities:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProvides integration of USS datatypes on Sync backend side:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eGenerates commit messages to the server\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProcesses update messages from the server\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eGenerates nudges to the sync scheduler.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles two-way communication with the processor running on the model thread (receives commit requests, posts back commit confirmations and updates).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHandles data encryption.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTracks in-flight entities and resolves some simple conflicts.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003eThe rest of Sync backend (shown as Syncer on the diagram) remains mostly unchanged from the current design.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:26.6667px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:26.6667px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003ePatterns of model type implementation on top of USS\u003c/span\u003e\u003c/div\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);vertical-align:baseline;background-color:transparent\"\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Typical---for-data-types-with-a-simple-model.\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTypical - for data types with a simple model.\u003c/span\u003e\u003c/h3\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis pattern is close to the original USS proposal. It is usable for cases where the entire model is fully syncable meaning that:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAll model entities are syncable\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAll data fields of each entity are syncable\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAn entire model entity data can be translated to \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/sync/protocol/sync.proto\u0026amp;q\u003dEntitySpecifics\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\u0026amp;l\u003d66\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003esync_pb::EntitySpecifics\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e and back without losing any state.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis pattern would be most suitable for brand new model types that don’t have their own storage mechanism. The consistency is ensured by the Sync provided levelDB based storage that holds both native model data and Sync metadata.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe typical implementation is based on a fairly generic base implementation of ModelTypeService that would implement all of the logic for hosting the storage, accessing and saving all model data and sync metadata, handling interaction with the Sync Engine, etc. The service surfaces a simple storage API for the native model to get, put, delete entities, and to notify about remote updates. All of the syncing is happening transparently to the model.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1447793481423/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-2.-Trivial---special-case-of-Typical-pattern-without-the-native-model\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 2. Trivial\u003c/span\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e - \u003c/span\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003especial case of Typical pattern without the native model\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModel type examples: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSessions\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eDeviceInfo\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis is a further simplification of the Typical pattern where there is no native model and everything is fully contained inside the model type specific ModelTypeService.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-3.-Custom-with-unified-storage.\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 3. Custom with unified storage.\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModel type examples: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBookmarks\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTypedURLs\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis pattern is for complex model types with existing storage mechanism that can accommodate storing additional Sync metadata. The consistency is ensured by custom, model type specific sync metadata storage implementation that piggybacks the already existing native storage mechanism.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor example, for Bookmarks model type, the metadata storage could leverage the existing bookmark’s MetaInfo container to bundle arbitrary Sync metadata along with bookmarks.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor TypedURLs model type, sync metadata could go into a separate table in the existing SQLite database. The consistency would be ensured by leveraging the already existing open transaction mechanism.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1447793540010/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-4.-Custom-with-separate-sync-storage.\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 4. Custom with separate sync storage.\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eModel type examples: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePasswords\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis pattern is\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efor complex model types with existing storage mechanism that can’t accommodate storing additional Sync metadata.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhile this pattern can’t guarantee the high level of consistency that the unified storage can provide, it should still be able to improve the situation compared to the current Sync implementation and to leverage some other benefits of the refactoring like the storage isolation, smaller memory usage, better parallelism.\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1447793587659/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn this case Sync metadata is stored on the side, in Sync provided levelDB storage which is hosted by the model type specific implementation of ModelTypeService. There should be no need to duplicate the actual data in the metadata storage except may be for in-flight data for a small number of entities. \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBecause there are two side-by-side storages, a custom model specific association would need to be performed when the storage is loaded to detect and handle any discrepancies. The association / synchronization of the two storages would be done entirely at the service level. Just like in other cases, as far as Sync core components are concerned, the Sync metadata storage mechanism should be opaque to the engine and handled completely by the model type specific ModelTypeService implementation.\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:26.6667px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:26.6667px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003eImplementation Notes\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003eUSS architecture shares a number of components with the current Directory based Sync Engine architecture and should have no problem running side-by-side with it. Existing Sync datatypes might be migrated to the new architecture one by one. The migration should be transparent to Sync Server and to other clients running older versions of Chrome.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003eThe plan is to start by implementing all USS specific Sync Engine components as well as the generic levelDB based storage.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:14.6667px;line-height:20.24px;white-space:pre-wrap\"\u003eThen migrate one trivial datatype such as DeviceInfo and one complex datatype such as Bookmarks. Based on the experience migrating these two datatypes we'll decide what datatypes to migrate next and in which order.\u003c/span\u003e\u003c/div\u003e\u003cspan\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:20pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Summary\" /\u003e\u003cspan style\u003d\"font-size:26.6667px;font-family:Arial;font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSummary\u003c/span\u003e\u003c/h1\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLet’s review each USS refactoring goal and how it is going to be addressed.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Data-Consistency\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eData Consistency\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe main reason for inconsistency is lack of transactional coordination between Sync writing sync data to its own database and the native models persisting data into their own storages. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUSS avoids this problem altogether by eliminating the Sync’s private storage and shifting the metadata storage to the unified storage. The model type specific service (ModelTypeService implementation) is responsible for keeping the sync metadata in sync with the data changes. In some cases the metadata consistency with the data is guaranteed by owning the storage implementation and in some cases that is provided by piggybacking on the native storage implementation and understanding how a particular native storage persisting works (see the implementation patterns section above).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAnother source of inconsistency is delayed startup of Sync or turning Sync off temporarily (which is possible on mobile platforms). The complete configuration of Sync may sometimes be blocked on network connectivity and gives a user plenty of time to make local changes that remain untracked by Sync.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUSS avoids this problem by allowing the change processor component (SharedModelTypeProcessor) to handle local changes and keep updating related sync metadata regardless of whether the rest of Sync engine is up and running. This is possible because the storage of sync metadata doesn’t depend on the Sync backend anymore.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Disk-and-memory-usage-optimization\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eDisk and memory usage optimization\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSync DB maintains two copies of synced data plus some sync specific metadata for each synced entity. The two data copies of data are:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eLocal entity data received from or propagated to the native model.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:14.6667px;font-family:Arial;vertical-align:baseline;background-color:transparent\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eRemote entity data received from or committed to the server.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThese copies are needed to guarantee that sync metadata is always consistent with the data that Sync operates on(which can get out of sync with the native model as explained above), to ensure that Sync can resume incomplete operations across Chrome restarts, and to enable conflict resolution when the local changes collide with server updates.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSync loads the entire database into memory at startup which includes all the metadata and two data copies per entity. As a result of recent Directory copy-on-write memory usage optimization\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Sync attempts to share the two copies if they contain identical data. However even with the optimization the extra memory usage is still on the order of several KB per entity.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWith USS implementation the plan is to stop keeping any extra copies of sync data on disk or in memory except for short term caching of in-flight entities, e.g. the entities waiting to be committed or applied to the model. The metadata maintained by Sync should allow it to recover from unexpected termination and to redo unfinished operations from scratch, including re-fetching from the model and re-committing items that need to be committed and re-requesting update from the last known progress marker.\u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Improved-parallelism-reduction-of-thread-contention.\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eImproved parallelism, reduction of thread contention.\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe main source of thread contention is exclusive access to Sync Directory shared between all threads. It is fair to say that most of the time only one thread at a time can perform sync operations. Other threads are often blocked waiting to enter the directory read or write transaction. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWith USS implementation there is no locking on the directory access. Each datatype has its own asynchronous messaging pipeline. \u003c/span\u003e\u003c/p\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:16pt;margin-bottom:4pt\"\u003e\u003ca name\u003d\"TOC-Code-Complexity\" /\u003e\u003cspan style\u003d\"font-size:18.6667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCode Complexity\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe proposed design in general has a fewer number of layers. The centerpiece between the model thread and sync thread is eliminated. The whole layering complexity around the directory access with the transactions, directory persistence, integrity checking, etc is completely eliminated. Each syncable datatype becomes mostly independent from any other datatype. The type specific complexity that is still present in the directory implementation should be moved all the way to type specific ModelTypeService implementation. The core of Sync engine should become more or less a streamlined messaging pipeline with conflict resolution logic.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAt the same time the complexity of conflict resolution might increase due to asynchronous nature of USS pipeline and lack of a well defined transaction.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7319728324630685729"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sync/unified-sync-and-storage-overview"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4170805112946854780"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4170805112946854780"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4170805112946854780"}],"author":[{"name":{"$t":"Stanislav Chiknavaryan"},"email":{"$t":"stanisc@chromium.org"}}],"sites$pageName":{"$t":"unified-sync-and-storage-overview"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2527880920447300233"},"published":{"$t":"2014-10-11T11:40:28.363Z"},"updated":{"$t":"2016-08-15T18:34:57.692Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-15T18:34:56.340Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"IPC Security Reviews"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cb\u003eSo, you want to help with IPC reviews? \u003c/b\u003eFantastic! Security bugs in IPC have nasty consequences, so we have a little background check and ramp up process:\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cb\u003eFirst, tell \u003ca href\u003d\"mailto:security@chromium.org\"\u003eus\u003c/a\u003e a bit about your security interest and experience and confirm you've done your homework. \u003c/b\u003eEntrusting you with this responsibility only makes sense if you care about Chromium security, so tell us why you want to do this. Do you have a history of helping find / fix security bugs? Have you helped with security-relevant software design or projects? Tell us a bit about your security interests and experience.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003eYou should also confirm that you've read and understand all of our doc on \u003ca href\u003d\"https://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc\" style\u003d\"color:rgb(17,85,204)\" target\u003d\"_blank\"\u003esecurity tips for IPC\u003c/a\u003e.\u003cb\u003e \u003c/b\u003eIs anything unclear? Can you suggest or make improvements? Docs have a tendency of going stale.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cb\u003eNext, we'll partner you up on some reviews.\u003c/b\u003e We'll typically have you do ~3 IPC reviews yourself with an existing reviewer doing a second pass.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cdiv\u003eIf all that looks good, you're on board!\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6743906577140407009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/ipc-security-reviews"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2527880920447300233"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2527880920447300233"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2527880920447300233"}],"author":[{"name":{"$t":"Parisa Tabriz"},"email":{"$t":"parisa@chromium.org"}}],"sites$pageName":{"$t":"ipc-security-reviews"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2353873424158359748"},"published":{"$t":"2009-11-19T17:03:42.364Z"},"updated":{"$t":"2016-08-09T10:05:15.310Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-09T10:04:45.850Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"User Accounts and Management"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Abstract\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAbstract\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Objective\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eObjective\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Design-highlights\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDesign highlights\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Syncing-mechanism\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eSyncing mechanism\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Caching-and-applying-config-info\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eCaching and applying config info\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Keeping-track-of-the-Owner-and-the-\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eKeeping track of the Owner and the whitelist\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Incognito-mode\"\u003e\u003cstrong\u003e3.4 \u003c/strong\u003eGuest mode\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Managing-write-access-to-system-set\"\u003e\u003cstrong\u003e3.5 \u003c/strong\u003eManaging write access to system settings\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h2\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eEnd users must already have, or be willing to create, an account that is used to store preferences and settings. Along with Google Accounts, we want to support other authentication systems, particularly OpenID.\u003c/li\u003e\r\n\u003cli\u003eStoring preferences and settings with the account in the cloud allows end users to maintain a consistent user experience while switching among Chromium OS devices.\u003c/li\u003e\r\n\u003cli\u003eChromium OS devices are designed to be easily shared among users, while still providing a high level of security for the owner of the device and other authorized users.\u003c/li\u003e\r\n\u003cli\u003eOwners of Chromium OS devices can choose to manage a list of users who are allowed to log in to a device, providing a higher level of security for the device.\u003c/li\u003e\r\n\u003cli\u003eChromium OS also provides a Guest mode, allowing anyone to browse with the device without preserving any data, preferences, or other information after the session ends. The owner of the device can choose to disable this mode.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Objective\" /\u003eObjective\u003c/h2\u003e\r\nFor V1, at least, we are asserting the following about logging in to Chromium OS devices:\u003cbr /\u003e\r\n\u003col\u003e\r\n\u003cli\u003eWe want the device to be as shareable as a Google Doc.\u003c/li\u003e\r\n\u003cli\u003e\r\n The first time a given user logs into the device, we require connectivity for the initial authentication.\r\n \u003c/li\u003e\r\n\u003cli\u003e\r\n We believe users want to control who can log in to their machine.\r\n \u003c/li\u003e\r\n\u003cli\u003e\r\n We consider traditional user account management to be onerous.\u003c/li\u003e\r\n\u003c/ol\u003e\r\nOur goal is to enable use cases like the following:\u003cbr /\u003e\r\n\u003cblockquote\u003e I have a Chromium OS device that I use and have configured\r\nto work on my home WiFi network, which has some Network Attached Storage (a NAS). A friend asks if she\r\ncan borrow my device to do some work. I log out and hand her the\r\ndevice. She logs in. The device should remain associated with my WiFi\r\nnetwork, though her preferences (address bar state, installed apps,\r\nprivacy settings, etc) should sync down and be applied for her\r\naccount. As a byproduct, my friend has\r\naccess to my NAS. That's okay.\u003cbr /\u003e\r\n\u003c/blockquote\u003e\r\nwithout also enabling attacks like this:\r\n\u003cblockquote\u003e I\r\nhave a Chromium OS device that I use and have configured\r\nto work on my home WiFi network, which has a NAS. Someone steals my device. The thief has a Google Account. He logs in, and not only does\r\nhe have a local account on my machine, which removes a significant\r\nobstacle to compromise, but he also has access\r\nto my NAS and everything else on my home network.\u003cbr /\u003e\r\n\u003c/blockquote\u003e\r\nAt a high level, what we're saying is that, for certain settings, the right thing to do is have a per-device \u003cb\u003esystem setting\u003c/b\u003e override a \u003cb\u003euser preference\u003c/b\u003e—but that some per-device settings could be sensitive. This insight dictates several requirements:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eFor users who log in to the system, we must come up with a sane way to overlay user preferences on system settings.\u003c/li\u003e\r\n\u003cli\u003eThere\r\nmust be some mechanism to allow users to manage who can log in to the\r\ndevice, including allowing anyone (who has a Google Account) to log in to\r\nthe device.\u003c/li\u003e\r\n\u003cli\u003eWe must not drive users toward having a single, shared account; common multi-user use cases should fit well within our design.\u003c/li\u003e\u003c/ul\u003e\r\nIt's worth noting that we also have some thoughts about supporting users without a Google Account; see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/login\"\u003eLogin document\u003c/a\u003e, and the discussion of \"Guest\" mode later in this document.\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Design-highlights\" /\u003eDesign highlights\u003c/h2\u003e\r\nWe've shown above that we must, at least, deal with the wrinkle where\r\nwe need to access some available, but secured, wireless network to log\r\na new user in. After that, ideally, we would like to apply all of a\r\nuser's cloud-cached preferences locally so that their computing\r\nenvironment can follow them seamlessly from device to device. In\r\naddition to the issue of wireless networks, consider also the case of\r\nkeyboard layouts:\u003cbr /\u003e\r\n\u003cblockquote\u003eAntoine is French and has set up his Chromium OS\r\ndevice with a US keyboard to have some key mappings that will handle accents\r\nnicely for him. When he goes to France and logs into his sister's\r\nChromium OS device with a French keyboard, it doesn't make sense for his\r\nmapping from home to apply. In fact, it should fail, as the machine\r\nhas a different keyboard. When I log in to Antoine's machine, though,\r\nmy default US keyboard mapping can be applied, and should be.\u003c/blockquote\u003e\r\n\r\nThe specifics of trying to apply a given user preference and having it\r\nfail vary depending on the preference in question. We define \u003cb\u003esystem\r\nsettings\u003c/b\u003e as any setting we need to be able to apply before a user has logged in.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nCurrently, we break down \u003cb\u003esystem settings\u003c/b\u003e and \u003cb\u003euser preferences\u003c/b\u003e as follows:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv\u003e\r\n\u003ctable border\u003d\"1\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth width\u003d\"50%\"\u003eSystem Settings\u003c/th\u003e\r\n\u003cth width\u003d\"50%\"\u003eUser Preferences\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd width\u003d\"50%\"\u003eLocale\u003cbr /\u003e\r\nWifi networks\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nDescribed in this doc:\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eOwner\u003cbr /\u003e\r\nWhitelist\u003cbr /\u003e\r\nGuest mode\u003cbr /\u003e\r\n\u003c/div\u003e\u003cdiv style\u003d\"margin-left:40px\"\u003eProxies\u003c/div\u003e\r\n\u003c/td\u003e\r\n\u003ctd width\u003d\"50%\"\u003e\r\n\u003cdiv\u003eBookmarks\u003cbr /\u003e\r\nNew Tab page\u003cbr /\u003e\r\nPreferences (browser settings)\u003cbr /\u003e\r\nApps\u003c/div\u003e\u003cdiv\u003eExtensions\u003cbr /\u003e\r\nThemes\u003cbr /\u003e\r\nPinned tabs\u003cbr /\u003e\r\nNotifications\u003cbr /\u003e\r\nPrinters list\u003cbr /\u003eThumbnails\u003cbr /\u003e\r\n\r\n\r\nAutofill data\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\nFor\r\nat least the \"current WiFi\" setting, we need a user to have done the\r\nconfiguration first. In other cases, we will have sensible defaults\r\nthat we will use to initially configure the owner's account.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThese features dictate several requirements:\u003cbr /\u003e\r\n\u003col\u003e\r\n\u003cli\u003eSettings\r\ndeemed system settings need to be accessible to all authenticated\r\nusers, but not to just anyone who pulls the hard drive.\u003c/li\u003e\r\n\u003cli\u003eUser preferences should be stored so that only the user in question can access them.\u003c/li\u003e\r\n\u003cli\u003eThe\r\nclient side of the sync engine needs to be able to distinguish system\r\nsettings from user preferences, so that it can store them separately.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Syncing-mechanism\" /\u003eSyncing mechanism\u003c/h3\u003e\r\nOut\r\nof scope for this document. All that matters from our point of view is\r\nthat the client side can distinguish between system settings and user\r\npreferences.\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Caching-and-applying-config-info\" /\u003eCaching and applying config info\u003c/h3\u003e\r\nThe Linux\r\nsystem services that rely on these settings and preferences access them\r\nin a variety of ways, though mostly through configuration files. We\r\nmust design a system that can use the preferences and settings we sync\r\ndown from the cloud and apply them at the appropriate time. This is\r\nto-be-designed, but must have the following characteristics:\u003cbr /\u003e\r\n\u003col\u003e\u003cli\u003eUser preferences will be synced down by a Chromium-based browser and cached in the user's data\r\npartition, which is encrypted by default. The system should be capable\r\nof applying these as the user's session is being brought up.\u003c/li\u003e\r\n\u003cli\u003eSystem settings must be usable during the boot process; otherwise, we won't be\r\nable to connect to a network for online login. We would like, however,\r\nto at least protect these settings while the device is off.\u003c/li\u003e\r\n\u003cli\u003eThe system settings should be writable only by the Owner; we can't\r\ncryptographically enforce this, but we can at least use some system\r\ndaemon to enforce it.\u003c/li\u003e\r\n\u003cli\u003eWe need to enable configuration to be\r\nfederated; multiple sources of config data (settings and prefs) need to\r\nbe sensibly overlaid on one another. The precise semantics depend on\r\nthe setting in question.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Keeping-track-of-the-Owner-and-the-\" /\u003eKeeping track of the Owner and the whitelist\u003c/h3\u003e\r\nThe\r\npoint of keeping track of who the Owner is and who's on the whitelist is to keep\r\nthe attacker from getting an account on the device. If they've already\r\nmanaged to root the box, or to exercise a kernel vuln, they can work\r\naround Ownership and whitelisting anyway (replace the session manager or the chrome binary, or something else). So, designing a\r\nmechanism that is robust against root seems ... futile (we're working\r\nhard to take root away from all userland processes regardless, in our\r\n\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/system-hardening\"\u003esystem hardening efforts\u003c/a\u003e).\u003cdiv\u003e\u003cbr /\u003e\r\nIf\r\nthe owner has opted out of whitelisting, we allow every user with a\r\nvalid Google Account to log in.\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Incognito-mode\" /\u003eGuest mode\u003c/h3\u003e\r\nWe are considering logically extending the notion of \"Incognito\"\r\nmode found in Chromium-based browsers to Chromium OS-based devices: a stateless session that requires no login and that\r\ncaches data only until the session is over. \u003ci\u003eNo\u003c/i\u003e state would sync down from the cloud, and \u003ci\u003eno\u003c/i\u003e\r\nstate from this session would persist past termination. The option to start such a session will be on by default, though the Owner can disable it when she is logged in. We create a\r\ntmpfs on which to store the Chromium browser's session data, and open up an instance\r\nof the browser in incognito mode for the user. Once that instance\r\nis exited, the session is over and we return to the login screen.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nBy default, a Chromium OS device will be \u003cb\u003eopted out of whitelisting\u003c/b\u003e and \u003cb\u003eopted-in to Guest mode\u003c/b\u003e. We will provide UI that allows a logged-in Owner to explicitly add users, and provide the Owner an option at that time to opt-in to whitelisting and Guest mode.\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Managing-write-access-to-system-set\" /\u003eManaging write access to system settings\u003c/h3\u003e\r\nOnly\r\nthe Owner should be able to change system settings. We don't want\r\nrandom users able to add to the whitelist or enable guest mode inadvertently. As a root/kernel exploit\r\nmeans the game is over anyway, it's not worth trying to design anything\r\nthat is robust against that kind of compromise; the attacker could just\r\nwork around our security measures. So, we will have a settings daemon,\r\nsettingsd, that manages write access to the system settings.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nWhen the first user logs in, we generate an RSA keypair and store the private half in his encrypted home directory, exporting the public half via settingsd. All requests to update the signed settings store (which includes the whitelist) must contain a valid signature generated with the owner's private key. When settingsd receives a request for the value of a system setting, it returns the signature over that value along with the requested data. The requesting process then verifies this signature, ensuring that only values which are correctly signed by the Owner are respected. Of course, a root-level exploit could replace the exported Owner public key. As stated above, though, the game is already over in this case.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/user-accounts-and-management"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2353873424158359748"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2353873424158359748"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2353873424158359748"}],"author":[{}],"sites$pageName":{"$t":"user-accounts-and-management"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"WSl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/998207241578066502"},"published":{"$t":"2009-11-19T19:03:43.296Z"},"updated":{"$t":"2016-08-04T08:50:55.914Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-04T08:50:54.290Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Reporting a Crash Bug"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003eIf you are planning to report a crash bug, please make sure you include enough information for debugging purpose.\u003c/p\u003e\r\n\r\n\u003cul\u003e\u003cli\u003eMake sure you have the latest Chrome version (on Windows go to Chrome Options-\u0026gt;About Google Chrome)\u003c/li\u003e\r\n\u003cli\u003eMake sure you have \u003ca href\u003d\"https://support.google.com/chrome/answer/96817\" target\u003d\"_blank\"\u003ecrash reporting enabled\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eTry to get exact reproducible steps for the crash, if possible.\u003c/li\u003e\r\n\u003cli\u003eTry to also provide more debugging info by either: .\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003eReporting the crash directly\u003c/b\u003e: If possible, and you are using Google Chrome, enable crash reporting in Google Chrome's settings: go to chrome://chrome/settings, click \"Show advanced settings...\" and in the Privacy section select select \"Automatically send usage statistics and crash reports to Google\", then see the instructions below for getting a crash ID. (Note that if this setting was not already enabled, you'll need to reproduce the crash first.)\u003c/li\u003e\r\n\u003cli\u003e\u003cb\u003eCollecting crash data\u003c/b\u003e: Otherwise, see the instructions for collecting crash data.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Getting-a-Crash-ID\" /\u003eGetting a Crash ID\u003c/h3\u003e\r\n\u003cp\u003eIf crash reporting is enabled, you should provide the crash ID in your bug report, or your client ID if the crash ID isn't available. \u003cfont size\u003d\"2\"\u003e\u003cb\u003eGo to \u003ccode\u003echrome://crashes\u003c/code\u003e and see if your crash is listed\u003c/b\u003e\u003c/font\u003e. If so, copy and paste the crash ID into your bug report.\u003c/p\u003e\u003cp\u003eOtherwise, copy and paste the line containing \"client_id\" in your \u003ccode\u003eLocal State\u003c/code\u003e file from your profile into the bug report. The location of the profile depends on your platform:\u003c/p\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Windows:Vista-and-higher:-LOCALAPPDATA-Google-Chrome-User-DataXP:-USERPROFILE-Local-Settings-Application-Data-Google-Chrome-User-Data-on-Windows-XPLinux:-.config-google-chromeMac:-Library-Application-Support-Google-Chrome\" /\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eWindows\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e:\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eVista and higher\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;font-weight:normal\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;font-weight:normal\"\u003e%LOCALAPPDATA%\\Google\\Chrome\\User Data\u003c/code\u003e\u003c/li\u003e\u003cli\u003e\u003ccode style\u003d\"font-size:10pt\"\u003e\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003eXP:\u003cspan style\u003d\"font-weight:normal\"\u003e \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e%USERPROFILE%\\Local Settings\\Application Data\\Google\\Chrome\\User Data\u003c/span\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;font-weight:normal\"\u003e on Windows XP\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eLinux:\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;font-weight:normal\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;font-weight:normal\"\u003e~/.config/google-chrome\u003c/code\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eMac:\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;font-weight:normal\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;font-weight:normal\"\u003e~/Library/Application Support/Google/Chrome\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/h4\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Collecting-Crash-Data\" /\u003eCollecting Crash Data\u003c/h3\u003e\r\n\u003cp\u003eIf crash reporting is not enabled, or no crash ID is available, you can collect raw crash data.\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Windows\" /\u003eWindows\u003c/h4\u003e\u003cul\u003e\u003cli\u003eWindows can be configured to log crash reports to %localappdata%\\crashdumps, by using \u003ci\u003eregedit\u003c/i\u003e to create the key (registry folder) \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps\". For details see \u003cspan style\u003d\"font-size:13.3333330154419px\"\u003ethis \u003c/span\u003e\u003ca href\u003d\"https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v\u003dvs.85).aspx\" style\u003d\"font-size:13.3333330154419px\" rel\u003d\"nofollow\"\u003eMicrosoft article\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333330154419px\"\u003e. You can see the recorded crash dumps by pasting \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333330154419px\"\u003e%localappdata%\\crashdumps \u003c/span\u003einto Windows Explorer or the search area in the start menu. Look for a chrome.exe.123.dmp file from the time of your crash, and if there is one, attach it to your bug.\u003c/li\u003e\u003cli\u003eYou can capture a minidump file using windbg.exe:\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eIf you do not already have \u003ccode\u003ewindbg.exe\u003c/code\u003e, download it from Microsoft \u003ca href\u003d\"http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx\" rel\u003d\"nofollow\" target\u003d\"_blank\"\u003ewebsite\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eRun WinDbg with this command - \u003ccode\u003ewindbg.exe -o \u0026lt;full path to chrome.exe\u0026gt;\u003c/code\u003e\u003c/li\u003e\r\n\u003cli\u003eKeep hitting F5 until you hit an exception (Access violation or some other error) or until Chrome window comes up\u003c/li\u003e\r\n\u003cli\u003eIf Chrome Window opens successfully, try to reproduce the crash. When crash happens you should see an exception reported in WinDbg (Access violation or some other error)\u003c/li\u003e\r\n\u003cli\u003eAfter the exception has been reported save the dump file by typing this exact command in WinDbg command: \u003ccode\u003e.dump C:\\chrome.dmp\u003c/code\u003e (do not forget '\u003ccode\u003e.\u003c/code\u003e' at the beginning)\u003c/li\u003e\r\n\u003cli\u003eOnce the dump file has been successfully saved, compress this dump file, upload it somewhere and post the link to the file along with the bug description.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Linux\" /\u003eLinux\u003c/h4\u003e\r\n\u003cp\u003e\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eIf you are using Chromium follow \u003ca href\u003d\"https://wiki.ubuntu.com/Chromium/Debugging\" rel\u003d\"nofollow\" target\u003d\"_blank\"\u003ethese\u003c/a\u003e instructions on how to get additional details about the Chromium crash on Ubuntu.\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Mac\" /\u003eMac\u003c/h4\u003e\r\n\u003cp\u003e\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eSystem crash reports are logged to \u003ccode\u003e~/Library/Logs/CrashReporter\u003c/code\u003e, so check there for a crash file from the time of your crash, and if there is one, attach it to your bug.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eAndroid\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eSystem crash reports are logged to \u003ccode\u003e/data/data/$PACKAGE/cache/Crash\\ Reports/\u003c/code\u003e, where \u003ccode\u003e$PACKAGE\u003c/code\u003e depends on which app (chrome, content test shell, etc..), as defined \u003ca href\u003d\"https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/constants/chrome.py?l\u003d11\"\u003ehere\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eSometimes the crash will also be printed to the \"logcat\" and/or as a tombstone file. More info \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/debugging-on-android#TOC-Symbolizing-Crashstacks-Tombstones\"\u003ehere\u003c/a\u003e on how to obtain and symbolize it.\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eAlternatively, use \"\u003ccode\u003eadb shell bugreport\u003c/code\u003e\" to collect system-wide information.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2480943774340680129"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/bug-reporting-guidelines/reporting-crash-bug"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/998207241578066502"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7762381182101003415/2"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/998207241578066502"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/998207241578066502"}],"author":[{"name":{"$t":"Rahul Kuchhal"},"email":{"$t":"kuchhal@chromium.org"}}],"sites$pageName":{"$t":"reporting-crash-bug"},"sites$revision":{"$t":"30"}},{"gd$etag":"\"Wil7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2459138777757276582"},"published":{"$t":"2011-05-04T22:09:22.762Z"},"updated":{"$t":"2016-08-03T20:25:57.550Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-03T20:25:56.216Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Component build / Shared Library / Multi-DLL build"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eThis documentation has moved to the source tree. See t\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/component_build.md\" style\u003d\"background-color:transparent;font-size:10pt\"\u003ehe Chromium component build\u003c/a\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/component-build"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2459138777757276582"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2459138777757276582"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2459138777757276582"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$pageName":{"$t":"component-build"},"sites$revision":{"$t":"33"}},{"gd$etag":"\"WSl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4659175197036766678"},"published":{"$t":"2013-05-15T01:27:12.193Z"},"updated":{"$t":"2016-08-02T18:04:05.535Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-08-02T18:04:03.273Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autotest Results Logs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis is a listing and brief explanation of the various results logs available through autotest. It is in no way comprehensive, and is only meant as an introduction to the topic.\u003c/font\u003e\u003c/span\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cb\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eHigh Level Overview:\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e1. Test runs and dumps its results into \u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e/usr/local/autotest/results\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e2. Server job pulls this entire directory back via\u003c/font\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e log_collector.collect_client_job_results\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. \u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:10pt;background-color:transparent\"\u003eThis does an rsync from the server results dir to the client results dir.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e3. \u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/gs-offloader\"\u003eGSoffloader\u003c/a\u003e uploads these results to google storage.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe rest of this document describes how step 1 occurs, to learn more about the server job or gsoffloader please consult relevant documents. \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eHow are these logs created?\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eSysinfo \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;line-height:14px;white-space:pre-wrap\"\u003elogs\u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003e a\u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003ere created by executing a command in a subprocess and redirecting it’s stdout to the appropriate file through base_sysinfo.py run(), examples of such commands are '\u003c/span\u003e\u003cspan style\u003d\"line-height:16.25px;white-space:pre\"\u003e\u003cfont size\u003d\"2\"\u003els -l /boot\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;line-height:1.15;white-space:pre-wrap;background-color:transparent\"\u003e' and '\u003c/span\u003e\u003cspan style\u003d\"line-height:16.25px;white-space:pre\"\u003e\u003cfont size\u003d\"2\"\u003e/opt/google/chrome/chrome --version\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:small;line-height:1.15;white-space:pre-wrap;background-color:transparent\"\u003e', or just executing something like shutil.copyfile through a hook. \u003c/span\u003e\u003cspan style\u003d\"font-size:small;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eThere are 4 types of hooks:\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eboot_loggables - default commands to log per boot, /proc/mounts, /proc/cmdline, uname\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003etest_loggables - default commands to log per test, dmesg, df\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:arial,sans-serif;font-size:small;line-height:1.15;background-color:transparent\"\u003ebefore_iteration_loggables - default commands to log before iteration\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"white-space:pre-wrap;font-family:arial,sans-serif;font-size:small;line-height:1.15;background-color:transparent\"\u003eafter_iteration_loggables - default commands to log after iteration\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cb\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eHow does job.run_test trigger one of the loggables?\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003ejob.run_test creates a _sysinfo_logger through server/test.py\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBefore invoking common_lib/test.py runtest, it sets up sysinfo logging by:\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent\"\u003einstalling autotest into a tmp sysinfo directory like /tmp/sysinfo/autoserv-asdf\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;background-color:transparent\"\u003eexecuting the sysinfo_before_test_script, which leads to a job.sysinfo.log_before_each_test\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cb\u003eHow do I collect a random directory as a result?\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003eYou should add it as a loggable hook. S\u003c/font\u003eay you would like to collect some directory every test iteration, you will first need:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eA class that understands how to do this:\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003elogdir: plain old copy from source to destination, create destination if it doesn't exist.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003ediffable_logdir: copies the diff of the contents of the dir.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003epurgeable_logdir: copies the contents and deletes source.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003ecommand: runs a command\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eA sysinfo hook: \u003cspan style\u003d\"background-color:transparent\"\u003eThe job will call self.sysinfo.log_after_each_test, which will execute the 'run' \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003earguments of all the classes in the list, for each hook.\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eiteration loggables are called on every invocation of run_job, for a given test job instance\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003eboot/test loggables are called on every instantiation of the job object, with the latter only \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003ehappening for client jobs that represent tests (i.e there are different types of jobs, like \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003esite_job, base_client_job, base_job etc but most often you only care about the client jobs). \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOnce you've picked a class and hook:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eInstantiate this class and add it to a list of classes to call every iteration/test/boo\u003c/font\u003e\u003c/div\u003e\u003c/font\u003e\u003c/li\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont size\u003d\"2\" style\u003d\"font-size:small\"\u003eImport site_sysinfo in your test: \u003c/font\u003e\u003cfont size\u003d\"2\"\u003efrom autotest_lib.client.bin.site_sysinfo\u003c/font\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont size\u003d\"2\"\u003ew\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eithin your initialize method add: \u003c/font\u003e\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:small;background-color:transparent\"\u003eself.test_loggables.add(site_sysinfo.logdir('/tmp/mytempdir_to_copy'))\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cdiv\u003eAfter your test is done, check the \u0026lt;results_folder\u0026gt;/\u0026lt;test_name\u0026gt;/sysinfo/tmp/mytempdir_to_copy directory, where the \u003cspan style\u003d\"background-color:transparent\"\u003eresults folder is the one you specified through -r when invoking run_remote_tests.\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWhat follows is an inspection of directories we pull back from the DUT:\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ctable style\u003d\"border:none;border-collapse:collapse;width:624px\"\u003e\u003ccolgroup\u003e\u003ccol width\u003d\"*\" /\u003e\u003ccol width\u003d\"*\" /\u003e\u003c/colgroup\u003e\u003ctbody\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eAutotest\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003egenerate_logs\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr style\u003d\"height:0px\"\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003cbr /\u003e |-crashinfo.172.22.193.233\u003cbr /\u003e |-debug\u003cbr /\u003e |-power_Resume\u003cbr /\u003e |---debug\u003cbr /\u003e |---profiling\u003cbr /\u003e |---results\u003cbr /\u003e |---sysinfo\u003cbr /\u003e |-----iteration.1\u003cbr /\u003e |-------var\u003cbr /\u003e |---------spool\u003cbr /\u003e |-----------crash\u003cbr /\u003e |-----var\u003cbr /\u003e |-------log_diff\u003cbr /\u003e |---------chrome\u003cbr /\u003e |-----------Crash Reports\u003cbr /\u003e |---------gct\u003cbr /\u003e |---------metrics\u003cbr /\u003e |---------power_manager\u003cbr /\u003e |---------recover_duts\u003cbr /\u003e |---------ui\u003cbr /\u003e |---------update_engine\u003cbr /\u003e |---------window_manager\u003cbr /\u003e |---------xorg\u003cbr /\u003e |-------spool\u003cbr /\u003e |---------crash\u003cbr /\u003e |-sysinfo\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/td\u003e\u003ctd style\u003d\"border:1px solid rgb(0,0,0);padding:7px\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003cbr /\u003e |-crashdumps\u003cbr /\u003e |---Crash Reports\u003cbr /\u003e |-network_profiles\u003cbr /\u003e |---var\u003cbr /\u003e |-----cache\u003cbr /\u003e |-------shill\u003cbr /\u003e |-policy_data\u003cbr /\u003e |---whitelist\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:11px;background-color:rgb(255,255,0);vertical-align:baseline;white-space:pre-wrap\"\u003e |-system_level_logs\u003c/span\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:11px;background-color:rgb(255,255,0);vertical-align:baseline;white-space:pre-wrap\"\u003e |---chrome\u003cbr /\u003e |-----Crash Reports\u003cbr /\u003e |---gct\u003cbr /\u003e |---metrics\u003cbr /\u003e |---power_manager\u003cbr /\u003e |---recover_duts\u003cbr /\u003e |---ui\u003cbr /\u003e |---update_engine\u003cbr /\u003e |---window_manager\u003cbr /\u003e |---xorg\u003c/span\u003e\u003cspan style\u003d\"font-size:11px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e |-user_level_logs\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eThe collection of these logs happens through site_sysinfo, base_sysinfo. client/bin base_sysinfo has a set of default commands to run per test/boot/iteration and sets them in base_sysinfo __init__. \u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e1.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003evar/\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e--log_diff/\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e----logs from cc files grouped by function.eg: power_manager directory contains log messages from files input.cc, powerd.cc etc. The redirection of their output occurs through LOG macros (eg chromium/src/base/logging.cc: ~307), and autotest pulls the new contents of ‘/var/log’ \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:small;line-height:14px;white-space:pre-wrap\"\u003egenerated during the test\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:small;background-color:transparent;white-space:pre-wrap;line-height:1.15\"\u003e in its log_after_* hooks using site_sysinfo.diffable_logdir (which rsyncs).\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e--spool/\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e----crash\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e[server/site_crashcollect.py]\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003eOn every crash we get a minidmp on the DUT, the server pulls this file back and attempts to symbolicate it with symbols in /build/ and the devserver. how does the server know theres a crash, where does it go looking for a crash dump file and what generates a dump file.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003eNormal minidumps are uploaded to a crash server which attempts to produce a stack trace txt file. Autotest tries to run stacktrace with the appropriate symbols on a crash server.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e2. \u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e[base_sysinfo in bin/base_sysinfo.py]\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003eboot_loggables-cmdline, installed_packages, proc_mounts, uname, meminfo, slabinfo, version, pci, cpuinfo, modules, interrupts, partitions, lspci -vn, gcc--version, ld--version, mount, hostname, uptime.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003etest_loggables-df, dmesg, installed_packages, schedstat, meminfo, slabinfo, interrupts\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eIf you have come this far, you may also be interested in reading the autotest client tests \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests\" style\u003d\"white-space:pre-wrap\" target\u003d\"_blank\"\u003ecodelab\u003c/a\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003cspan\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8590908504692658353"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4659175197036766678"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4659175197036766678"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4659175197036766678"}],"author":[{}],"sites$pageName":{"$t":"autotest-results-logs"},"sites$revision":{"$t":"20"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2013234235956646592"},"published":{"$t":"2013-04-16T00:03:14.701Z"},"updated":{"$t":"2016-08-01T17:20:13.945Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2014-01-24T03:22:19.602Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Blink, Testing, and the W3C"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"4\"\u003e\u003cspan style\u003d\"line-height:14.949999809265137px;white-space:pre-wrap\"\u003e\u003ci\u003eBlink is currently running a subset of the W3C's tests automatically, as documented in \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/importing-the-w3c-tests\"\u003eImporting the W3C tests to Blink\u003c/a\u003e .\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"4\"\u003e\u003cspan style\u003d\"line-height:14.949999809265137px;white-space:pre-wrap\"\u003e\u003ci\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"4\"\u003e\u003cspan style\u003d\"line-height:14.949999809265137px;white-space:pre-wrap\"\u003e\u003ci\u003eThis document is left here for historical purposes and to document some of the design and process tradeoffs involved.\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan\u003e\u003cp style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003ci\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/i\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003ci\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDocument owner: \u003c/span\u003e\u003cspan style\u003d\"text-decoration:underline;color:rgb(17,85,204);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"mailto:dpranke@chromium.org\" style\u003d\"text-decoration:none\"\u003edpranke@chromium.org\u003c/a\u003e\u003c/span\u003e\u003c/i\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"font-weight:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003ci\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/font\u003e\u003c/p\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003cspan\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Overview\" /\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOverview\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe W3C has defined a large number of tests used for conformance testing.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBlink has inherited from WebKit a large number of tests that are used for regression testing. Many of these tests (mostly the so-called \"pixel tests\") require manual verification of correctness and take a fair amount of work to keep these tests up-to-date. Many are also not written in a way that can be easily used by other browser vendors.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBlink does not currently (4/2013) regularly import and run the W3C's tests, but we have done some ad-hoc partial imports of test suites in the past into our existing regression test suites. Some of these previously imported W3C tests are therefore out of date and/or redundant.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Blink team \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/blink/#testing\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehas stated\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e that any new features being developed should be accompanied by conformance tests and that we should be working with the W3C on these tests. We believe that having a comprehensive, vendor-neutral set of tests for the web platform is good for the web as a whole.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThus, there are several interrelated problems:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe W3C has a lot of tests that aren't being run regularly (by us, at least).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe have redundant and/or out of date tests.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe have a lot of tests that are hard to maintain.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe have a lot of tests we could potentially share with the W3C.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe do not have a great sense of the coverage of either or both sets of tests.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNeither we nor the W3C have smoothly running development processes to make these two sets of tests converge where possible.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/i\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eI will also note that although I used the words \"conformance\" and \"regression\" above, they don't necessarily mean much difference in practice. You can, and probably should, use conformance tests for regression testing.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Ideal-state\" /\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIdeal state\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWe should work together with the W3C to resolve these problems as much as possible. The ideal end state might look something like:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAll of the W3C’s tests would be in a single location or repository, clearly organized by some scheme that identified which features each test targeted, and what the state of the test was (submitted, accepted/approved, etc.)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere would be some sort of process for minimizing or eliminating redundant tests.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe test suite coverage would be comprehensive, and portable (it would be well understood how to write tests that ran in the major browsers).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe processes for submitting new tests, getting changes made to existing tests, and downloading the latest test suites and integrating them into our builds would be well defined and practiced.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe tests could be run and evaluated automatically (i.e., tests would not require manual review to see if you passed or failed).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe number of chromium-/blink- specific layout tests would be kept to a minimum; if the test suites were comprehensive, arguably we’d have little need for custom tests except for features that weren’t standards-track. We would have a well-polished process for removing our tests when they were made redundant.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/i\u003e\u003c/font\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Current-state\" /\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eCurrent state\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eToday, as I currently understand it, none of these things are true, although some are closer than others. Item-by-item:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTests are scattered across multiple locations.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMost of them can be found somewhere on the W3C’s mercurial repository (dvcs.w3.org/hg), and are mirrored to w3c-test.org .\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSome tests are also being moved to Github. The W3C has claimed a goal of moving everything to Github by the end of 2013.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDifferent WGs follow different naming conventions, although I think things are fairly consistent for newer tests.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/i\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eI have no idea how people figure out if there are redundant tests in the W3C suites. My guess is that reviewers and spec editors make their best efforts here.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eI have no real idea how comprehensive the existing test suites are, nor how many of them run on Blink as-is (let alone pass).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAt a rough guess, there’s somewhere between 13,000 and 18,000 existing tests in various stages of approval.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eI don’t yet really know how many reftests really are portable and aren’t subject to diffs resulting from rounding errors and other things that don’t really affect correctness.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOn a related note, it’s hard to say how many of the tests are “good”, in the sense that they are maintainable, clear, focused, fast, etc.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/i\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eI think the processes for submitting new tests are roughly defined for most groups at this point, but I don’t know how broadly shared they are between WGs. We in Blink are at least not very familiar with the processes.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMany of the older tests (e.g., CSS1, CSS2.1) were written assuming someone would look at them individually to decide if they were passing.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe currently run those as pixel tests, but it would be difficult to say with confidence how many of them we were “passing” (due to the way Blink manages passing vs. expected results).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:lower-alpha;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere may be some tests that require interactive (manual) execution, as well as manual review. I don’t know if we are interested in them at all (I’m not, personally).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/i\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eI have no idea how many of our existing regression tests are redundant, nor how many of them could be reused by other vendors.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/i\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"4\"\u003e\u003cb\u003eWork items\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eSo, this leaves us with the following (unprioritized) set of potential work items:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePull all of the existing tests down and see:\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHow many of them we already have?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHow many of them are ref tests or are otherwise self-contained (i.e., we don’t need to generate -expected results separately and review them for correctness)?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat sort of coverage do we have? How much overlap with existing Blink tests do we have?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:circle;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHow well do they integrate into the existing harnesses we have?\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/i\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHelp organize the W3C repos.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWork on tools and processes for submitting new tests, getting tests approved, and pulling them down to run, etc.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWork to identify areas missing coverage.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWork to write tests for those areas.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFormalize tracking the test suites for new features we’re working on and ensuring the test suites are accepted (I think we do this today in a fairly ad-hoc and informal way). \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eWe should at least be regularly running our own tests!\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWork on the w3c’s test harness and figure out if it needs more features to be able to get better test coverage and/or work more portably.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePublish our test results regularly somehow.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePerhaps help publish the results of other implementations (Helping to build a common dashboard or something; presumably we don’t want to be publishing the results from other vendors ourselves).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/i\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis is all a fair amount of work, but there are too many unknowns to be able to really give a resource estimate (at least I wouldn’t want to).\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-size:medium;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Q2-2013-goals\" /\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eQ2 2013 goals\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:17px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eWe on Blink have a Q2 2013 goal of at least the following:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-weight:normal;font-size:medium\"\u003e\u003cbr /\u003e\u003ci style\u003d\"font-style:normal\"\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDevelop tools to import some of the larger test suites from the W3C, if not all of them. (with some \u003c/span\u003e\u003ca href\u003d\"https://lists.webkit.org/pipermail/webkit-dev/2013-March/024055.html\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehelp from Adobe\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e) \u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eImport and run the tests in an automated manner as part of our existing regression testing processes (the layout tests). This will not include any tests requiring manual verification of correctness (i.e., no tests requiring new platform-specific baselines).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;background-color:transparent;vertical-align:baseline\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eProvide at least an initial set of feedback to the W3C on what did and didn't work (including which tests are and aren't passing), including enhancement requests for their infrastructure and processes if we find our needs aren't currently met.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/i\u003e\u003cbr /\u003e\u003c/font\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThis should give us a pretty good sense of where we're at and how much work the remaining open problems may be.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-weight:normal;font-size:medium;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eNote that if we get this working smoothly, we can hopefully extend these processes to other standards bodies as need be (ECMA, Khronos, etc.)\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cdiv style\u003d\"font-weight:normal;font-size:medium;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/blink-testing-and-the-w3c"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2013234235956646592"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2013234235956646592"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2013234235956646592"}],"author":[{"name":{"$t":"Dirk Pranke"},"email":{"$t":"dpranke@chromium.org"}}],"sites$pageName":{"$t":"blink-testing-and-the-w3c"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1102637458723552764"},"published":{"$t":"2016-07-27T18:45:02.209Z"},"updated":{"$t":"2016-07-27T18:45:02.239Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-27T18:45:02.209Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"biod_diagram.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1102637458723552764"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6251872279235946153"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/packages/biod/biod_diagram.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1102637458723552764"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1102637458723552764"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1102637458723552764"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1102637458723552764"}],"author":[{"name":{"$t":"Zach Reizner"},"email":{"$t":"zachr@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8379446778706489776"},"published":{"$t":"2016-05-06T22:40:51.304Z"},"updated":{"$t":"2016-07-26T14:20:24.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-26T14:20:24.008Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"capture-bytes.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8379446778706489776"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/capture-bytes.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8379446778706489776"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8379446778706489776"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8379446778706489776"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8379446778706489776"}],"author":[{"name":{"$t":"David Benjamin"},"email":{"$t":"davidben@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4583137022301771292"},"published":{"$t":"2016-05-06T22:30:57.809Z"},"updated":{"$t":"2016-07-26T14:19:13.213Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-26T14:19:13.198Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"save-to-file.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4583137022301771292"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/save-to-file.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4583137022301771292"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4583137022301771292"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4583137022301771292"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4583137022301771292"}],"author":[{"name":{"$t":"David Benjamin"},"email":{"$t":"davidben@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"WCl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1665995033749516162"},"published":{"$t":"2013-11-11T23:58:09.680Z"},"updated":{"$t":"2016-07-20T17:28:09.341Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2014-10-17T18:59:14.193Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Checkstyle"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"color:rgb(102,102,102);font-family:Verdana,Helvetica,Arial,sans-serif;font-size:small;line-height:16.890625px\"\u003e\u003ci\u003eCheckstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking Java code to spare humans of this boring (but important) task. This makes it ideal for projects that want to enforce a coding standard. (\u003c/i\u003e\u003c/span\u003e\u003ca href\u003d\"http://checkstyle.sourceforge.net/\" style\u003d\"font-size:10pt\" rel\u003d\"nofollow\"\u003ehttp://checkstyle.sourceforge.net/\u003c/a\u003e)\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e\u003cb\u003eEclipse\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e(Package Explorer) Right click and click 'Refresh'\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eHelp-\u0026gt;Install New Software...\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eWork with -\u0026gt; Add: http://eclipse-cs.sourceforge.net/update\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eType 'Checkstyle' into the search box\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eSelect 'Checkstyle' and click-through next\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e(Menu bar) Window-\u0026gt;Preferences-\u0026gt;Checkstyle-\u0026gt;New\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eUnder 'Type' select 'Project Relative Configuration'\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eUnder 'Name' enter 'chromium-style-5.0'\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eClick browse and navigate to tools/android/checkstyle/chromium-style-5.0.xml\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eClick OK\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e(Package Explorer) Right click project -\u0026gt; Properties -\u0026gt; Checkstyle\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eUnder \"Simple - use the following check configuration for all files\" select 'chromium-style-5.0'\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e (Recommended) Under 'Exclude from checking...' Select:\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003efiles outside source directories\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003efiles not opened in editor\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:16.890625px;font-family:Verdana,Helvetica,Arial,sans-serif;font-size:small\"\u003e\u003cb\u003eEclim\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003ecd \u0026lt;path\u0026gt;/\u0026lt;to\u0026gt;/\u0026lt;eclimd\u0026gt; (e.g. ...../eclipse43/stable/)\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003efind . -name 'checkstyle*.jar' | grep eclim\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003eThe latest version (as of 10/17/2014) is 5.8. If you have an older version (e.g. checkstyle-5.6.jar, checkstyle-5.5.jar) follow the update steps.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e\u003ci\u003eUpdate checkstyle jar\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"line-height:16.890625px;font-family:verdana,sans-serif;font-size:small\"\u003eFollow Eclipse steps #2 through #5\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"line-height:16.890625px;font-family:verdana,sans-serif;font-size:small\"\u003efind . -name 'checkstyle-5.8.jar'\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"line-height:16.890625px;font-family:verdana,sans-serif;font-size:small\"\u003eCopy that jar into the same directory as the old one.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:verdana,sans-serif;font-size:10pt\"\u003evim ./plugins/org.eclim.jdt_2.3.2/META-INF/MANIFEST.MF (jdt version number may be different)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:verdana,sans-serif;font-size:10pt\"\u003eUnder 'Bundle-ClassPath' edit the old checkstyle*.jar version number to the new one. \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:verdana,sans-serif;font-size:10pt\"\u003eRestart eclimd\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003e\u003ci\u003eConfigure Eclim\u003c/i\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003eOpen vim and enter :EclimSettings\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003eFind the line org.eclim.java.checkstyle.config\u003d\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003eAppend \u003cfont color\u003d\"#674ea7\"\u003e/your/project/path\u003c/font\u003e/src/tools/android/checkstyle/chromium-style-5.0.xml\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003eOpen a Java file and enter :Checkstyle to verify it works\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003e(Optional) Add the following to your vimrc:\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\" face\u003d\"verdana, sans-serif\"\u003e\" Run Checkstyle on open/write\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\" face\u003d\"verdana, sans-serif\"\u003eautocmd BufWinEnter *.java :Checkstyle\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\" face\u003d\"verdana, sans-serif\"\u003eautocmd BufWritePost *.java :Checkstyle\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont face\u003d\"verdana, sans-serif\"\u003eEmacs\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou can use the built-in flymake to run the checkstyle in the background as you edit your file. Add this to your ~/.emacs file and change the path to the jar and conf\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont color\u003d\"#274e13\" face\u003d\"courier new, monospace\"\u003e;; Check style of Java files.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(\u003cfont color\u003d\"#b45f06\"\u003erequire\u003c/font\u003e \u003cfont color\u003d\"#38761d\"\u003e'flymake\u003c/font\u003e)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(add-hook 'find-file-hook 'flymake-find-file-hook)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(\u003cfont color\u003d\"#b45f06\"\u003edefun\u003c/font\u003e \u003cfont color\u003d\"#0b5394\"\u003eflymake-java-init\u003c/font\u003e ()\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (\u003cfont color\u003d\"#b45f06\"\u003elet*\u003c/font\u003e ((temp-file (flymake-init-create-temp-buffer-copy\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e 'flymake-create-temp-inplace))\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (local-file (file-relative-name\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e temp-file\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (file-name-directory buffer-file-name))))\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (list \u003cfont color\u003d\"#990000\"\u003e\"java\"\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (list \u003cfont color\u003d\"#990000\"\u003e\"-cp\"\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (expand-file-name \u003cfont color\u003d\"#990000\"\u003e\"~/.emacs.d/checkstyle-5.9-SNAPSHOT-all.jar\"\u003c/font\u003e)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#990000\"\u003e\"com.puppycrawl.tools.checkstyle.Main\"\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e \u003cfont color\u003d\"#990000\"\u003e\"-c\"\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (expand-file-name \u003cfont color\u003d\"#990000\"\u003e\"~/.emacs.d/chromium-style-5.0.xml\"\u003c/font\u003e)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e local-file))))\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(setq flymake-allowed-file-name-masks\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (cons '(\u003cfont color\u003d\"#990000\"\u003e\".+\\\\.java$\"\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e flymake-java-init\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e flymake-simple-cleanup\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e flymake-get-real-file-name)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e flymake-allowed-file-name-masks))\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(setq flymake-err-line-patterns\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e (cons '(\u003cfont color\u003d\"#990000\"\u003e\"\u003c/font\u003e\u003cfont color\u003d\"#38761d\"\u003e\\\\\u003c/font\u003e\u003cfont color\u003d\"#b45f06\"\u003e(\u003c/font\u003e\u003cfont color\u003d\"#990000\"\u003e.*\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#990000\"\u003e.java\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cspan style\u003d\"color:rgb(180,95,6);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e)\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#990000\"\u003e:\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cspan style\u003d\"color:rgb(180,95,6);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e(\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#990000\"\u003e[0-9]+\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cspan style\u003d\"color:rgb(180,95,6);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e)\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#990000\"\u003e:[0-9]+: \u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cspan style\u003d\"color:rgb(180,95,6);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e(\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#990000\"\u003e.+\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e\\\\\u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cfont color\u003d\"#b45f06\"\u003e)\u003c/font\u003e\u003cfont color\u003d\"#990000\"\u003e\" \u003c/font\u003e1 2 nil 3)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e flymake-err-line-patterns))\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(39,78,19);font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e;; Check *Message* buffer for errors. If you don't find any, you can remove this line.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(setq flymake-log-level 3)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFlymake will underline lines with errors and warnings. In GUI mode, Emacs will show a tooltip when you hover your mouse over the underlined lines. Setup a shortcut to go to the next error:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cfont color\u003d\"#274e13\" face\u003d\"courier new, monospace\"\u003e;; Go through flymake errors with F4. Show the tooltip with F3. (Tooltips work only in GUI mode.)\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(global-set-key [f4] 'flymake-goto-next-error)\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cspan style\u003d\"font-size:13.3333330154419px\"\u003e(global-set-key [f3] '\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;line-height:13px\"\u003eflymake-display-err-menu-for-current-line\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:13.3333330154419px\"\u003e)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou can use the built-in \u003cfont face\u003d\"courier new, monospace\"\u003eC-h .\u003c/font\u003e (Control-h period) shortcut to show the error from the current line in the minibuffer when in running Emacs in a terminal. Alternatively, you can configure Emacs to show the error in the minibuffer after a short delay of your cursor being in that line:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#274e13\" face\u003d\"courier new, monospace\"\u003e;; \u003cspan style\u003d\"font-size:13.3333330154419px;background-color:transparent\"\u003eDisplay errors in the minibuffer after a short delay.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(setq help-at-pt-display-when-idle t)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(setq help-at-pt-timer-delay 0.2)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e(help-at-pt-set-timer)\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#666666\" face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e\u003cb\u003eLimitations\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003cdiv\u003e\u003cfont face\u003d\"Verdana, Helvetica, Arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"line-height:16.890625px\"\u003e\u003cspan\u003e \u003c/span\u003e\u003cfont color\u003d\"#666666\"\u003eDoes not support double indentation levels for line-wrap which may generate spurious warnings\u003c/font\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/checkstyle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1665995033749516162"},{"rel":"http://schemas.google.com/sites/2008#template","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7762381182101003415/2"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1665995033749516162"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1665995033749516162"}],"author":[{}],"sites$pageName":{"$t":"checkstyle"},"sites$revision":{"$t":"21"}},{"gd$etag":"\"Xyl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/26204367840923486"},"published":{"$t":"2015-03-11T21:44:18.059Z"},"updated":{"$t":"2016-07-15T21:11:21.909Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-13T19:41:55.935Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Updating WebUI for Material Design"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eWe intend to migrate the WebUI in Chromium to implement the \u003ca href\u003d\"http://www.google.com/design/spec/material-design/introduction.html\"\u003ematerial design\u003c/a\u003e spec. This document explains the technical aspects of our approach and serves as a landing page for resources used by developers working on this migration. \u003cspan style\u003d\"font-size:13.3333330154419px;background-color:transparent\"\u003eQuestions can be submitted to the \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/forum/#!forum/chromium-polymer\" style\u003d\"font-size:13.3333330154419px;background-color:transparent\" target\u003d\"_blank\"\u003echromium-polymer\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333330154419px;background-color:transparent\"\u003e Google group, but general Polymer questions are better answered at \u003ca href\u003d\"https://groups.google.com/forum/#!forum/polymer-dev\" target\u003d\"_blank\"\u003epolymer-dev@googlegroups.com\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333330154419px;background-color:transparent\"\u003e\u003ca href\u003d\"https://codereview.chromium.org/1223793018/\"\u003eThis CL\u003c/a\u003e demonstrates the addition of a new WebUI page that uses Polymer components.\u003c/span\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Working-with-Polymer-elements\" /\u003eWorking with Polymer elements\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Importing-new-Polymer-elements\" /\u003eImporting new Polymer elements\u003c/h3\u003e\r\n\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eIn order to make use of Polymer elements in WebUI, they must first be added to Chromium.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003eTo add a Polymer component not already in Chromium:\u003c/div\u003e\r\n\u003col\u003e\u003cli\u003eAdd the element to \u003ccode\u003ethird_party/polymer/v1_0/bower.json\u003c/code\u003e:\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003e\"iron-icon\": \"PolymerElements/iron-icon#~1.0.0\"\u003c/code\u003e\u003c/div\u003eAlso add all of the component's dependencies (listed in its \u003ccode\u003ebower.json\u003c/code\u003e. We list all dependencies \u003cspan style\u003d\"font-size:13.3333px\"\u003eexplicitly\u003c/span\u003e to prevent accidental additions of other third-party libraries.\u003c/li\u003e\r\n\u003cli\u003eFrom \u003ccode\u003ethird_party/polymer/v1_0\u003c/code\u003e, run \u003ccode\u003ereproduce.sh\u003c/code\u003e. See the README\r\nfor more details.\r\n\u003c/li\u003e\r\n\u003cli\u003eIf the element needs to be built into Chrome (as opposed to elements only used for demos), use \u003cfont face\u003d\"courier new, monospace\"\u003etools/polymer\u003c/font\u003e to add the necessary \u003ccode\u003e.css\u003c/code\u003e, \u003ccode\u003e.extracted-js\u003c/code\u003e and \u003ccode\u003e.html\u003c/code\u003e files to \u003ccode\u003eui/webui/resources/polymer_resources.grdp\u003c/code\u003e:\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003etools/polymer/polymer_grdp_to_txt.py ui/webui/resources/polymer_resources.grdp \u0026gt; polymer.txt\u003c/code\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003evim polymer.txt # add iron-icon/iron-icon.html, etc.\u003c/code\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003etools/polymer/txt_to_polymer_grdp.py polymer.txt \u0026gt; ui/webui/resources/polymer_resources.grdp\u003c/code\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ccode\u003egit diff ui/webui/resources/polymer_resources.grdp # verify changes\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eOnce the resources are added to Chrome, they can be included from another HTML page via \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003echrome://resources:\u003c/code\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003ccode\u003e\u003cbr /\u003e\r\n\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003e\u0026lt;link rel\u003d\"import\"\r\nhref\u003d\"chrome://resources/polymer/v1_0/iron-icon/iron-icon.html\"\u0026gt;\u003c/code\u003e\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Adding-custom-elements\" /\u003eAdding custom elements\u003c/h3\u003e\r\n\r\n\u003cdiv\u003eFind the appropriate place for the new element. For example, elements within the \"settings\" namespace use \u003ccode\u003echrome/browser/resources/settings\u003c/code\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eSeparate HTML and JS into their own files instead of using inline scripts to ensure elements will work under \u003ca href\u003d\"https://developer.chrome.com/extensions/contentSecurityPolicy\"\u003eCSP\u003c/a\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003eAdd the element's resources to the appropriate \u003ccode\u003e.grd\u003c/code\u003e file. Do not include demo files.\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Sharing-Polymer-elements\" /\u003eSharing Polymer elements\u003c/h3\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePolymer elements intended to be shared across WebUI reside in \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003esrc/ui/webui/resources/cr_elements\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eNew WebUI pages implementing material design should make use of these elements when convenient.\u003c/div\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Localization\" /\u003eLocalization\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Prefer-C--side-i18n-key-templating.-When-necessary-use-I18nBehavior-to-dynamically-translate-strings-in-JS.\" /\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333330154419px;font-weight:normal\"\u003ePrefer C++-side $i18n{key} templating. When necessary, use \u003ccode\u003eI18nBehavior\u003c/code\u003e to dynamically translate strings in JS.\u003c/div\u003e\r\n\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Accessibility\" /\u003eAccessibility\u003c/h2\u003e\r\n\u003cdiv\u003ePolymer elements provide their own ARIA roles and labels, and a11y support should be improving soon in Polymer 1.0. Custom elements can also provide their own ARIA roles and labels when necessary.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eShadow DOM is already supported in some screen readers, such as OS X's VoiceOver and Chrome OS's \u003ca href\u003d\"https://www.chromium.org/developers/accessibility/chromevox\"\u003eChromeVox Next\u003c/a\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eAs with light DOM, the shadow DOM tree can be explored from chrome://accessibility.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Compilation\" /\u003eCompilation\u003c/h2\u003e\r\n\u003cdiv\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md\"\u003eUsing the Closure Compiler\u003c/a\u003e to typecheck your code is strongly recommended. This requires \u003ca href\u003d\"https://developers.google.com/closure/compiler/docs/js-for-compiler\" target\u003d\"_blank\"\u003eannotating your JavaScript with JSDoc tags\u003c/a\u003e and paying attention to types. \u003ca href\u003d\"https://github.com/google/closure-compiler/wiki/Polymer-Pass\" rel\u003d\"nofollow\"\u003eClosure's Polymer pass\u003c/a\u003e allows for annotation of Polymer-specific constructs.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Testing\" /\u003eTesting\u003c/h2\u003e\r\n\u003cdiv\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/updating-webui-for-material-design/testing-webui-with-mocha\"\u003eTesting WebUI with Mocha\u003c/a\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eWe also want to be able to perform visual testing to check for regressions in element layout and looks.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Clients\" /\u003eClients\u003c/h2\u003e\r\n\u003cdiv\u003eWebUI pages implementing material design:\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/updating-webui-for-material-design/settings-material-design\"\u003eSettings\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eExtensions\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/media-router\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eMedia Router\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eHistory\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePDF viewer\u003c/span\u003e\u003c/li\u003e\u003cli\u003eDownloads (complete)\u003cbr /\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/updating-webui-for-material-design"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/26204367840923486"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/26204367840923486"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/26204367840923486"}],"author":[{"name":{"$t":"Oren Blasberg"},"email":{"$t":"orenb@chromium.org"}}],"sites$pageName":{"$t":"updating-webui-for-material-design"},"sites$revision":{"$t":"26"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8862287037771446359"},"published":{"$t":"2012-10-22T19:40:36.670Z"},"updated":{"$t":"2016-07-15T21:10:54.200Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2013-06-17T16:48:55.528Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"(Quickly!) Building for CrOS (ARM \u0026 x64)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;line-height:21px\"\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"3\" style\u003d\"background-color:rgb(255,255,0)\"\u003eGooglers note: you might want \u003ca href\u003d\"http://go/simplechrome\" rel\u003d\"nofollow\"\u003ego/simplechrome\u003c/a\u003e instead of this page.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eAssuming you have a local chromium checkout you've been building natively, and you want to be able to hack in it and build it for a CrOS device, see instructions below.\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"line-height:21px\"\u003eFollowing \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/chromium-os/how-tos-and-troubleshooting/building-chromium-browser\" style\u003d\"line-height:21px\"\u003ehttp://dev.chromium.org/chromium-os/how-tos-and-troubleshooting/building-chromium-browser\u003c/a\u003e\u003cspan style\u003d\"line-height:21px\"\u003e, a one-time setup step is:\u003c/span\u003e\u003cbr style\u003d\"line-height:21px\" /\u003e\u003cblockquote style\u003d\"font-style:italic;line-height:21px;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"line-height:1.6;font-size:10pt\"\u003e$ cros_sdk --enter --chrome_root\u003d.../path/to/chrome/dir [ --chroot\u003d../../which_chroot ]\u003c/span\u003e\u003c/blockquote\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e(where the \u003ci\u003echrome/dir\u003c/i\u003e part is the parent of \u003ci\u003esrc/\u003c/i\u003e).\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eSubsequent cros_sdk invocations will have the chrome source directory mounted at \u003ci\u003e~/chrome_root/src\u003c/i\u003e inside the chroot.\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eMake sure you've run \u003ci\u003ebuild_packages\u003c/i\u003e and \u003ci\u003ebuild_image\u003c/i\u003e at least one successfully in the repo in question, or it's likely you'll be missing packages/binaries/includes/libs needed to build chrome! See \u003ca href\u003d\"http://dev.chromium.org/chromium-os/developer-guide\" style\u003d\"line-height:1.6;font-size:10pt\"\u003eCrOS dev guide\u003c/a\u003e for details on those commands.\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eInside the parent of the chrome src/ dir, I have two scripts: \"ninja\" and \"goma-ninja\" (attached to this page):\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eninja: wraps regular ninja assuming a 32-core machine (z620) and emitting build output depending on $GYP_GENERATOR_FLAGS so that different builds (e.g.: native, lumpy, and daisy) can coexist\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003e(\u003cb\u003egoogle-internal only) \u003c/b\u003egoma-ninja: wraps the above ninja wrapper to compile on \u003ca href\u003d\"http://go/ma\" rel\u003d\"nofollow\"\u003egoma\u003c/a\u003e with a parallelism of -j5000.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eHaving these scripts in the parent of the src/ dir means they're available both inside the chroot and outside it, so regardless of where I am, I can always say \"\u003ci\u003e../goma-ninja chrome\u003c/i\u003e\" for example and the right thing happens.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eFinally, I have a file named bashrc-tail which I source inside the chroot with: \u003c/div\u003e\u003cblockquote style\u003d\"font-style:italic;line-height:21px;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003ci\u003e.\u003cspan style\u003d\"font-size:10pt;line-height:1.6\"\u003e ~/chrome_root/cros-chroot-homedir/bashrc-tail\u003c/span\u003e\u003c/i\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv style\u003d\"line-height:21px\"\u003eat the bottom of my chroot's \u003ci\u003e~/.bashrc\u003c/i\u003e. This defines two shell functions (\"lumpy\" and \"daisy\") which set up environment variables facilitating building for different CrOS boards, as well as shell functions that help run chrome and other ninja outputs \u003cb\u003eon\u003c/b\u003e the boards, without having to explicitly copy things around, by using sshfs. After a build like \u003ci\u003e../goma-ninja chrome\u003c/i\u003e from above is done, I'll run \u003ci\u003einitcrosdevice\u003c/i\u003e which will ssh into the device (\u003cb\u003e\u003cspan style\u003d\"background-color:rgb(255,0,0)\"\u003e\u003cfont color\u003d\"#ffff00\"\u003enote\u003c/font\u003e\u003c/span\u003e: \u003c/b\u003emake sure to update the crosip() functions in your copy of bashrc-tail to point to the right IP addresses of your boards, as well as the username/hostname/path in the definition of \u003ci\u003einitcrosdevice\u003c/i\u003e!) and echo a helpful message useful for copy/paste to sshfs-mount the ninja output directory on the board. At that point I can run a unittest like:\u003c/div\u003e\u003cdiv\u003e\u003cblockquote style\u003d\"line-height:21px;font-style:italic;margin:0px 0px 0px 40px;border:none;padding:0px\"\u003eDISPLAY\u003d:0 ./Debug/video_decode_accelerator_unittest\u003c/blockquote\u003e\u003cspan style\u003d\"line-height:21px\"\u003eor run a full chrome. Beware that running chrome on a board usually requires a pile of switches (depending on w\u003c/span\u003ehat features are launched on CrOS at a given time, and the state of the drivers on any given board at any given time), which you are best off extracting from the \"real\" chrome running on the device. I usually keep these switches in a script at\u003cspan style\u003d\"line-height:21px;font-size:10pt\"\u003e \u003ci\u003eout_daisy/Debug/go\u003c/i\u003e, so that it's available via the sshfs mount above and I can just run it on the device as \u003c/span\u003e\u003ci style\u003d\"line-height:21px;font-size:10pt\"\u003e./Debug/go\u003c/i\u003e\u003cspan style\u003d\"line-height:21px;font-size:10pt\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:21px\"\u003e\u003cbr /\u003e\u003cb\u003eGood luck!\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building-for-cros-arm-x64"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8862287037771446359"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8862287037771446359"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8862287037771446359"}],"author":[{"name":{"$t":"Ami Fischman"},"email":{"$t":"fischman@chromium.org"}}],"sites$pageName":{"$t":"-quickly-building-for-cros-arm-x64"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8164899117572203051"},"published":{"$t":"2015-12-17T21:52:01.187Z"},"updated":{"$t":"2016-07-07T00:19:07.660Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-07T00:19:04.970Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Overhead"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Code-Size\" /\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"5\"\u003eCode Size\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eAs of June 23 2016, code size overhead for official Chrome is about 5% for calls and 7.5% for calls and casts. The following is the binary size of official Chrome built in various configurations:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eWithout CFI: 104398832 bytes\u003c/li\u003e\u003cli\u003eWith CFI for virtual calls only: 109502448 bytes\u003c/li\u003e\u003cli\u003eWith CFI for virtual calls and casts: 112021488 bytes\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Performance\" /\u003e\u003cfont size\u003d\"5\"\u003ePerformance\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003cp\u003e\u003cfont size\u003d\"2\"\u003eMeasured performance overhead for various benchmark suites in the CFI for virtual calls only configuration:\u003c/font\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e blink_perf.layout: min -1.71%, median 2.81%, max 12.23%\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003esmoothness.top_25_smooth: cannot measure due to noise\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Reproducing\" /\u003e\u003cfont size\u003d\"5\"\u003eReproducing\u003c/font\u003e\u003c/h2\u003eThe above figures were derived from official builds of r401651 of Chromium by following these instructions.\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eBuild r273760 of LLVM\u003c/span\u003e\u003c/li\u003e\u003cli\u003eFetch r401651 of Chromium and apply \u003ca href\u003d\"https://codereview.chromium.org/2099003002\"\u003ehttps://codereview.chromium.org/2099003002\u003c/a\u003e to it\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBuild three Chromium GN trees as shown below:\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003cb style\u003d\"font-family:courier new,monospace;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e$ gn args out_gn/ra_official\u003c/span\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e$ gn args out_gn/ra_official_cfi_callonly\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"background-color:transparent\"\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e$ gn args out_gn/ra_official_cfi\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e$ cat out_gn/ra_official/args.gn\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_official_build \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_chrome_branded \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_debug \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_use_chrome_plugins \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_base_path \u003d \"/path/to/llvm/build\"\u003cbr /\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cbr /\u003e$ cat out_gn/ra_official_cfi_callonly/args.gn \u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_official_build \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_chrome_branded \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_debug \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_use_chrome_plugins \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_base_path \u003d \"/path/to/llvm/build\"\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_cfi \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003euse_cfi_cast \u003d false\u003cbr /\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cbr /\u003e$ cat out_gn/ra_official_cfi/args.gn\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_official_build \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_chrome_branded \u003d true\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_debug \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_use_chrome_plugins \u003d false\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eclang_base_path \u003d \"/path/to/llvm/build\"\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eis_cfi \u003d true\u003cbr /\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e$ ninja -C out_gn/ra_official chrome\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb style\u003d\"font-size:13.3333px\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e$ ninja -C out_gn/ra_official_cfi_callonly chrome\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e$ ninja -C out_gn/ra_official_cfi chrome\u003cbr /\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e$ strip -o /tmp/chrome1 \u003c/b\u003e\u003c/font\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:13.3333px;background-color:transparent\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;font-weight:normal;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003eout_gn/ra_official/chrome\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal;background-color:transparent\"\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px;display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e$ stri\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003ep -o /tmp/chrome2 out_gn/ra_official_cfi_callonly/chrome\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/b\u003e\u003cb style\u003d\"font-family:courier new,monospace;font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e$ strip -o /tmp/chrome3 out_gn/ra_official_cfi/chrome\u003cbr /\u003e\u003cb style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cbr /\u003e$ ls -l /tmp/chrome[123]\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/b\u003e\u003c/li\u003e\u003cli\u003eRun the following shell script from the chromium/src directory to obtain performance numbers:\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e#!/bin/bash\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003efor i in smoothness.top_25_smooth blink_perf.layout blink_perf.svg blink_perf.css blink_perf.dom blink_perf.paint blink_perf.canvas blink_perf.events blink_perf.parser blink_perf.bindings blink_perf.mutation blink_perf.animation blink_perf.shadow_dom blink_perf.interactive blink_perf.pywebsocket blink_perf.xml_http_request blink_perf.mutation.reference blink_perf.interactive.reference speedometer dromaeo.domcoreattr dromaeo.domcorequery dromaeo.domcoremodify dromaeo.cssqueryjquery dromaeo.jslibattrjquery dromaeo.domcoretraverse dromaeo.jslibeventjquery dromaeo.jslibstylejquery dromaeo.jslibmodifyjquery dromaeo.jslibattrprototype dromaeo.jslibeventprototype dromaeo.jslibstyleprototype dromaeo.jslibtraversejquery dromaeo.jslibmodifyprototype dromaeo.jslibtraverseprototype browsermark octane ; do\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003exvfb-run -s \"-screen 0 1024x768x24\" ./tools/perf/run_benchmark --browser\u003dexact --browser-executable\u003dout_gn/ra_official/chrome --results-label\u003dlto --pageset-repeat\u003d50 $i\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003exvfb-run -s \"-screen 0 1024x768x24\" ./tools/perf/run_benchmark --browser\u003dexact --browser-executable\u003dout_gn/ra_official_cfi_callonly/chrome --results-label\u003dltocficall --pageset-repeat\u003d50 $i\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003exvfb-run -s \"-screen 0 1024x768x24\" ./tools/perf/run_benchmark --browser\u003dexact --browser-executable\u003dout_gn/ra_official_cfi/chrome --results-label\u003dltocfi --pageset-repeat\u003d50 $i\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003emv tools/perf/results.html bm-devirt6/$i.html\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003cb\u003edone\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333px\" /\u003e\u003cdiv style\u003d\"font-size:13.3333px\" /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2375072617997205178"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/control-flow-integrity/overhead"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8164899117572203051"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8164899117572203051"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8164899117572203051"}],"author":[{"name":{"$t":"Peter Collingbourne"},"email":{"$t":"pcc@chromium.org"}}],"sites$pageName":{"$t":"overhead"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8065303695885764607"},"published":{"$t":"2012-09-20T18:41:18.858Z"},"updated":{"$t":"2016-07-06T07:11:25.822Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-06T07:11:23.859Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Running virtual machines on your Chromebook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Background\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eBackground\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Board-Specific-Notes\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eBoard Specific Notes\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Building-Chromium-OS-w-KVM\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eBuilding Chromium OS w/KVM\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Enabling-VMX-Support\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eEnabling VMX Support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Checking-VMX-Support-on-Unofficial-Hardware\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eChecking VMX Support on Unofficial Hardware\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-CPU-Support\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eCPU Support\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-BIOS-Settings\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eBIOS Settings\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Using-kvm-ok-Helper\"\u003e\u003cstrong\u003e4.2.1 \u003c/strong\u003eUsing kvm-ok Helper\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eThe Chromebooks with Intel processors are fast. I've replaced my Macbook Air with a Chromebook, and run the standard Chrome OS software on VT01, and virtual machines on VT02. I have booted both Windows and different versions of Linux and the 9front version of Plan 9.\u003c/p\u003e\r\n\u003cp\u003eI currently use a custom build of Qemu. It's a bit hard to get Qemu built in the Chrome OS build system at present, so I've got a directory containing Qemu, its libraries and BIOS files, and scripts to chroot to that directory and run Qemu. Access to devices, where needed, is provided via bind-mounts. The setup sounds a bit kludgy but works well for me; nevertheless, we welcome improvements. What we'd most prefer is to get this patch series into Chrome OS, so we have qemu as part of a \"real\" build.\u003c/p\u003e\r\n\u003cp\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/#/c/15445/\"\u003ehttps://gerrit.chromium.org/gerrit/#/c/15445/\u003c/a\u003e\u003c/p\u003e\r\n\u003cp\u003eFWIW, this particular instance of qemu was built on arch Linux, lost, sadly, when my Air was stolen.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h3\u003e\u003cp\u003eThe firmware on Chrome OS devices will clear the VMX bits during boot. This means that support is disabled, but it is not locked such that runtime cannot change things. This keeps things secure during initial boot, but doesn't lock out people from enabling things themselves in the kernel. Otherwise, they'd have to resort to modifying the firmware and that's always a tricky proposition (make a mistake and you have a brick).\u003c/p\u003e\u003cp\u003eWhen the Chrome OS kernel boots up, it will look for the \u003ccode\u003edisablevmx\u003d[on|off]\u003c/code\u003e option on the kernel command line. If it is set to \u003ccode\u003eoff\u003c/code\u003e, then VMX support will be enabled. For all other situations, we disable VMX and lock the bits so they cannot be turned back on. This keeps the system secure.\u003c/p\u003e\u003cp\u003eCurrent Chrome OS systems all ship with KVM disabled. That means you need to currently build a custom kernel yourself in order to get KVM support.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Board-Specific-Notes\" /\u003eBoard Specific Notes\u003c/h3\u003e\u003cp\u003eBe aware that on earlier Chrome OS devices, the firmware contained bugs such that they locked VMX support during power on. It's known to affect:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook\"\u003eSeries 5 Chromebook\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e*\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge\"\u003eSamsung Series 5 550\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e*\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge\"\u003eSamsung Series 3 Chromebox\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFor devices marked with a *, you might be able to restore support by hacking the firmware. Please see the respective device pages for more details.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Building-Chromium-OS-w-KVM\" /\u003eBuilding Chromium OS w/KVM\u003c/h2\u003e\r\n\u003cp\u003eTo start, you're going to need an image that has the KVM modules. You should update your sources, then build an image with (at minimum) the USE\u003dkvm option, viz:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eUSE\u003dkvm ./build_image --board\u003dlumpy --noenable_rootfs_verification --boot_args 'disablevmx\u003doff lsm.module_locking\u003d0'\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eGooglers: I have USB sticks that you can use for this install. Come see me if you want one. Sorry, can't hand these out yet :-(\u003c/p\u003e\r\n\u003cp\u003eInstall this image in your favorite manner, either via update engine or usb stick. Boot the stick as usual.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Enabling-VMX-Support\" /\u003e\u003cfont size\u003d\"4\"\u003eEnabling VMX Support\u003c/font\u003e\u003c/h2\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eThe magic kernel command line option is \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt\"\u003edisablevmx\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e. So you want to add \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt\"\u003edisablevmx\u003doff\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e to the kernel command line.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003eLog in as root.\u003cbr /\u003e\r\n mount -o remount /\u003cbr /\u003e\r\n /usr/share/kernel/use_kvm.sh\r\n\u003c/p\u003e\u003cp\u003eto test:\u003cbr /\u003e\r\n modprobe kvm_intel\u003c/p\u003e\r\n\u003cp\u003eThis will almost certainly get an error. There are a few more steps to make sure virtual machines can be used. \u003cbr /\u003e\r\n /usr/share/vboot/bin/make_dev_ssd.sh --save_config /tmp/x\u003c/p\u003e\r\n\u003cp\u003eEdit this config and add the line\u003cbr /\u003e\r\n disablevmx\u003doff lsm.\u003cspan style\u003d\"font-size:12px;white-space:pre-wrap\"\u003emodule_locking\u003d0\u003c/span\u003e\u003c/p\u003e\r\n\u003cp\u003eto the command line. Then\u003cbr /\u003e\r\n /usr/share/vboot/bin/make_dev_ssd.sh --set_config /tmp/x\u003c/p\u003e\r\n\u003cp\u003eThen comes the interesting part. On the laptops, you have to hard-disconnect the battery. On samsung, you do this by putting a paperclip into the hole on the underside of the trackpad. \u003c/p\u003e\r\n\u003cp\u003eOnce that's done, you're going to need to pull down two files:\u003c/p\u003e\r\n\u003cp\u003e\u003ca href\u003d\"https://docs.google.com/open?id\u003d0By47TDljmWaSWEttVGNBbVUwMEU\" style\u003d\"font-size:10pt\"\u003ehttps://docs.google.com/open?id\u003d0By47TDljmWaSWEttVGNBbVUwMEU\u003c/a\u003e, which is the qemu and other bits.\u003c/p\u003e\r\n\u003cdiv\u003ecd to /usr/local; mkdir kvm; cd there and untar this file into it. This creates a directory called qroot. \u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eNext, you need a virtual machine image; I've set an example up at \u003ca href\u003d\"https://docs.google.com/open?id\u003d0By47TDljmWaSX2N6VlpkS21Pd3c\"\u003ehttps://docs.google.com/open?id\u003d0By47TDljmWaSX2N6VlpkS21Pd3c\u003c/a\u003e. Uncompress this in /usr/local/kvm (NOT the qroot directory; the one above it).\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eNow cd /usr/local/kvm/qroot, and\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003esh Linux\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eand it might just work. Please let rminnich@chromium.org know about bugs.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Checking-VMX-Support-on-Unofficial-Hardware\" /\u003eChecking VMX Support on Unofficial Hardware\u003c/h2\u003e\r\n\u003cp\u003eIf you are trying to run Chromium OS on your own hardware (i.e. not a Chromebook/Chromebox), you should make sure your system is properly configured first.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-CPU-Support\" /\u003eCPU Support\u003c/h3\u003e\r\n\u003cp\u003eMake sure your CPU has support for the Intel VMX extensions. Simply look at /proc/cpuinfo to see if it has the vmx flag:\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ grep '^flags\\s*:.* vmx ' /proc/cpuinfo\u003cbr /\u003e\r\nflags : ... \u003cb\u003evmx\u003c/b\u003e \u003cb\u003esmx\u003c/b\u003e ...\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eIf you don't, then sorry, but your CPU doesn't support VMX extensions.\u003c/p\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-BIOS-Settings\" /\u003eBIOS Settings\u003c/h3\u003e\r\n\u003cp\u003eMost BIOSs today have an option to enable/disable VMX support at boot, and then lock any further modifications. They often times default to disabling the VMX extensions.\u003c/p\u003e\r\n\u003cp\u003eYou can check at runtime by using the \u003ccode\u003erdmsr\u003c/code\u003e command from the iotools package:\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ sudo modprobe msr\u003cbr /\u003e\r\n$ sudo iotools rdmsr 0 0x3a\u003cbr /\u003e\r\n0x0000000000000001\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eYou only care about the lower 3 bits. An explanation of the first few bits:\u003c/p\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:70px;height:15px\"\u003e Bit\u003c/td\u003e\r\n\u003ctd style\u003d\"width:159px;height:15px\"\u003e Meaning\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:70px;height:15px\"\u003e 0\u003c/td\u003e\r\n\u003ctd style\u003d\"width:159px;height:15px\"\u003e Settings are locked\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:70px;height:15px\"\u003e 1\u003c/td\u003e\r\n\u003ctd style\u003d\"width:159px;height:15px\"\u003e VMX Extensions\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:70px;height:15px\"\u003e 2\u003c/td\u003e\r\n\u003ctd style\u003d\"width:159px;height:15px\"\u003e SMX Extensions \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cp\u003eThus, if the last digit in the output is \"1\" (or much less unlikely, \"8\"), your BIOS has disabled VMX support and locked further modification. You will need to reboot into your BIOS, find the option, and enable it. Look for the word \"virtualization\".\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Using-kvm-ok-Helper\" /\u003eUsing kvm-ok Helper\u003c/h4\u003e\r\n\u003cp\u003eThe latest versions of QEMU/KVM include a tool called \u003ccode\u003ekvm-ok\u003c/code\u003e which is designed to perform various sanity checks on the system and see if things will work. Simply install it (note: it's often included in the \"kvm\" package in your distro) and run it:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ kvm-ok\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2461203149256614225"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8065303695885764607"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8065303695885764607"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8065303695885764607"}],"author":[{}],"sites$pageName":{"$t":"running-virtual-machines-on-your-chromebook"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7650369345439487952"},"published":{"$t":"2015-06-08T02:19:41.028Z"},"updated":{"$t":"2016-07-05T09:20:50.520Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-07-05T09:20:48.887Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Web MIDI"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Status\" /\u003eStatus\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eEnabled by default at m43\u003c/li\u003e\u003cul\u003e\u003cli\u003eThe base spec is \u003ca href\u003d\"http://www.w3.org/TR/2015/WD-webmidi-20150317/\" rel\u003d\"nofollow\"\u003eWorking Draft 17 March 2015\u003c/a\u003e, but MIDIOut::clear() is missed.\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003ca href\u003d\"https://www.chromestatus.com/features/5665772797952000\"\u003eMIDIMessageEvent::receivedTime deprecation\u003c/a\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003edeprecated at m54, and will be removed at m56.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-W3C-spec\" /\u003eW3C spec\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eLatest editor's draft: \u003ca href\u003d\"http://webaudio.github.io/web-midi-api/\" rel\u003d\"nofollow\"\u003ehttp://webaudio.github.io/web-midi-api\u003c/a\u003e\u003c/li\u003e\u003cli\u003eIssue tracker: \u003ca href\u003d\"https://github.com/WebAudio/web-midi-api/issues\" rel\u003d\"nofollow\"\u003ehttps://github.com/WebAudio/web-midi-api/issues\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Implementation-notes\" /\u003eImplementation notes\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eOS native software synths are partially disabled on Windows for security reasons\u003c/li\u003e\u003cli\u003esysex permission can be allowed only for secure source like https:// or http://localhost\u003c/li\u003e\u003cul\u003e\u003cli\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/prefer-secure-origins-for-powerful-new-features\"\u003ePrefer Secure Origins For Powerful New Features\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003esysex is not available from Chrome Apps (\u003ca href\u003d\"http://crbug.com/266338\"\u003ecrbug.com/266338\u003c/a\u003e)\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Web-MIDI-content-layer---Design-overview\" /\u003eWeb MIDI content layer - Design overview\u003c/h2\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/web-midi/Web%20MIDI%20design%20overview%20%281%29.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"256\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1433780323276/developers/design-documents/web-midi/Web%20MIDI%20design%20overview%20%281%29.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Chromium-open-issues\" /\u003eChromium open issues\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/issues/list?q\u003dCr%3DBlink-WebMIDI\"\u003eCr\u003dBlink-WebMIDI @ crbug.com\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Trouble-shooting\" /\u003eTrouble shooting\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eCrashes for OOM on Windows: VirtualMIDISynth may be the root. See \u003ca href\u003d\"https://crbug.com/493663\"\u003ehttps://crbug.com/493663\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/web-midi"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7650369345439487952"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7650369345439487952"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7650369345439487952"}],"author":[{"name":{"$t":"Takashi Toyoshima"},"email":{"$t":"toyoshim@chromium.org"}}],"sites$pageName":{"$t":"web-midi"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"UCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1134087925285753599"},"published":{"$t":"2013-05-21T18:03:10.034Z"},"updated":{"$t":"2016-06-30T22:51:49.562Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-30T22:51:48.227Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Browser Components / Layered Components Cookbook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-being-the-story-of-how-a-fresh-new-component-is-born-or-how-a-veteran-feature-is-rescued-from-a-tangled-web-of-ugly-dependencies-and-reborn-as-a-shiny-component.\" /\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;font-style:italic;white-space:pre-wrap;line-height:1.15;font-weight:normal\"\u003ebeing the story of how a fresh new component is born, or how a veteran feature is rescued from a tangled web of ugly dependencies and reborn as a shiny component.\u003c/span\u003e\u003c/h1\u003e\u003c/span\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Overview\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOverview\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis document serves as a guide for the process of turning a Chromium feature into a component or a layered component. The design docs for components and layered components are assumed as background.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Motivation-and-Layering\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMotivation and Layering\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe’ve started having multiple top-level applications. For one of these (Chrome for Android), the necessary approach was to #ifdef in //chrome, but we want to avoid this for future top-level applications.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe //components layer is a place for optional features that products built out of the Chromium codebase may want to use. Most of the components currently there are features that previously lived in //chrome but were extracted so that they could be reused by other top-level applications such as //android_webview.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNew features that will get used by more than one top-level application should be written as components. For top-level applications other than Chrome for Android, features they wish to reuse should first be extracted into //components. This document is a cookbook -type guide for how to create a new component, and how to extract an existing feature from //chrome into a component. The below diagram shows the place of components in the Chromium hierarchy. Note that the diagram is over-simplified in that not all components allow dependences on //content; for example, a component that is shared by iOS will either disallow dependencies on //content entirely or be in the form of a layered component.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook/layercake.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1467147662826/developers/design-documents/cookbook/layercake.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Creating-a-new-Browser-Component\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCreating a new Browser Component\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCreating a new component is straightforward. Follow the rules in the \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/design-documents/browser-components\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003edesign document\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, and the examples already in the //components directory. TL;DR version:\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component named xyz lives in //components/xyz.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCode in xyz should be enclosed in namespace xyz.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere should be a strict //components/xyz/DEPS to enforce that the component depends only on lower layers.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLow-level modules (e.g., //base, //net, potentially //content)\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOther //components, in a strictly tree-shaped graph - no circular dependencies.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component may depend concretely on lower layers and other components. For stuff it needs its embedder to fulfill, it should define a client interface that the embedder will implement and provide.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component that is used on iOS and also wishes to depend on //content must be in the form of a \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/layered-components-design\"\u003elayered component\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component used only by the browser process contains code directly in its directory.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component used by multiple process types has a directory per process, e.g.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e//components/xyz/browser\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e//components/xyz/renderer\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e//components/xyz/common\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA component can optionally be a separate dynamic library in the components build.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCreate, own and configure the component in the embedder layer, e.g. in //chrome/browser.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Extracting-an-existing-feature-to-a-Browser-Component\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExtracting an existing feature to a Browser Component\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThese are the typical steps to extract a feature:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIdentify a feature you need to extract and reach out to the feature owners to inform them of your desire to componentize the feature.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCreate a design document for the componentization and d\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eo a file-by-file analysis of the //chrome dependencies of the production code of the feature (you can leave the componentization of unit tests for a second pass). \u003c/span\u003e\u003cspan style\u003d\"line-height:1.15;white-space:pre-wrap;background-color:transparent\"\u003eIf the feature will be used on iOS, include //content dependencies in your analysis.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFrom the file analysis, do the following: generate a set of high-level tasks involved in the componentization (e.g., inject FooService dependency directly instead of obtaining FooService from Profile); if the feature is intended for use by iOS, d\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eetermine whether the component needs to be a \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/layered-components-design\"\u003elayered component\u003c/a\u003e; and d\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eetermine whether the feature's componentization is blocked by that of other //chrome features (if so, go back to step 2 for the blocking features).\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003eMap the high-level tasks into a bugtree whose leaf nodes are individual-CL-granularity bugs. Give all bugs in the bugtree a relevant hotlist (e.g., Hotlist-Foo-Component) so that the list can be easily searched for and analyzed.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003eCreate the component (setting it up with the intended final DEPS structure) and move some leaf files (i.e., files with few or no problematic dependencies) into it. Note that in this first pass you can have the component's targets be static libraries. \u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003eBurn down the bugtree, moving files into the component incrementally as their problematic dependencies are eliminated.\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003eOnce all production code is componentized, do a second pass componentizing unittests (typically relatively straightforward once the production code has been componentized).\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003ePut all the code in the component into the component's namespace (e.g., code in //components/foo should be in the \"foo\" namespace).\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf desired, fix up .gypi files and add export declarations to build it as a component\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSee examples in other components, e.g. \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e//components/webdata/common/webdata_export.h\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and its uses.\u003c/span\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"1\"\u003e\u003cspan style\u003d\"line-height:17.25px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNote that we have tools for moving source files that updates include guards and updates references to files (#includes and #imports in other source files, references in .gyp(i) files); see \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003esrc/tools/git/{move_source_file.py, mass-rename.py}\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWe also have a tool for doing search-and-replace across the codebase using Python regular expression syntax; see \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;font-size:15px;white-space:pre-wrap\"\u003esrc/tools/git/mffr.py. \u003c/span\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eFinally, we\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;white-space:pre-wrap;background-color:transparent\"\u003e highly encourage the usage of \"git cl format\" to ease the tedious process of reformatting that often needs to occur when doing refactorings.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003cspan\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Recipes-for-Breaking-content-DependenciesIf-the-component-will-be-shared-by-iOS-and-has-content-dependencies-then-you-have-two-choices:Abstract-all-content-dependencies-through-the-embedder-and-have-the-component-not-depend-on-content-at-all.Make-the-compo\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cp style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:17px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\" size\u003d\"4\"\u003e\u003cb\u003eRecipes for Breaking //content Dependencies\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"font-size:13px;font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:17px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"trebuchet ms, sans-serif\" size\u003d\"2\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"line-height:17px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eIf the component will be shared by iOS and has //content dependencies, then you have two choices:\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cul style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal\"\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:17px;white-space:pre-wrap\"\u003eAbstract all //content dependencies through the embedder and have the component not depend on //content at all.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:17px;white-space:pre-wrap\"\u003eMake the component into a \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/layered-components-design\"\u003elayered component\u003c/a\u003e, wherein it has a \"core/\" directory containing code that is shared by iOS and cannot depend on //content, and a \"content/\" directory that drives the core code via interactions with //content.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal\"\u003e\u003cfont size\u003d\"3\"\u003eThe first alternative is appropriate when the //content dependencies are not significant (e.g., dependencies on content::BrowserThread that can be replaced by having SingleThreadedTaskRunners injected into the component). The second alternative is necessary when the feature has significant //content dependencies, e.g. it interacts heavily with content::WebContents.\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal;line-height:normal;white-space:normal\"\u003e\u003cfont size\u003d\"3\"\u003eFor strategies to abstracting //content dependencies, please see \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/layered-components-technical-approach\"\u003ehere\u003c/a\u003e. For an example of the structure of a layered component, please see \u003ca href\u003d\"http://www.chromium.org/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase\"\u003ehere\u003c/a\u003e.\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Recipes-for-Breaking-chrome-Dependencies\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRecipes for Breaking //chrome Dependencies\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ePlease feel free to add new sections, add clarifications and examples to this section, etc. If you don't have edit rights to the site, feel free to add comments at the bottom of the page with additional recipes.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Dependency-Inversion\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDependency Inversion\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eDependency inversion is the most fundamental approach to breaking dependencies. This is the pattern where you switch from object Foo depending concretely on object Bar, and instead object Foo defines an interface FooDelegate that it needs fulfilled by any embedder; this interface is then implemented by Bar, which passes a FooDelegate pointer to itself or its delegate implementation to Foo.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBy using this pattern, it is easy to push knowledge of minor dependencies out of your component, and possible to remove knowledge of some larger dependencies (but see the next section).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://chromiumcodereview.appspot.com/10837363\"\u003eIntroduction of AutofillManagerDelegate\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://codereview.chromium.org/14367029\"\u003eIntroduction of SigninManagerDelegate\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Large-Dependencies:-Do-them-First\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLarge Dependencies: Do them First\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSometimes you’ll find that the feature you want to extract has a fairly big dependency on a fairly big chunk of code. Using dependency inversion (see above) would result in a large client interface or even multiple large client interfaces.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn these cases, you’ve probably discovered that the component you want isn’t a “leaf node,” whereas its dependency may be. In these cases you probably want to componentize this dependency first. Exceptions to this might be where the dependency would be fulfilled in entirely different ways, rather than in one common way, by different embedders; if this is the case then a large client interface may still be appropriate.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eThe generic parts of //chrome/browser/webdata needed to be componentized before //chrome/browser/autofill could be componentized, and the Autofill-specific parts extracted into the Autofill component. See //components/webdata and //components/autofill/core/browser/webdata.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Pass-Fundamental-Objects\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePass Fundamental Objects\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIt’s very common in //chrome that an “everything” object such as Profile is passed in to initialize an object or a subsystem, which then turns around and retrieves just a couple of more fundamental objects from the Profile.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWe’ve seen this many times, e.g. a Profile being passed and the only things retrieved from it being the PrefService associated with the Profile, and the SequencedTaskRunner for the IO thread.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn cases like this, you should change the code to pass the most fundamental objects possible, rather than passing more complex “everything” or “bag of stuff” objects. See also \u003ca href\u003d\"http://en.wikipedia.org/wiki/Law_of_Demeter\" rel\u003d\"nofollow\"\u003eLaw of Demeter\u003c/a\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://chromiumcodereview.appspot.com/15024007\"\u003eAvoid use of BrowserProcess global by passing PrefService\u003c/a\u003e (see e.g. signin_manager.h)\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Splitting-Objects\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSplitting Objects\u003c/span\u003e\u003c/h3\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSometimes, you will encounter an object that brings in a lot of dependencies, but at the same time seems to have functionality that is core to the component. It might e.g. be an object that has some internal state machine that the component needs to use, and also initiates or participates in a bunch of UI interactions.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn cases like this, consider whether the object needs to be split into multiple objects, where one is the core business logic (which stays with the component) and another is the part that brings in all the dependencies (this could stay with the embedder).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eExamples:\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://chromiumcodereview.appspot.com/12518017\"\u003eRemoving knowledge of how to migrate specific table types from WebDatabase class\u003c/a\u003e and \u003ca href\u003d\"https://chromiumcodereview.appspot.com/12543034\"\u003eexternalizing creation\u003c/a\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/span\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Clean-up-APIs\" /\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eClean up APIs\u003c/span\u003e\u003c/h3\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eIt's worth noting that the programming interfaces that result from the types of dependency-breaking operations listed above are not always optimal, in fact they are often not as nice as what would have resulted from a feature being written as a component from the start. Once you've finished breaking dependencies, it can certainly be worth going back, taking a fresh look at the interfaces that resulted, and cleaning them up.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch2 style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cbr /\u003e\u003c/h2\u003e\u003ch2 style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Verifying\" /\u003eVerifying\u003c/h2\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo verify dependencies, use \u003ccode\u003etools/checkdeps/checkdeps.py\u003c/code\u003e – to use on a different repository, such as Blink, specify the \u003ccode\u003e--root\u003c/code\u003e option:\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003ebuildtools/checkdeps/checkdeps.py --root third_party/WebKit\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eYou can also specify a subdirectory to check:\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003ebuildtools/checkdeps/checkdeps.py --root third_party/WebKit Source/bindings\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eThere are some wrapper scripts to simplify this, like \u003ccode\u003eTools/Scripts/check-blink-deps\u003c/code\u003e.\u003c/div\u003e\u003cdiv\u003eThere are a few wrinkles to be aware of, which result in \u003ccode\u003echeckdeps\u003c/code\u003e \u003ci\u003enot\u003c/i\u003e checking particular directories, confusingly returning SUCCESS without any work. You can specify \u003ccode\u003e--verbose\u003c/code\u003e to check that it actually is doing work.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eA \u003ccode\u003eskip_child_includes\u003c/code\u003e in a \u003ccode\u003eDEPS\u003c/code\u003e file causes subdirectories to not be checked; this is used in the top-level Chromium \u003ccode\u003eDEPS\u003c/code\u003e file to not check other repos.\u003c/li\u003e\u003cli\u003eThe directory needs to look like a source directory, or imports will not be checked; concretely, it needs to include \u003ccode\u003e.svn\u003c/code\u003e or \u003ccode\u003e.git/.\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1134087925285753599"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1134087925285753599"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1134087925285753599"}],"author":[{"name":{"$t":"Jói Sigurðsson"},"email":{"$t":"joi@chromium.org"}}],"sites$pageName":{"$t":"cookbook"},"sites$revision":{"$t":"19"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/987968386620844029"},"published":{"$t":"2015-08-14T18:22:05.792Z"},"updated":{"$t":"2016-06-30T22:17:52.891Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-30T22:17:51.312Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"UI Development Practices"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Trebuchet MS;font-size:21.3333px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003eGuidelines\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePrinciples for developing for Chrome. These best practices center around ensuring features are implemented as efficiently as possible.\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Content-Area-UI-in-a-Tab-\" /\u003e\u003cspan style\u003d\"font-size:17.3333px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eContent Area (UI in a Tab)\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe UI that lives in the content area should be implemented with HTML technologies on desktop platforms. (Either web or native can be used for the content area UI on Android and iOS.) This HTML can be either WebUI or plain HTML and JS bundled with Chrome. It should work with no connection and lo-fi connections. The expectation is that the implementation does not contain polyfills, code that only executes for other browsers, or arcane Web development practices.\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Non-Content-Area-UI-in-Popups-or-in-Chrome-s-Chrome-\" /\u003e\u003cspan style\u003d\"font-size:17.3333px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNon-Content Area (UI in Popups or in Chrome’s Chrome)\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUI outside of the content area should be implemented using \u003c/span\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/ui/views/\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eViews\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e (in C++) for Windows/Linux/ChromeOS. Mac UI is done with Cocoa although work is progressing on porting Views to it as well. The expectation is that UI of this style is limited to small, transient windows with low-complexity UI. On Clank, this UI should be implemented using the Android View system.\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Manipulating-DOM-on-Arbitrary-Pages\" /\u003e\u003cspan style\u003d\"font-size:17.3333px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eManipulating DOM on Arbitrary Pages\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSome features need to inspect or modify the DOM of the current tab, which can be any arbitrary website. Blink's Web* C++ API is intentionally simple and limited to guide you to use it only for what is practical. When Blink’s C++ API is impractical, use \u003c/span\u003e\u003ca href\u003d\"https://cs.chromium.org/chromium/src/content/public/browser/render_frame_host.h?q\u003dExecuteJavaScriptInIsolatedWorld\u0026amp;sq\u003dpackage:chromium\u0026amp;dr\u003dCSs\u0026amp;rcl\u003d1467300303\u0026amp;l\u003d130\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eisolated world\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e script injection. The script injected should be as lean as possible and should not contain any code that deals with other browsers (for example Closure).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBecause script injection carries a runtime and memory cost, it is expected that it is driven by a user action that has an expectation of work. A good example is ‘translate’. If inspecting every page that the user might open is required, script injection is not recommended. For this case, consult with chrome-eng-review@ for an appropriate solution. For example, reader mode \u003ca href\u003d\"https://crbug.com/509869\"\u003econverted\u003c/a\u003e the triggering logic from script injection to native implementation.\u003c/span\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Prototyping-and-Exploring-the-Solution-Space\" /\u003e\u003cspan style\u003d\"font-size:17.3333px;font-family:Trebuchet MS;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePrototyping and Exploring the Solution Space\u003c/span\u003e\u003c/h2\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eExperimenting can be accomplished with an extension. Non-confidential features can be published on the Chrome Web Store and installed manually for early testing. Confidential extensions can be enabled only for trusted testers so they are invisible to the public. Extensions can use content scripts to do script injection and can use page actions and browser actions to provide UI outside the content area. Extensions can also use NaCL, which has full access to the Pepper API.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eComponent extensions (i.e. extensions automatically installed into Chrome) are also a prototyping option, but should only be used if there is something needed that a regular extension cannot do. Extensions should strive to only execute on explicit user action and never on startup. Persistent background pages should be avoided. Event pages should only be used for infrequent items like push messaging, hardware events, alarms etc…, but not common events like navigation. If you need to do something that imposes a constant load or requires updating state on each navigation, consult the extensions team; they might be able to provide a declarative API so the job can be done with low impact. Failing that, consult with chrome-eng-review@ if you need to deviate from these guidelines.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-development-practices"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/987968386620844029"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/987968386620844029"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/987968386620844029"}],"author":[{"name":{"$t":"Mike Wasserman"},"email":{"$t":"msw@chromium.org"}}],"sites$pageName":{"$t":"ui-development-practices"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/837940195398530819"},"published":{"$t":"2008-11-12T00:06:54.354Z"},"updated":{"$t":"2016-06-29T22:13:38.480Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-29T22:13:34.832Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Setting up Visual Studio Debugger Visualizers"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Definitions\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eDefinitions\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-References\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eReferences\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003cbr /\u003e\r\n\u003c/h2\u003e\r\n\u003cp\u003eVisual Studio (2013 and 2015) allows you to plug in additional \"visualizers\" to display data in the watch windows. This makes debugging some of our more complex data types much easier. To add macros:\u003c/p\u003e\u003cul\u003e\r\n\u003cli\u003eCopy the contents of Chrome\\src\\tools\\win\\DebugVisualizers\\ to %USERPROFILE%\\My Documents\\Visual Studio 2013\\Visualizers\\ (or for newer versions, \u003cspan style\u003d\"font-size:13.3333px\"\u003e%USERPROFILE%\\Documents\\Visual Studio 2015\\Visualizers\\)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003eStart the debugger, and be amazed at the fancy new way it displays your favorite objects. When you edit the file, you shouldn't have to restart all of Visual Studio - it will get re-loaded when you start the debugger.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Definitions\" /\u003eDefinitions\u003c/h2\u003e\r\n\r\n\u003c/div\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eDisplayString\u003c/font\u003e:\r\nan expression (string literal or expression) to be shown in the Watch,\r\nQuickWatch or Command window; if the preview section is present and you\r\nalso have a AutoExpand rule for it, the AutoExpand rule is ignored.\u003c/li\u003e\r\n\u003cli\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eExpand\u003c/font\u003e: offer the possibility to construct hierarchies.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-References\" /\u003eReferences\u003c/h2\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"http://mariusbancila.ro/blog/?p\u003d26\" rel\u003d\"nofollow\"\u003ehttp://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://code.msdn.microsoft.com/windowsdesktop/Writing-type-visualizers-2eae77a2\" rel\u003d\"nofollow\"\u003ehttps://code.msdn.microsoft.com/windowsdesktop/Writing-type-visualizers-2eae77a2\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/837940195398530819"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/837940195398530819"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/837940195398530819"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$pageName":{"$t":"how-to-set-up-visual-studio-debugger-visualizers"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"USl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6333507778373553020"},"published":{"$t":"2013-11-25T19:40:08.263Z"},"updated":{"$t":"2016-06-29T00:46:44.639Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-29T00:46:43.294Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Security UX"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eOnline security is more than just eliminating buffer overflows from software. One of our biggest security challenges is helping people make safe decisions while they surf the web.\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e Here are some of the things we're doing to make security on the web easier for everyone — both people who use browsers and web apps, and web app developers. Some of these points are discussed in more detail in \u003ca href\u003d\"https://docs.google.com/presentation/d/16ygiQS0_5b9A4NwHxpcd6sW3b_Up81_qXU-XY86JHc4/edit?usp\u003dsharing\" target\u003d\"_blank\"\u003eImproving Chrome’s Security Warnings\u003c/a\u003e by Adrienne Porter Felt.\u003c/span\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Anti-malware\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAnti-malware\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Malicious-Websites\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eMalicious Websites\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Malware-Downloads\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eMalware Downloads\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Passwords-And-Phishing\"\u003e\u003cstrong\u003e2 \u003c/strong\u003ePasswords And Phishing\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Website-Authentication\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eWebsite Authentication\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Presenting-Origins\"\u003e\u003cstrong\u003e4 \u003c/strong\u003ePresenting Origins\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Eliding-Origin-Names-And-Hostnames\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eEliding Origin Names And Hostnames\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Permissions\"\u003e\u003cstrong\u003e5 \u003c/strong\u003ePermissions\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Usability-Measurement-Tools\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eUsability Measurement Tools\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Documents\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eDocuments\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Anti-malware\" /\u003eAnti-malware\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Malicious-Websites\" /\u003e\u003cfont size\u003d\"4\"\u003eMalicious Websites\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eMalicious or compromised websites try to attack visitors. To protect people from these threats,\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e Chrome uses \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/safebrowsing\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eSafe Browsing\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e to identify attack websites. If Safe Browsing tells Chrome that a website is malicious, Chrome shows a full-screen warning. Despite the fact that our warnings are rarely wrong, people ignore the warnings nearly a fifth of the time. We are actively running experiments with the goal of decreasing how many people ignore the warnings.\u003c/span\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Malware-Downloads\" /\u003e\u003cspan style\u003d\"font-size:large\"\u003eMalware Downloads\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eShady websites also try to trick people into installing malicious programs on their computers. By default, Chrome blocks known malware downloads. Chrome also warns people about potentially dangerous files that have not been scanned; we are trying to improve this generic warning with new security measures. For example, we want to make it easier for people to view PDFs more safely without needing to show warnings about PDFs.\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Passwords-And-Phishing\" /\u003ePasswords And Phishing\u003c/h2\u003ePassword management is hard. Sometimes people choose weak passwords, re-use passwords inappropriately, or type passwords into phishing websites. The browser currently offers people minimal assistance in choosing good passwords or knowing when to enter them. We're currently using \u003ca href\u003d\"https://support.google.com/chrome/answer/99020?hl\u003den\"\u003eSafe Browsing to help warn people about phishing pages\u003c/a\u003e, but we're also working on other ways to make authentication on the web easier and safer.\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Website-Authentication\" /\u003eWebsite Authentication\u003c/h2\u003eWebsite authentication is paramount to online security. We know that current HTTPS indicators and warnings are confusing, and they are often false positives.\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e The browser’s lack of confidence about the authenticity of a given TLS connection forces it to offer people a choice that they are not likely to understand, so we're working on ways to improve website authentication and protect users from inadvertently visiting or interacting with sites they don't intend to. Here are some of the things we're currently working on:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/hsts\" style\u003d\"background-color:transparent;font-size:10pt\"\u003eHTTP Strict Transport Security (HSTS)\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e adoption and pre-loading\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eDeveloping a standard for \u003c/span\u003e\u003ca href\u003d\"https://www.imperialviolet.org/2011/05/04/pinning.html\" style\u003d\"background-color:transparent;font-size:10pt\" rel\u003d\"nofollow\"\u003eSSL certificate public key pinning\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eSSL evangelism, support, and other odds n' ends (e.g. \u003c/span\u003e\u003ca href\u003d\"https://docs.google.com/presentation/d/1G1286W5_VdsBBJo9PjQ6uN78djFupO-Bn4RUlFu3Tng/edit\" style\u003d\"background-color:transparent;font-size:10pt\"\u003e\"got TLS?\" tech talk\u003c/a\u003e, \u003ca href\u003d\"http://blog.chromium.org/2011/06/new-chromium-security-features-june.html\"\u003eblocking HTTP basic auth\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003e)\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:transparent;font-size:10pt\"\u003eMaking the warning more understandable\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eRead more about TLS support in Chromium on \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/education/tls\"\u003eour TLS education page\u003c/a\u003e.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Presenting-Origins\" /\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003ePresenting Origins\u003c/font\u003e\u003c/b\u003e\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe fundamental security boundary on the web is the \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"https://code.google.com/p/browsersec/wiki/Part2\" target\u003d\"_blank\"\u003eorigin\u003c/a\u003e\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, defined as the tuple (\u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003escheme\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003ehostname\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003eport\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e). For example, (https, www.example.com, 443). We must surface this boundary to people during browsing, in permissions/capabilities dialogs, and so on, so that they can know whom they are talking to. In particular, it is important to note that unauthenticated origins (e.g. (http, www.example.com, 80)) are entirely observable and malleable by attackers who can control the network (often, even just a little bit of control is enough).\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBecause people (including developers!) tend not to understand the concept of the origin, but do tend to understand the concept of the hostname, we'd like to simplify origin names when we can. Ideally we could reduce the origin name to just the much more understandable hostname. For example, we could elide the scheme or replace it with a meaningful icon, if doing so did not prevent people from understanding whether or not an origin is authenticated. And if the port is the default port for the given scheme, we can elide it, too.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf the feature or behavior we are trying to protect is available \u003ci\u003eonly\u003c/i\u003e on authenticated origins — which we strongly suggest — you could leave off the scheme or the icon. Otherwise, it might be better to highlight the non-authenticated nature of the origin when presenting it.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn addition, we strongly recommend that UIs clearly mark unauthenticated origins as such.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA good utility function to use for presenting URLs in security decision contexts is \u003cfont face\u003d\"courier new, monospace\"\u003eurl_formatter::FormatUrlForSecurityDisplay\u003c/font\u003e.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Eliding-Origin-Names-And-Hostnames\" /\u003eEliding Origin Names And Hostnames\u003c/h3\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/enamel/origins.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"240\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1467161188995/Home/chromium-security/enamel/origins.png\" width\u003d\"320\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe effective top-level domain (eTLD) of a hostname is the TLD as found in the \u003c/span\u003e\u003ca href\u003d\"https://publicsuffix.org/\" style\u003d\"font-size:10pt;background-color:transparent\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003ePublic Suffix List\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e (PSL)\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, which is not necessarily guaranteed to be a single label like \"com\"\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. Some eTLDs found in the PSL have more than one label, e.g. .co.jp, and others are the names of web sites that give out subdomains for user content and code from many sources, like .appspot.com and .github.io. For many purposes, these multi-label names are effectively TLDs, hence the name.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eAt a minimum, we would like to show users the eTLD + 1 label, e.g. pumpkins.co.jp, google.com, noodles.appspot.com, or example.org. Where possible, it is best to show the entire hostname, however. If the hostname is too long, and/or if it has too many labels underneath the eTLD, that may be a sign that it is a phishing host.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eAlthough domain name labels are limited to 63 octets and the entire name is limited to 255 octets (see \u003c/span\u003e\u003ca href\u003d\"https://www.ietf.org/rfc/rfc1035.txt\" style\u003d\"font-size:10pt;background-color:transparent\" rel\u003d\"nofollow\"\u003ehttps://www.ietf.org/rfc/rfc1035.txt\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, section 2.3.4), on small screens or small windows on large screens, even eTLD + 1 might be too long. In such a case, we should elide from the left. for example, www.reallyannoying.goats.example.com should display as \"...oats.example.com\" instead of \"www.reallyanno...\".\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Permissions\" /\u003ePermissions\u003c/h2\u003eThe browser grants privileges to apps, extensions, and websites after asking the person for permission. In some cases, the browser also uses status indicators to indicate when an origin is accessing a granted permission. We currently don’t have quantitative data on how well these pieces of UI work, but we have anecdotal evidence suggesting they fail to capture people's attention and/or explain the situation. Thus, they aren't being totally effective at achieving their original purpose. This is what we're doing to improve things:\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eCreating experiments and collecting data to quantify how effective Chrome's permissions systems are\u003c/li\u003e\u003cli\u003eDesigning new types of analyses to measure the threat of extensions, apps, and websites\u003c/li\u003e\u003cli\u003eDesigning new ways to communicate permission information to end users\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/enamel/goals-for-the-origin-info-bubble\"\u003eGoals For The Origin Info Bubble\u003c/a\u003e discusses a way to make permissions easier for people to manage.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Usability-Measurement-Tools\" /\u003e\u003cb style\u003d\"font-family:arial,sans-serif;font-size:large;background-color:transparent\"\u003eUsability Measurement Tools\u003c/b\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eCalculate the effective contrast ratio of text on its background: \u003c/font\u003e\u003ca href\u003d\"http://webaim.org/resources/contrastchecker/\" rel\u003d\"nofollow\"\u003ehttp://webaim.org/resources/contrastchecker/\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnother contrast checking tool: \u003ca href\u003d\"https://gh.ada.is/contrast-widget/\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003eContraster\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eFlesch-Kincaid (and other) readability calculator: \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small;text-decoration:underline;color:rgb(17,85,204);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003ca href\u003d\"http://www.readability-score.com/\" style\u003d\"font-family:arial,sans-serif;font-size:small;background-color:transparent;text-decoration:none\" rel\u003d\"nofollow\"\u003ehttp://www.readability-score.com/\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSimulate the effects of colorblindness: \u003ca href\u003d\"http://www.etre.com/tools/colourblindsimulator/\" rel\u003d\"nofollow\"\u003ehttp://www.etre.com/tools/colourblindsimulator/\u003c/a\u003e and \u003ca href\u003d\"http://www.color-blindness.com/coblis-color-blindness-simulator/\" rel\u003d\"nofollow\"\u003ehttp://www.color-blindness.com/coblis-color-blindness-simulator/\u003c/a\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Documents\" /\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eDocuments\u003c/b\u003e\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://drive.google.com/open?id\u003d0B6FmQe6bc6yVZ012REktU09NOEE\u0026amp;authuser\u003d0\"\u003eChrome Security UX (Enamel) Public Folder\u003c/a\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(0,102,204);font-size:13.3333330154419px;text-decoration:underline;background-color:transparent\"\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/11-SXwzCGBlk8q1cNtb7peZjb2UjRPrKSFhOfZhTOz24/edit\"\u003eChrome Security UI\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1RamP4-HJ7GAJY3yv2ju2cK50K9GhOsydJN6KIO81das/pub\" style\u003d\"font-size:10pt;background-color:transparent\"\u003eSecurity guidelines for Chrome Extension \u0026amp; App API developers\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eIf you are a Googler, you can access the folder of Google-internal Enamel documents at \u003ca href\u003d\"https://goto.google.com/enamel-folder\"\u003ego/enamel-folder\u003c/a\u003e (using your corp account).\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6743906577140407009"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/enamel"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6333507778373553020"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6333507778373553020"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6333507778373553020"}],"author":[{"name":{"$t":"Parisa Tabriz"},"email":{"$t":"parisa@chromium.org"}}],"sites$pageName":{"$t":"enamel"},"sites$revision":{"$t":"38"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7280085003653007683"},"published":{"$t":"2016-06-29T00:46:28.966Z"},"updated":{"$t":"2016-06-29T00:46:28.995Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-29T00:46:28.966Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"origins.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7280085003653007683"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6333507778373553020"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/enamel/origins.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7280085003653007683"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7280085003653007683"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7280085003653007683"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7280085003653007683"}],"author":[{"name":{"$t":"Lucas Garron"},"email":{"$t":"lgarron@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1146686023431725655"},"published":{"$t":"2013-05-23T20:50:36.868Z"},"updated":{"$t":"2016-06-28T21:01:02.826Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2013-05-23T20:50:36.868Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"layercake.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1146686023431725655"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1134087925285753599"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook/layercake.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1146686023431725655"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1146686023431725655"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1146686023431725655"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1146686023431725655"}],"author":[{"name":{"$t":"Jói Sigurðsson"},"email":{"$t":"joi@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1693831477482018197"},"published":{"$t":"2013-05-23T21:14:09.951Z"},"updated":{"$t":"2016-06-28T21:01:02.826Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2013-05-23T21:14:09.951Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Life of a Browser Component.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1693831477482018197"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1134087925285753599"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookbook/Life%20of%20a%20Browser%20Component.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1693831477482018197"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1693831477482018197"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1693831477482018197"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1693831477482018197"}],"author":[{"name":{"$t":"Jói Sigurðsson"},"email":{"$t":"joi@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"WCl7JmA4\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5384573906228610929"},"published":{"$t":"2013-02-21T19:02:28.973Z"},"updated":{"$t":"2016-06-24T05:37:59.986Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-24T05:37:58.074Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chromebook Pixel (2013)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Specifications\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eSpecifications\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Developer-Mode\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eDeveloper Mode\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction1\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Entering\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eEntering\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-USB-Boot\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eUSB Boot\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Legacy-Boot\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eLegacy Boot\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Leaving\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003eLeaving\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Installing-Linux-to-the-SSD\"\u003e\u003cstrong\u003e2.6 \u003c/strong\u003eInstalling Linux to the SSD\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Troubleshooting\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTroubleshooting\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Won-t-boot-Power-button-does-nothing-\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eWon't boot? Power button does nothing?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Legacy-Boot-Doesn-t-Work\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eLegacy Boot Doesn't Work\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Firmware-Event-Log\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eFirmware Event Log\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Firmware\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eFirmware\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-s-inside-\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eWhat's inside?\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Disassembly\"\u003e\u003cstrong\u003e5.1 \u003c/strong\u003eDisassembly\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Firmware-Write-Protect\"\u003e\u003cstrong\u003e5.1.1 \u003c/strong\u003eFirmware Write Protect\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Servo-Header\"\u003e\u003cstrong\u003e5.1.2 \u003c/strong\u003eServo Header\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\r\n\u003cp\u003eThis page contains information about the \u003ca href\u003d\"http://www.google.com/chromebook/pixel\"\u003eChromebook Pixel (2013)\u003c/a\u003e that is interesting and/or useful to software developers. For general information about getting started with developing on Chromium OS (the open-source version of the software on the Chrome Notebook), see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide\"\u003eChromium OS Developer Guide\u003c/a\u003e.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Specifications\" /\u003eSpecifications\u003c/h3\u003e\r\n\u003cul\u003e\u003cli\u003eCPU: Intel Core-i5 3427U (dual-core 1.8 GHz)\u003c/li\u003e\r\n\u003cli\u003eGPU: Intel HD Graphics 4000\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e2560x1700 screen\u003c/li\u003e\u003cli\u003eMini DisplayPort\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eRAM: 4 GiB DDR3 (Not upgradeable)\u003c/li\u003e\r\n\u003cli\u003eDisk: 32 or 64 GiB SSD\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eSD \u0026amp; USB expansion slots\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eWiFi: 802.11 a/b/g/n\r\n\u003cul\u003e\u003cli\u003eUSB slot can handle Ethernet dongle\u003c/li\u003e\u003cli\u003eLTE on some models\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eBluetooth 3.0\u003c/li\u003e\r\n\u003cli\u003eNo \u003ca href\u003d\"http://en.wikipedia.org/wiki/Kensington_Security_Slot\" rel\u003d\"nofollow\"\u003eKensington Security Slot\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Developer-Mode\" /\u003eDeveloper Mode\u003c/h2\u003e\r\n\u003cp\u003e\u003cb\u003eCaution: Modifications you make to the system are not supported by Google, may cause hardware, software or security issues and may void warranty.\u003c/b\u003e\u003c/p\u003e\r\n\u003cp\u003eAn unrelated note: Holding just Refresh and poking the Power button hard-resets the machine without entering Recovery. That's occasionally useful, but use it with care - it doesn't sync the disk or shut down politely, so there's a nonzero chance of trashing the contents of your stateful partition.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Introduction1\" /\u003eIntroduction\u003c/h3\u003e\r\n\u003cp\u003eEnabling Developer mode is the first step to tinkering with your Chromebook. With Developer mode enabled you can do things like poke around on a command shell (as root if you want), install Chromium OS, or try other OS's. Note that Developer mode turns off some security features like verified boot and disabling the shell access. If you want to browse in a safer, more secure way, leave Developer mode turned OFF. Note: Switching between Developer and Normal (non-developer) modes will remove user accounts and their associated information from your Chromebook.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Entering\" /\u003eEntering\u003c/h3\u003e\r\n\u003cp\u003eOn this device, both the recovery button and the dev-switch have been virtualized.\u003c/p\u003e\r\n\u003cp\u003eTo invoke Recovery mode, you hold down the \u003cfont color\u003d\"#990000\"\u003eESC\u003c/font\u003e and \u003cfont color\u003d\"#990000\"\u003eRefresh\u003c/font\u003e (F3) keys and press the \u003cfont color\u003d\"#990000\"\u003ePower\u003c/font\u003e button for at least 200ms (until the keyboard backlight comes on). If you don't hold it for long enough, then it won't work.\u003c/p\u003e\r\n\u003cp\u003eTo enter Dev-mode, you first invoke Recovery, and at the Recovery screen press \u003cfont color\u003d\"#990000\"\u003eCtrl-D\u003c/font\u003e (there's no prompt - you have to know to do it). It will ask you to confirm, then reboot into dev-mode.\u003c/p\u003e\r\n\u003cp\u003eDev-mode works the same as always: It will show the scary boot screen and you need to press \u003cfont color\u003d\"#990000\"\u003eCtrl-D\u003c/font\u003e or wait 30 seconds to continue booting.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-USB-Boot\" /\u003eUSB Boot\u003c/h3\u003e\r\n\u003cp\u003eBy default, USB booting is disabled. Once you are in Dev-mode and have a root shell, you can run:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003esudo crossystem dev_boot_usb\u003d1\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eand reboot once to boot from USB drives with Ctrl-U.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Legacy-Boot\" /\u003eLegacy Boot\u003c/h3\u003e\r\n\u003cp\u003eThis device includes the SeaBIOS firmware which supports booting images directly like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you, nor is it easy to use for beginners. You will need to manually boot/install your alternative system.\u003c/p\u003e\r\n\u003cp\u003eLike USB boot, support for this is disabled by default. You need to get into Dev-mode first and then run:\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003esudo crossystem dev_boot_legacy\u003d1\u003c/code\u003e\u003c/div\u003e\r\n\u003cp\u003eand reboot once to boot legacy images with \u003cfont color\u003d\"#990000\"\u003eCtrl-L.\u003c/font\u003e\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Leaving\" /\u003eLeaving\u003c/h3\u003e\r\n\u003cp\u003eTo leave Dev-mode and go back to normal mode, just follow the instructions at the scary boot screen. It will prompt you to confirm.\u003c/p\u003e\r\n\u003cp\u003eIf you want to leave Dev-mode programmatically, you can run \u003ccode\u003ecrossystem disable_dev_request\u003d1; reboot\u003c/code\u003e from a root shell. There's no way to enter Dev-mode programmatically, and just seeing the Recovery screen isn't enough - you have to use the three-finger salute which hard-resets the machine first. That's to prevent a remote attacker from tricking your machine into dev-mode without your knowledge.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Installing-Linux-to-the-SSD\" /\u003eInstalling Linux to the SSD\u003c/h3\u003e\r\n\u003cp\u003eSee the excellent write up by David Miller here: \u003ca href\u003d\"http://vger.kernel.org/~davem/chromebook_pixel_linux.txt\" rel\u003d\"nofollow\"\u003ehttp://vger.kernel.org/~davem/chromebook_pixel_linux.txt\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Troubleshooting\" /\u003eTroubleshooting\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Won-t-boot-Power-button-does-nothing-\" /\u003eWon't boot? Power button does nothing?\u003c/h3\u003e\r\n\u003cp\u003eMake sure you don't have your Pixel stacked on top of another Pixel (or possibly other laptop), as the sensor for detecting the screen closed will activate from the magnet in the device below, preventing booting.\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Legacy-Boot-Doesn-t-Work\" /\u003eLegacy Boot Doesn't Work\u003c/h3\u003e\r\n\u003cp\u003eSometimes it's possible to break the SeaBIOS install in the flash (sometimes doing innocuous things like tweaking the GBB flags). If you do get into such a situation:\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003eCheck that dev_boot_legacy is set to 1 when you run crossystem\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eIf it isn't, then see the normal Legacy Boot section above\u003c/li\u003e\r\n\u003cli\u003eif it is, then see below\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cp\u003eYou can safely reset the copy of SeaBIOS in your flash by running (as root):\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\r\n\u003ccode\u003e# chromeos-firmwareupdate --sb_extract /tmp\u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e# flashrom -w /tmp/bios.bin -i RW_LEGACY\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Firmware-Event-Log\" /\u003eFirmware Event Log\u003c/h3\u003e\r\n\u003cp\u003eThe Pixel firmware saves an event log to read-write flash that can be useful for troubleshooting your device.\u003c/p\u003e\r\n\u003cp\u003eThe event log is based on SMBIOS Type 15 Event Log format, but uses a number of OEM events to provide additional information. The mosys application that is part of Chromium OS can be used to read and decode the log by running \u003cb\u003emosys eventlog list\u003c/b\u003e as the root user in Chrome OS if the device is in developer mode or opening \u003cb\u003echrome://system\u003c/b\u003e and looking for the \u003cb\u003eeventlog\u003c/b\u003e entry in normal/verified mode.\u003c/p\u003e\r\n\u003cp\u003eMosys can also be compiled on other Linux distributions, here are instructions for Ubuntu that assume basic build and source control tools are installed. Unfortunately these same instructions do not work on Fedora because it does not provide static libraries for things like UUID.\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003ccode\u003e# install libuuid headers and static libs\u003cbr /\u003e\r\nsudo apt-get install uuid-dev\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n# build flashmap library dependency\u003cbr /\u003e\r\ngit clone https://chromium.googlesource.com/chromiumos/third_party/flashmap/\u003cbr /\u003e\r\ncd flashmap\u003cbr /\u003e\r\nmake\u003cbr /\u003e\r\ncd ..\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n# build mosys and link statically against flashmap\u003cbr /\u003e\r\ngit clone https://chromium.googlesource.com/chromiumos/platform/mosys.git\u003cbr /\u003e\r\ncd mosys\u003cbr /\u003e\r\nmake defconfig\u003cbr /\u003e\r\nmake EXTRA_CFLAGS\u003d\"-I ../flashmap/lib -static\" FMAP_LINKOPT\u003d\"-I ../flashmap/lib -L ../flashmap/lib -lfmap\"\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n# run mosys to print event log\u003cbr /\u003e\r\nsudo ./mosys eventlog list\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n# example output...\u003cbr /\u003e\r\n221 | 2013-03-05 08:31:45 | ACPI Wake | S5\u003cbr /\u003e\r\n222 | 2013-03-05 08:31:47 | Chrome OS Developer Mode\u003cbr /\u003e\r\n223 | 2013-03-05 09:01:03 | Kernel Event | Clean Shutdown\u003cbr /\u003e\r\n224 | 2013-03-05 09:01:03 | ACPI Enter | S5\u003cbr /\u003e\r\n225 | 2013-03-05 09:01:09 | System boot | 362\u003cbr /\u003e\r\n226 | 2013-03-05 09:01:09 | EC Event | Power Button\u003cbr /\u003e\r\n227 | 2013-03-05 09:01:09 | ACPI Wake | S5\u003cbr /\u003e\r\n228 | 2013-03-05 09:01:09 | Wake Source | PCI PME | 0\u003cbr /\u003e\r\n229 | 2013-03-05 09:01:09 | Wake Source | Internal PME | 0\u003cbr /\u003e\r\n230 | 2013-03-05 09:01:10 | Chrome OS Developer Mode\u003c/code\u003e\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware\" /\u003eFirmware\u003c/h2\u003e\r\n\u003cp\u003eThis device uses \u003ca href\u003d\"http://www.coreboot.org/\" rel\u003d\"nofollow\"\u003ecoreboot\u003c/a\u003e and \u003ca href\u003d\"http://www.denx.de/wiki/U-Boot\" rel\u003d\"nofollow\"\u003eDas U-Boot\u003c/a\u003e to boot the system. You can find the source in the \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-link-2695.B\"\u003eChromium OS coreboot git tree\u003c/a\u003e and the \u003ca href\u003d\"https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-link-2695.B\"\u003eChromium OS u-boot git tree\u003c/a\u003e in the \u003ccode\u003efirmware-link-2695.B\u003c/code\u003e branches.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-What-s-inside-\" /\u003eWhat's inside?\u003c/h2\u003e\r\n\u003cp\u003e\u003cfont color\u003d\"#ff0000\" size\u003d\"3\"\u003e\u003cb\u003eWARNING: Opening the case and fiddling with the stuff inside could easily brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not familiar with this process. Really, just don't.\u003c/b\u003e\u003c/font\u003e\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Disassembly\" /\u003eDisassembly\u003c/h3\u003e\r\n\u003cp\u003eTaking apart your Chromebook is \u003cb\u003enot\u003c/b\u003e encouraged. If you have hardware troubles, please seek assistance first from an authorized center. There's nothing inside that you can fix yourself. Be advised that disassembly might \u003cb\u003evoid warranties\u003c/b\u003e or other obligations, so please consult any and all paperwork you received first. \u003cspan style\u003d\"font-size:10pt\"\u003eIf you just want to see what the inside looks like, gaze upon this (click for a high res version):\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"239\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1361854702349/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg\" width\u003d\"320\" /\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-right:auto;margin-left:auto\"\u003e\r\n\u003cp\u003eFine. If you \u003cb\u003emust\u003c/b\u003e risk breaking it for good, at least do it the right way. \u003c/p\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eFirst, acquire the necessary tools:\u003c/li\u003e\r\n\u003cul style\u003d\"color:rgb(51,51,51)\"\u003e\u003cli\u003e1 small flat head screw driver\u003c/li\u003e\r\n\u003cli\u003e1 small Phillips head screw driver\u003c/li\u003e\r\n\u003cli\u003e1 \u003ca href\u003d\"http://www.amazon.com/TEKTON-5652-4-Inch-Suction-Puller/dp/B000NPR3FW/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(17,85,204);text-decoration:none\"\u003esuction cup\u003c/a\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eNo, not one like you use in the shower\u003c/li\u003e\r\n\u003cli\u003eYou can probably make do with a 2\", but a 3\" or 4\" one would be much better\u003c/li\u003e\r\n\u003cli\u003eMultiple suction cups won't really help either (so 2\" + 2\" !\u003d 4\")\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eShut the system down and close the lid\u003c/li\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eFlip the laptop over so the bottom is facing up and the hinge is facing away from you\u003c/li\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eUsing a flat head screwdriver, pop the four rubber feet off, starting from the edge of the case\u003c/li\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eUsing a Phillips head screw driver (PH0), remove the 4 screws under the rubber feet\u003c/li\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eStick the suction cup onto the bottom of the case\u003c/li\u003e\r\n\u003cul style\u003d\"color:rgb(51,51,51)\"\u003e\u003cli\u003eCenter it with respect to the sides (left/right)\u003c/li\u003e\r\n\u003cli\u003ePlace it roughly 1 centimeter from the front (not the hinge) side\u003c/li\u003e\r\n\u003cli\u003eThe handle should be parallel with the left/right sides\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003ePut one hand on the hinge to hold it down (so that you are not touching the case itself)\u003c/li\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eRotate the suction cup as follows:\u003c/li\u003e\r\n\u003cul style\u003d\"color:rgb(51,51,51)\"\u003e\u003cli\u003eThe handle edge closest to the hinge pulls up\u003c/li\u003e\r\n\u003cli\u003eThe handle edge closest to the front pushes down\u003c/li\u003e\r\n\u003cli\u003eThe side snaps should disengage\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eAfter the side snaps disengage, you should be able to \u003cb\u003egently\u003c/b\u003e pull the bottom off\u003c/li\u003e\r\n\u003cul style\u003d\"color:rgb(51,51,51)\"\u003e\u003cli\u003eContinue applying the rotation force as you do, increasing slightly if it does not disconnect\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"color:rgb(51,51,51)\"\u003eIf the front edge feels like it isn't coming off, it's probably due to the glue\u003c/li\u003e\r\n\u003cul style\u003d\"color:rgb(51,51,51)\"\u003e\u003cli\u003eOnce the back and side snaps have been disconnected, you can gently pivot the panel up to force the glue to disconnect\u003c/li\u003e\r\n\u003cli\u003eThe glue is the semi-reusable type you might find with credit cards in the mail, so it might sort-of restick itself when you close it up, but it's never going to be as good as new. That's one of the reasons we suggested you not do this.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cfont color\u003d\"#333333\"\u003eWhen you put the bottom back, the hinge-side clips should go in first. Don't just jam it on and press down. Sheesh.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cfont color\u003d\"#333333\"\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Firmware-Write-Protect\" /\u003eFirmware Write Protect\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cp\u003eIt's the screw between the USB connector and the battery.\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Servo-Header\" /\u003eServo Header\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cp\u003ePixel uses a 1x42 \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/servo\"\u003eservo header\u003c/a\u003e (now obsolete).\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2461203149256614225"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5384573906228610929"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5384573906228610929"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5384573906228610929"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$pageName":{"$t":"chromebook-pixel"},"sites$revision":{"$t":"41"}},{"gd$etag":"\"XSl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2217533542001767070"},"published":{"$t":"2015-03-11T22:49:36.878Z"},"updated":{"$t":"2016-06-20T22:49:42.296Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-20T22:49:40.956Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Settings: Material Design"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cb\u003eEng\u003c/b\u003e: dbeam@, dpapad@, dschuyler@, hcarmona@, michaelpg@, stevenjb@, tommycli@\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003ePM\u003c/b\u003e: tbuckley@\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eUX\u003c/b\u003e: bettes@\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eCode Location\u003c/b\u003e: chrome/browser/resources/settings, chrome/browser/ui/webui/settings\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Objective\" /\u003eObjective\u003c/h2\u003e\r\n\u003cdiv\u003eTo create a new Settings experience for Chromium/Chromium OS which will implement the material design spec, using web components as a maintainable and modular implementation.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Using\" /\u003eUsing\u003c/h2\u003e\r\n\u003cdiv\u003eVisit chrome://md-settings, or use #enable-md-settings in chrome://flags. This is still a work in progress; d\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eo not expect all settings to work until launch.\u003c/span\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Model\" /\u003eModel\u003c/h2\u003e\r\n\u003cdiv\u003eThe Settings UI is composed of many Polymer elements, which use two-way data binding to update a local prefs model. A Polymer element observing this prefs model persists changes back to the pref store via a set of granular JS APIs.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003eDesign Documents\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eDesign documents can be found \u003ca href\u003d\"https://drive.google.com/open?id\u003d0B6VE9j_QZJCrfnZhLUNWeTlIX1JKdEJEWkoweC1sNzlKbG9MTmUyX2t1akVPenQ4UFVRWGc\u0026amp;authuser\u003d2\"\u003ehere\u003c/a\u003e. The following are a few major docs:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1PnGKrP6_dXS3L1h36buxHPW3zSWup5FaTaGthed3CUc/edit#heading\u003dh.xgjl2srtytjt\"\u003eChrome Settings API Wrapper\u003c/a\u003e - describes interaction between Chrome Settings page UI elements and underlying Chrome APIs.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1PCQltNDdyZyuPHUdqYIjeObRrVOhf8WTr6BLfuTQ4ew/edit?pli\u003d1#heading\u003dh.adz03dmup02t\"\u003echrome.settingsPrivate API\u003c/a\u003e - describes the new extension API used to interact with the pref store from JS.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"https://docs.google.com/document/d/12hK4HEKOo4w9L5DT34hlTKX32SpeNepD7FoZTXRCJQY/edit#\"\u003ei18n Design Document\u003c/a\u003e - describes C++ i18n templates.\u003cbr /\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"https://docs.google.com/document/d/1VUbDrsJ4eAOAEODeegjwGNeT3iHCKWu46kJAW4gX1WM/edit\"\u003eSettings Routing and Navigation\u003c/a\u003e - describes the new routing approach.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Individual-settings-pages\" /\u003eIndividual settings pages\u003c/h2\u003e\r\n\u003cdiv\u003eEach category of settings will now reside in its own page. Each page will be represented by its own custom element, to be encapsulated within a variant of \u0026lt;neon-animated-pages\u0026gt;. We split the HTML and JS such that the HTML for a given page only contains the layout, and the JS defines the \u0026lt;settings-\u003ci\u003efoo\u003c/i\u003e-page\u0026gt; element.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eAlso, each individual page element will have a reference to a shared \u003cfont face\u003d\"courier new, monospace\"\u003eprefs\u003c/font\u003e property. This \u003cspan style\u003d\"font-family:courier new,monospace;font-size:small;background-color:transparent\"\u003eprefs\u003c/span\u003e property will contain the shared model for all settings, which in turn will be kept in sync with the Chrome pref store.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eExample page code:\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\u003cb\u003ea11y_page.html:\u003c/b\u003e\u003c/div\u003e\r\n\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cbr /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u0026lt;dom-module id\u003d\"settings-a11y-page\"\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u0026lt;template\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u0026lt;div class\u003d\"layout vertical\"\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e \u0026lt;settings-checkbox checked\u003d\"{{prefs.settings.a11y.highContrastEnabled}}\"\u0026gt;\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e $i18n{a11yHighContrastMode}\u003c/code\u003e\u003c/code\u003e\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e \u0026lt;/settings-checkbox\u0026gt;\u003c/code\u003e\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e \u0026lt;settings-checkbox checked\u003d\"{{prefs.settings.a11y.screenMagnifierEnabled}}\"\u0026gt;\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e \u003c/code\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e$i18n{a11yScreenMagnifier}\u003c/span\u003e\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e\u003ccode style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e \u0026lt;/settings-checkbox\u0026gt;\u003c/code\u003e\u003cbr style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13.3333px;line-height:13.3333px\" /\u003e \u0026lt;/div\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u0026lt;/template\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e \u0026lt;script src\u003d\"a11y_page.js\"\u0026gt;\u0026lt;/script\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e\u0026lt;/dom-module\u0026gt;\u003c/code\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\u003cb\u003ea11y_page.js:\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont size\u003d\"2\"\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003ePolymer({\u003c/code\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e is: \u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;line-height:12px\"\u003e'settings-a11y-page', \u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e properties: {\u003c/code\u003e\u003c/div\u003e\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;line-height:12px\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;line-height:12px\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);line-height:1\"\u003e/**\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e \u003c/span\u003e* Preferences state.\u003c/code\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;line-height:12px\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;line-height:12px\"\u003e \u003c/span\u003e\u003cspan style\u003d\"line-height:1;color:rgb(0,96,0)\"\u003e*/\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e prefs: {\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e type: Object,\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e notify: true,\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e }\u003c/code\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e\r\n\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003ccode\u003e});\u003c/code\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"2\"\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003c/blockquote\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/26204367840923486"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/updating-webui-for-material-design/settings-material-design"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2217533542001767070"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2217533542001767070"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2217533542001767070"}],"author":[{"name":{"$t":"Oren Blasberg"},"email":{"$t":"orenb@chromium.org"}}],"sites$pageName":{"$t":"settings-material-design"},"sites$revision":{"$t":"24"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5193207761203911936"},"published":{"$t":"2013-06-09T07:38:17.612Z"},"updated":{"$t":"2016-06-20T02:41:57.470Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-20T02:41:55.864Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Developing apps on your Chromebook"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003eHere’s a running list of apps from the Chrome Web Store that can help you develop on your Chromebook or Chromium OS device:\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eChrome Dev Editor (Developer Preview) \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;font-family:Arial;background-color:transparent\"\u003e- Editor for building Web Apps and Chrome Apps, in JavaScript or Dart. CDE also supports Git and Polymer development.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"line-height:14.9499998092651px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/chrome-dev-editor-develop/pnoffddplpippgcfjdhbmhkofpnaalpg\"\u003ehttps://chrome.google.com/webstore/detail/chrome-dev-editor-develop/pnoffddplpippgcfjdhbmhkofpnaalpg\u003c/a\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent;line-height:14.9499998092651px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eSecure Shell \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- Terminal emulator and SSH client\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo?hl\u003den\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eChrome Remote Desktop \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- Access other computers or allow another user to access your computer securely over the Internet\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/chrome-remote-desktop/gbchcmhmhahfdphkhkmpfmihenigjmpp?hl\u003den\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chrome.google.com/webstore/detail/chrome-remote-desktop/gbchcmhmhahfdphkhkmpfmihenigjmpp\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eText \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- A basic text editor for Chrome OS and Chrome\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg?hl\u003den\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eBeagle Term \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- Terminal emulator with serial port through USB dongles\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/beagle-term/gkdofhllgfohlddimiiildbgoggdpoea\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chrome.google.com/webstore/detail/beagle-term/gkdofhllgfohlddimiiildbgoggdpoea\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eCloud9 \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- an online platform for development that makes developing applications more convenient than ever\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://chrome.google.com/webstore/detail/cloud9/nbdmccoknlfggadpfkmcpnamfnbkmkcp\" style\u003d\"text-decoration:none\" target\u003d\"_blank\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://chrome.google.com/webstore/detail/cloud9/nbdmccoknlfggadpfkmcpnamfnbkmkcp\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\r\n\r\n\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\r\n\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial;font-weight:bold\"\u003eRunnable \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;font-size:13px;white-space:pre-wrap;background-color:transparent;font-family:Arial\"\u003e- Cloud-based IDE\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"text-decoration:underline;font-size:13px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ca href\u003d\"http://runnable.com/\" style\u003d\"text-decoration:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003ehttp://runnable.com/\u003c/a\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003eTo test your Android apps on Chrome OS, learn how to \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/sideload-android-apps-on-chromebook\"\u003esideload Android apps on your Chromebook\u003c/a\u003e \u003c/p\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developing-apps-on-your-chromium-os-device"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5193207761203911936"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5193207761203911936"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5193207761203911936"}],"author":[{"name":{"$t":"David Schneider"},"email":{"$t":"dnschneid@chromium.org"}}],"sites$pageName":{"$t":"developing-apps-on-your-chromium-os-device"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6204284533980200241"},"published":{"$t":"2015-11-24T00:33:01.276Z"},"updated":{"$t":"2016-06-17T21:34:56.292Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T21:34:54.443Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Testing asynchronous UI"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eIf the UI under test initializes asynchronously, or a method you're testing finishes asynchronously, your test must also be asynchronous.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cdiv\u003eOne way to ensure a test runs at the appropriate time is to provide a Promise the test can hook onto, e.g. \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/resources/settings/prefs/prefs_types.js\u0026amp;q\u003d%22CrSettingsPrefsInternal.initialized%22\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\"\u003e\u003ccode\u003eCrSettingsPrefs.initialized\u003c/code\u003e\u003c/a\u003e.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eOtherwise, pay attention to the flavor of asynchronicity involved. If you're using mocha, you can combine these techniques with\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e \u003c/span\u003e\u003ca href\u003d\"https://dev.chromium.org/developers/updating-webui-for-material-design/testing-webui-with-mocha#sites-canvas-main-content\" style\u003d\"color:rgb(85,26,139);font-size:13.3333px;background-color:transparent\"\u003ethe done() callback or returning a Promise from a test\u003c/a\u003e.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\r\n\u003ch3 style\u003d\"margin-top:0px\"\u003e\u003ca name\u003d\"TOC-Macrotask-timing\" /\u003eMacrotask timing\u003c/h3\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px;font-weight:normal\"\u003eTasks scheduled for the next event loop: \u003cspan style\u003d\"background-color:transparent\"\u003e\u003ca href\u003d\"https://html.spec.whatwg.org/multipage/webappapis.html#timer-initialisation-steps\" rel\u003d\"nofollow\"\u003e\u003ccode\u003esetTimeout\u003c/code\u003e/\u003ccode\u003esetInterval\u003c/code\u003e\u003c/a\u003e, user interaction.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cb\u003eTesting:\u003c/b\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003ecall \u003ccode\u003esetTimeout\u003c/code\u003e and test UI in the callback.\u003c/span\u003e\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Microtask-timing\" /\u003eMicrotask timing\u003c/h3\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003eTasks scheduled for the end of the current event loop:\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003ca href\u003d\"http://www.ecma-international.org/ecma-262/6.0/#sec-performpromisethen\" rel\u003d\"nofollow\"\u003e\u003ccode\u003ePromise.prototype.then\u003c/code\u003e/\u003ccode\u003ecatch\u003c/code\u003e\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e\u003ca href\u003d\"https://dom.spec.whatwg.org/#queue-a-mutation-record\" rel\u003d\"nofollow\"\u003e\u003ccode\u003eMutationObserver\u003c/code\u003e\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003eNewly queued microtasks are processed in the current event loop. E.g., Promises will call chained resolve/reject handlers before a setTimeout callback, even if setTimeout was called before the chain of Promises was created.\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\r\n\u003cb\u003eTesting: \u003c/b\u003ecreate a Promise (or call \u003ccode\u003esetTimeout\u003c/code\u003e) and test the UI in the callback. Return a Promise from mocha tests.\u003c/div\u003e\r\n\u003c/span\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Polymer-microtask-timing\" /\u003ePolymer microtask timing\u003c/h3\u003e\r\n\u003cspan style\u003d\"background-color:transparent\"\u003e\r\n\u003ch4 style\u003d\"font-size:13.3333px\"\u003e\u003ca name\u003d\"TOC-Microtasks-generated-by-Polymer-are-special-and-can-be-executed-immediately-via-Polymer.dom.flush-.-This-is-a-useful-alternative-to-nesting-setTimeouts-in-tests-to-ensure-the-DOM-under-test-is-up-to-date.\" /\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003eMicrotasks generated by Polymer are special*, and can be executed immediately via \u003c/span\u003e\u003ccode style\u003d\"font-size:13.3333px;font-weight:normal\"\u003ePolymer.dom.flush()\u003c/code\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e. This is a useful alternative to nesting setTimeouts in tests to ensure the DOM under test is up to date.\u003c/span\u003e\u003c/h4\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003ch4 style\u003d\"margin-top:0px\"\u003e\u003ca name\u003d\"TOC-Templates:-dom-if-and-sort-filter-on-dom-repeat-Some-elements-including:-iron-list-paper-slider-paper-tabs-paper-slider-paper-slider-Animations-focus-tab-order-some-key-bindings-myElement.async-myElement.debounce-Polymer.dom-el-.observeNodes-Testing:-prefe\" /\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eTemplates: \u003ccode\u003edom-if\u003c/code\u003e, and \u003ccode\u003esort\u003c/code\u003e/\u003ccode\u003efilter\u003c/code\u003e on \u003ccode\u003edom-repeat\u003c/code\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eSome elements, including: \u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003eiron-list\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;font-weight:normal\"\u003epaper-slider\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;font-weight:normal\"\u003epaper-tabs\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;font-weight:normal\"\u003epaper-slider\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;font-weight:normal\"\u003epaper-slider\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eAnimations, focus, tab order, some key bindings\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ccode style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e\u003ca href\u003d\"http://polymer.github.io/polymer/#methods\" rel\u003d\"nofollow\"\u003emyElement.async\u003c/a\u003e\u003c/code\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e\u003ca href\u003d\"http://polymer.github.io/polymer/#methods\" style\u003d\"font-family:monospace;font-size:13.3333px\" rel\u003d\"nofollow\"\u003emyElement.debounce\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ccode style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e\u003ca href\u003d\"https://www.polymer-project.org/1.0/docs/devguide/local-dom.html#observe-nodes\"\u003ePolymer.dom(el).observeNodes\u003c/a\u003e\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eTesting:\u003cspan style\u003d\"font-weight:normal\"\u003e prefer \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-size:13.3333px;font-weight:normal;background-color:transparent\"\u003ePolymer.dom.flush() \u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13.3333px;background-color:transparent\"\u003eover asynchronous callbacks.\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/h4\u003e\r\n\u003ch4 style\u003d\"margin-top:0px\"\u003e\u003ca name\u003d\"TOC-Polymer-queues-would-be-microtasks-and-schedules-them-at-the-last-possible-moment.-Flushing-this-queue-runs-the-tasks.-If-the-queue-is-not-flushed-the-microtasks-are-scheduled-strangely-via-a-MutationObserver-.\" /\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e*Polymer queues would-be microtasks and schedules them at the last possible moment. Flushing this queue runs the tasks. If the queue is not flushed, the microtasks are scheduled (strangely, via a \u003c/span\u003e\u003ccode style\u003d\"font-size:13.3333px;font-weight:normal\"\u003eMutationObserver\u003c/code\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e).\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/h4\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Synchronous\" /\u003eSynchronous\u003c/h3\u003e\r\n\u003cdiv\u003eSome Polymer methods are explicitly synchronous:\u003c/div\u003e\r\n\u003ch4 style\u003d\"margin-top:0px\"\u003e\u003ca name\u003d\"TOC-Lifecycle-callbacks.-created-and-ready-are-called-immediately-when-creating-the-element-and-attached-is-called-immediately-after-the-element-is-added-to-the-DOM.-Events-dispatched-dynamically.-el.fire-click-MockInteractions.tap-el-\" /\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eLifecycle callbacks. \u003ccode\u003ecreated\u003c/code\u003e and \u003ccode\u003eready\u003c/code\u003e are called immediately when creating the element, and \u003ccode\u003eattached\u003c/code\u003e is called immediately after the element is added to the DOM.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px;font-weight:normal\"\u003eEvents dispatched dynamically. \u003ccode\u003eel.fire('click')\u003c/code\u003e, \u003ccode\u003eMockInteractions.tap(el)\u003c/code\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/h4\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/26204367840923486"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/updating-webui-for-material-design/testing-asynchronous-ui"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6204284533980200241"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6204284533980200241"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6204284533980200241"}],"author":[{"name":{"$t":"Michael Giuffrida"},"email":{"$t":"michaelpg@chromium.org"}}],"sites$pageName":{"$t":"testing-asynchronous-ui"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6935815620071360797"},"published":{"$t":"2016-06-17T17:55:15.618Z"},"updated":{"$t":"2016-06-17T17:55:15.649Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T17:55:15.618Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_973.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6935815620071360797"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8249727978514538455"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup/Selection_973.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6935815620071360797"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6935815620071360797"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6935815620071360797"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6935815620071360797"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6675959168747992537"},"published":{"$t":"2016-06-17T17:53:29.779Z"},"updated":{"$t":"2016-06-17T17:53:29.814Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T17:53:29.779Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_972.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6675959168747992537"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8249727978514538455"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup/Selection_972.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6675959168747992537"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6675959168747992537"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6675959168747992537"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6675959168747992537"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4496052877725203298"},"published":{"$t":"2016-06-17T17:51:44.832Z"},"updated":{"$t":"2016-06-17T17:51:44.859Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T17:51:44.832Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_971.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4496052877725203298"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8249727978514538455"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup/Selection_971.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4496052877725203298"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4496052877725203298"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4496052877725203298"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4496052877725203298"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5170048936046437692"},"published":{"$t":"2016-06-17T17:50:17.879Z"},"updated":{"$t":"2016-06-17T17:50:17.915Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T17:50:17.879Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_970.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5170048936046437692"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8249727978514538455"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup/Selection_970.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5170048936046437692"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5170048936046437692"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5170048936046437692"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5170048936046437692"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3759494680258336121"},"published":{"$t":"2016-06-17T17:42:00.382Z"},"updated":{"$t":"2016-06-17T17:42:00.413Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-17T17:42:00.382Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Selection_968.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3759494680258336121"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8249727978514538455"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/moblab/setup/Selection_968.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3759494680258336121"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3759494680258336121"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3759494680258336121"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3759494680258336121"}],"author":[{"name":{"$t":"Jean Zheng"},"email":{"$t":"jean@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1579893307503621911"},"published":{"$t":"2009-11-11T19:31:11.226Z"},"updated":{"$t":"2016-06-16T21:57:22.886Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-16T21:57:21.533Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Memory_Watcher"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"5\"\u003eMemory_Watcher is no longer supported. Either tcmalloc tools or UMDH on Windows are good alternatives.\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"5\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"5\"\u003eDocument kept for historical interest\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"5\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003chr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eOVERVIEW\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eMemory watcher is a tool that helps to attribute blame for memory usage on a windows build. It was originally coded predominantly by Mike Belshe, and was recently ressurected (and made to run on Vista).\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMemory_watcher provides a dump for each Chromium process, of the aggregate information on all memory that is currently in use. It gathers this information by recording stack traces whenever any form of dynamic memory allocation is requested (i.e., malloc, HeapAlloc, VirtualAlloc, GlobalHeapAlloc, LocalHeapAlloc). The dump for each process includes, for each stack that was used above an allocation, a count of the number of still-live allocations, and the total byte counts for those still-live regions. The dumped output is in human readable format (ASCII). The dump is sorted so that the stacks that induced the largest byte counts are listed first. Note that call counts and byte-allocation tallies are not included for memory that was freed (or decommitted). [Future versions may tally stack traces that thrash through allocations and frees in a second per-process dump file]\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA second included tool can process the dump file from any of the processes (i.e., either the browser process, or any of the renderer processes) and attribute blame to roughly 20 distinct users of memory. This latter tool will evolve over time to be more precise (and hopefully helpful).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eHOW TO BUILD AND RUN CHROMIUM WITH THE MEMORY_WATCHER TOOL ACTIVE\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eWe suggest that you build Chrome using the \"Purify\" setting, rather than Debug or Release. Debug may have different allocation results from the Release, and Release has cryptic stacks. You'll probably get the best results using purify, which turns off the DEBUG macros, but avoids optimizations that obscure the stacks.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAfter you've built chrome, select and build the tools-\u0026gt;memory_watcher module (right click on it in the \"Solution Explorer\" tab, and select \"Build\"). \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eCurrently, memory_watcher works only with the Windows Default allocator (the amount of allocated memory should be identical to what happens with other allocators, as only the varying overhead, and fragmentation impact, will not be tallied). To insure that you are using that allocator, you need to either set an environment variable (set CHROME_ALLOCATOR to \"WINHEAP\" and not to \"JEMALLOC\", \"WINLFH\", or \"TCMALLOC\"; don't set CHROME_ALLOCATOR_2), or you can more thoroughly change the default by editing \u003cfont face\u003d\"'courier new', monospace\"\u003esrc/thirdparty/tcmalloc/allocator_shim.cc\u003c/font\u003e. To change the default in that source code, you should change the line that reads:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// This is the default allocator.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estatic Allocator all\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eocator \u003d \u003cfont color\u003d\"#ff0000\"\u003e\u003cb\u003eTCMALLOC\u003c/b\u003e\u003c/font\u003e;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eto:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// This is the default allocator.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estatic Allocator allocator \u003d \u003cfont color\u003d\"#38761d\"\u003e\u003cb\u003eWINHEAP\u003c/b\u003e\u003c/font\u003e; // Equivalent to setting environment \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evariable to \"WINHEAP\".\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAlso change the specification of the subprocess allocator by changing:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cdiv\u003e char* secondary_value \u003d secondary_length ? buffer : \"\u003cfont color\u003d\"#ff0000\"\u003e\u003cb\u003eTCMALLOC\u003c/b\u003e\u003c/font\u003e\";\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eto:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u003cdiv\u003e char* secondary_value \u003d secondary_length ? buffer : \"\u003cfont color\u003d\"#38761d\"\u003e\u003cb\u003eWINHEAP\u003c/b\u003e\u003c/font\u003e\";\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eAfter making those changes, you'll need to rebuild again, but it will complete relatively quickly.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFinally, you'll need to modify the command line arguments used for starting chrome. You'll need the command line:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e--memory-profile --no-sandbox --js-flags\u003d\"--noprof\"\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou are now ready to run chrome, and gather stats. Chrome will run a little slower, but it is doing a lot more work on each allocation (i.e., it is recording stack traces). The directory that you use to run chrome will be the directory where the stack dumps appear. If you are running under a vanilla setup with MSVC, this will typically be the src/chrome directory, and NOT for instance the src/chrome/Purify directory.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eHOW TO GET CHROME TO DUMP THE LIST OF TRACES FOR CURRENTLY ALLOCATED MEMORY\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen you have reached an interesting point that you would like to understand, you can press:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eCtrl-Alt-d\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eYou can only do this once during a run of Chrome. Pressing it again and again will do nothing :-/.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIt takes a while to complete a dump. The dump files will accumulate in files named \u003cfont face\u003d\"'courier new', monospace\"\u003ememory_watcher.logNNNN.tmp\u003c/font\u003e, where \u003cfont face\u003d\"'courier new', monospace\"\u003eNNNN \u003c/font\u003eis the process id of the dumping process. When the dump is complete, the file will be renamed to \u003cfont face\u003d\"'courier new', monospace\"\u003ememory_watcher.logNNNN\u003c/font\u003e. Please do not terminate Chrome while the dumping is in progress, or you will get an incomplete dump.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eHOW CAN I EXAMINE THE DUMP FILE\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe easiest way is with a text editor, as it is plain ASCII. Unfortunately, it is VERY large, and there will typically be many distinct stacks. To get a summary of any individual dump file, run the script file src/tools/memory_watcher/scripts/summary.pl with the dump file piped in as standard input. For example:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e./summary.pl \u0026lt;memory_watcher.logNNNN\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you have a number of process dumps, it may be convenient to run something like the following in an Msysgit bash window:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003efor i in memory_watcher.log???? ; do echo summary.pl from file $i; ./summary.pl \u0026lt;$i; echo; done\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eCAVEATS\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e1) The total memory listed appears smaller than I would expect, based on other memory tools. I don't yet have the complete explanation for this, but some of the missing memory is surely static initialized data, and code space. Still, that cannot account for what is missing, and this tool will hopefully get better over time.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e2) The \u003cfont face\u003d\"'courier new', monospace\"\u003esummary.pl\u003c/font\u003e file is NOT perfect. It merely attempts to find an \"interesting\" stack frame, and use that to decisively blame the stack on a specific module. Over time, it will get better. If you think that some dump should be refined in greater detail, and some attribution is too coarse, take a look inside the \u003cfont face\u003d\"'courier new', monospace\"\u003esummary.pl\u003c/font\u003e file. You can make a minor edit to cause the contributors to any bucket-of-blame to be examined more closely, and any \"large\" contributors will be listed separately (from said bucket), along with their individual stacks. After you've made the edit (and perchance asked for details of contributors to said bucket that are over 100,000 bytes), you should run the \u003cfont face\u003d\"'courier new', monospace\"\u003esummary.pl \u003c/font\u003escript. When you see the stacks, and realize the error of blame, you can then add a new rule to the \u003cfont face\u003d\"'courier new', monospace\"\u003esummary.pl\u003c/font\u003e file, and run it again. If you have a great addition, please consider landing a change list with your improvements!!! \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis is a work-in-progress. Please feel free to help it along, or to make suggestions.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThanks,\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eJim Roskind [jar at chromium dot org]\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/memory_watcher"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1579893307503621911"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1579893307503621911"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1579893307503621911"}],"author":[{"name":{"$t":"Jim Roskind"},"email":{"$t":"jar@chromium.org"}}],"sites$pageName":{"$t":"memory_watcher"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"Wyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3749576367136014784"},"published":{"$t":"2013-05-13T16:41:51.350Z"},"updated":{"$t":"2016-06-15T17:34:07.100Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-15T17:34:06.080Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autoserv Packaging"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Trebuchet MS;font-size:17px;white-space:pre-wrap;line-height:1.15\"\u003eAutoserv at a glance\u003c/span\u003e\u003cbr /\u003e\u003cspan\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca href\u003d\"https://github.com/autotest/autotest/wiki/Autoserv\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eAutoserv\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e -- as described on its documentation page -- is a framework for automating machine control. It can do things like power cycle, install kernels, run arbitrary commands, transfer files, and run autotest tests. While a “machine” can be virtual, local, or remote, autoserv is largely used on chromeOS for remotely controlling chromebooks for automated testing purposes.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutoserv includes specific support for Autotest. It’s able to install Autotest on host devices, run control files on them, and then fetch results back to the server. To install the appropriate files onto a host device, autoserv’s \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003epackaging system \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eis used. Since autotest is it's own package it can change at a rate independent of the image, and changes to one do not require changes to the other. Using packages also allows us continue with our suite scheduling logic while non-essential packages are staged asynchronously.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Autoserv-packaging-high-level-overview\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutoserv packaging high-level overview\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutoserv’s packaging system is essentially a set of functions to fetch, upload, install, and remove packages that are necessary to control a device under test (DUT). Each package is a collection of files that is tarred and bzipped (into a *.tar.bz2 file) to facilitate the transferring of files onto the DUT. When transferring packages to a DUT, the system computes an MD5 checksum for each package to determine whether or not any previously-installed package has changed and needs to be re-installed. A package is only installed if it has changed according to the checksum (or, of course, if the package is not already on the DUT).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are 3 types of packages: those associated with test code (“test”); with profiler code (“profiler”); and with dependencies (“dep”). These packages are all generally handled the same by the packaging system, but they’re installed into different subfolders on the DUT. There is also a special package that is used to bundle the autotest client code (“client”). \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Implementation-details\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eImplementation details\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMuch of the packaging system is implemented in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eclient/common_lib/base_packages.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. It contains the logic for fetching packages from either HTTP or from a local filesystem (class \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHttpFetcher\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and class \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLocalFilesystemFetcher\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, respectively). Class \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBasePackageManager\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e in that file also contains the logic for creating package files (\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003etar_package\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e), fetching and installing (i.e., untarring) package files (\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003efetch_pkg\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003einstall_pkg\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e), and working with checksums.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe autotest client code is installed via the packaging system from the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eserver/autotest.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e file. Autotest deps are installed via \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003esetup_dep\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eclient/bin/job.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. The \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eutils/packager.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e file also calls into the packaging system to create packages.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFor test code, packages are generally created at emerge time (this is specific to chromeOS). They are simply bzipped versions of corresponding test code located in the source directory at \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eclient/site_tests\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. If a previously-built package is missing from both a DUT and the server, autoserv will bundle a temporary package using local source and send it to the DUT. Otherwise, if the server finds a previously-built package, it will send it to the DUT only if it’s changed from what’s already there. In this case, local changes to source code are ignored because the previously-built package is used instead. \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eautotest_quickmerge\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e works around this by deleting the package files for altered tests to force autoserv to build and use temporary packages created from local source.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe interesting package fetching work for test code occurs as part of the autotest harness, which can be found in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eclient/bin/harness_autoserv.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. This contains the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAutoservFetcher\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e (if you see log messages about fetching from an autoserv:// repo, this is what's being used). The fetching logic then ends up in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eserver/autotest.py\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e_process_line\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and more interestingly \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e_send_tarball\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e, which sends the .tar.bz2 package file, or generates one using PackageManager's \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003etar_package\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e function if it doesn't exist.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCurrently, fetching packages via autoserv is only used in non-prod situations, such as with run_remote_tests.sh. In prod, all of the packages are instead pulled from devservers via the HttpFetcher using the job_repo_url. This is a result of \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/212641\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ecrbug.com/212641\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and \u003c/span\u003e\u003ca href\u003d\"http://crbug.com/216918\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ecrbug.com/216918\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e; we were hitting a case where fetching would hang (it creates a fifo that gets written to, once the package has been pushed down to the DUT). A few CLs were subsequently pushed so that fetching from autoserv could be disabled in prod (\u003c/span\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/#/c/33804/2\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://gerrit.chromium.org/gerrit/#/c/33804/2\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and \u003c/span\u003e\u003ca href\u003d\"https://gerrit.chromium.org/gerrit/#/c/34665/3\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://gerrit.chromium.org/gerrit/#/c/34665/3\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e).\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAt a high level, this is what happens: \u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e1. In the simplest case, a reimage job runs, after which a server jobs runs. \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eThe reimage job stages autotest packages and sets the job_repo_url as part of\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e the autoupdate 'test'. \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003eThese packages contain the tests (one bz file for each test), the dependencies (like chrome_test) and client-autotest.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e2. \u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ejob_repo_url is set in add_cros_version_labels_and_job_repo_url, and points to the devserver where the required packages are staged.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e3. Server job kicks off autotest.py/site_autotest.py, which are the classes responsible for installing autotest on the client.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e4. autotest.py gets the job_repo_url through site_autotest's get_fetch_location, and creates a PackageManager in _install_using_packaging\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e5. This package manager is the aforementioned HttpFetcher, which does a wget from the given url to fetch packages; This happens through \u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e client/common_lib/base_packages install_pkg.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e\u003cb\u003eDeps:\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eAn example of a dep is pyauto. The actual installation of this dep happens through \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003ebin/job.install_packages on the DUT, though the steps are pretty general for package installation and are as follows:\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e1. Installs packages using packages.PackageManager \u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e \u003cspan\u003e \u003c/span\u003e- Remove the install dir and reinstalls by default.\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e2. The installation happens through \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ePackageManager.\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003efetch_pkg\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e \u003c/span\u003eThe name of the tarball to get from the repo_url is constructed as pkg_type-name.tar.bz2. In the case of pyauto this is dep-pyauto.tar.bz2\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e3. Check if the package has already been fetched\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e \u003c/span\u003eIf not, check if we need to fetch: \u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e a. Check if a checksum exists on the DUT\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e b. Fetch checksum from package url if it doesn't, through fetch_pkg_file\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e c. Parse the contents of the checksum file into a per package dictionary\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e d. Create an md5 checksum of the package present at /usr/local/autotest/packages/client-autotest.tar.bz2 on the DUT\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e e. Update the checksum file on the DUT so we don't pull the same package again through _save_checksum_dict\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e f. If the checksums don't match untar contents of the package via untar_pkg\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e g. This will essentially run a tar command on the DUT, recompute the checksums, and rewrite them to the DUT.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e4. If fetching is needed, invoke base_packages.\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003efetch_pkg_file which will lead to a wget in the case of pyauto:\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ewget --connect-timeout\u003d15 --retry-connrefused --wait\u003d5 -nv http://devserver:port/static/archive/build/autotest/packages/dep-pyauto_dep.tar.bz2 -O /usr/local/autotest/packages/dep-pyauto_dep.tar.bz2\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e5. Place the package in /usr/local/autotest/packages\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e6. Update the checksum\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e7. Install the package through base_packages.install_pkg\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e8. Check to see if the install dir exists: ls /usr/local/autotest/packages/install_dir\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e8. The actual untarring happens in base_packages.untar_pkg, before this we mkdir install_dir\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003euntar_pkg runs \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003etar xjf from_path -C dest_dir\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eIn an end to end run of a pyauto test, the following packages will get installed through the process described above:\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eOn the server, install client-autotest on the DUT:\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e1. mkdir /usr/local/autotest/packages\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e2. Copy autotest client packages to /usr/local/autotest/packages/client-autotest.tar.bz2\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e3. Untar the package if the checksum doesn't match, as described above.\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003eOn the DUT, install the tests and pyauto dep: \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e1. Execute a command like: \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial;font-size:small\"\u003e./bin/autotest -H autoserv --verbose --user\u003dbeeps /usr/local/autotest/control.autoserv\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial;font-size:small\"\u003e\u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eActually that's a lie, it executes autotestd_monitor which executes autotestd which leads to that command, but that is irrelevant for this discussion.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e2. Installing the test:\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003ea\u003c/span\u003e. The control file \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003eInvokes job.run_test with the test name, which leads to \u003c/span\u003e\u003cfont face\u003d\"Arial\" style\u003d\"font-size:10pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ecommon_lib/test.runtest\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003eb. \u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ebin/job.install_pkg installs the test using\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e \u003c/span\u003e\u003cfont face\u003d\"Arial\" style\u003d\"font-size:10pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003ecommon_lib.packages.PackageManager leading to a line in the logs like (instead of the wget):\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e22:26:48 DEBUG| Successfully fetched test-login_LoginSuccess.tar.bz2 from http://devserver/static/archive/lumpy-release/R29-\u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e4279.0.0/autotest/packages/test-login_LoginSuccess.tar.bz2\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e Again this installation happens through a process as described above.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e3. Installing deps, cros_ui_test:\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003ea. We then go on to executing the initialize function of the test via common_lib/test._cherry_pick_call\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e-\u003cspan\u003e \u003c/span\u003eUntil this point the infrastructure was totally oblivious that the test in question requires pyauto\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e b. Since pyauto tests inherit from cros_ui_test, we execute the initialize of cros_ui_test, which does things like\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003cspan\u003e start an authserver, remove cryptohome valuts, restart cros_ui etc. \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003ePyAutoTest.initialize finally install deps through \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003cspan\u003e \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003ecros/pyauto_test._install_deps and then proceeds to import pyauto.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e\u003cspan\u003e \u003cspan\u003e \u003cspan\u003e c. PyAutoTest passes in the install_dir (/usr/local/autotest/deps/pyauto_dep) and the package_dir (/usr/local/packages) which calls into bin/job\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap;font-family:Arial\"\u003e \u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cdiv\u003e\u003cspan\u003e\u003cp style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;line-height:17px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/p\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Relevant-links\" /\u003e\u003cspan style\u003d\"font-size:17px;font-family:Trebuchet MS;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRelevant links\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cp style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGeneral autoserv documentation:\u003cbr /\u003e\u003c/span\u003e\u003ca href\u003d\"https://github.com/autotest/autotest/wiki/Autoserv\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttps://github.com/autotest/autotest/wiki/Autoserv\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"background-color:transparent;white-space:pre-wrap;line-height:1.15\"\u003eUser-facing documentation about test dependencies:\r\n\u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/chromium-os/testing/autotest-best-practices#TOC-Adding-test-deps\" style\u003d\"background-color:transparent;white-space:pre-wrap;line-height:1.15;text-decoration:none\"\u003ehttps://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/master/docs/best-practices.md#Adding-test-deps\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"background-color:transparent;font-family:Arial;font-size:15px;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"background-color:transparent;font-family:Arial;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cfont size\u003d\"2\"\u003e\u003ci\u003ePublished May 13, 2013\u003c/i\u003e\u003c/font\u003e\u003c/p\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/autoserv-packaging"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3749576367136014784"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3749576367136014784"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3749576367136014784"}],"author":[{}],"sites$pageName":{"$t":"autoserv-packaging"},"sites$revision":{"$t":"12"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6000661462801866575"},"published":{"$t":"2011-08-16T17:25:28.084Z"},"updated":{"$t":"2016-06-13T23:12:54.763Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-13T23:12:53.273Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Media Internals"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003ch1 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-chrome:-media-internals-is-a-tool-to-dig-into-the-guts-of-the-Chrome-audio-video-stack.\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003ca href\u003d\"javascript:void(0);\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003echrome://media-internals\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e is a tool to dig into the guts of the Chrome \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/audio-video\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eaudio/video stack\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h1\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eIt currently displays 3 things:\u003c/font\u003e\u003c/span\u003e\u003col style\u003d\"font-family:Times New Roman\"\u003e\u003cli style\u003d\"list-style-type:decimal;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eEverything it can dig up from the media stack about active media players. Includes buffered data, video properties, measured times between events, and a log of events.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eStatus and volume of active audio streams. These are not yet associated with a particular tab.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:decimal;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eCache activity, including reads from and writes to the media cache.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Adding-Support-for-your-New-Feature\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eAdding Support for your New Feature\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eIf your code lies in \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emedia/\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e or \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ewebkit/glue/\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e, information about it can appear on chrome://media-internals. Simply get a hold of the MediaLog instance associated with WebMediaPlayer or PipelineImpl and start logging!\u003c/span\u003e\u003cbr /\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eYou’ll probably need to add a new event type to \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emedia/base/media_log_events.h\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e and potentially a helper method or two to \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emedia/base/media_log.{h,cc}\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e; see those already there for reference. Parameter names should be unique!\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003eAdd logging calls to your code.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003eThat’s it; you're done. Your events will show up in the Log section, and any parameters you passed will show up in Properties.\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eWell, ok, not quite. You may have noticed the Metrics section. If you’d like a new time measurement to appear there, simply open up \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003echrome/browser/ui/webui/media/metrics.js\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e and add the two events between which you’d like to measure to the list at the top.\u003c/span\u003e\u003cbr /\u003e\u003c/font\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Media-Internals-Internals\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003eMedia Internals Internals\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cfont size\u003d\"2\"\u003e\u003cimg height\u003d\"495px;\" src\u003d\"https://docs.google.com/a/chromium.org/drawings/image?id\u003dsBsZFnDZRDJWcztz8vkkn6Q\u0026amp;w\u003d622\u0026amp;h\u003d495\u0026amp;rev\u003d214\u0026amp;ac\u003d1\" style\u003d\"margin-top:5px;margin-bottom:5px;display:block;margin-right:auto;margin-left:auto;text-align:center\" width\u003d\"622px;\" /\u003e\u003c/font\u003e\u003c/h2\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMediaLog contains helper methods for creating MediaLogEvents, and ContentMediaLog implements its AddEvent() function to send a MediaLogEvent to the browser process as an IPC message. A single instance of MediaLog is associated with each WebMediaPlayer. This instance currently gets passed down to PipelineImpl and BufferedResourceLoader and can easily be handed off to other potential data sources (it’s RefCountedThreadSafe).\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMediaInternals is a singleton attached to the IO thread. The IPC messages from ContentMediaLog get passed to it, and it handles notifications from AudioRendererHost. It lives in chrome/, but it implements the MediaObserver interface in content/, allowing AudioRendererHost and RenderMessageFilter (the IPC message handler) to call it.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMediaInternals talks to \u003c/span\u003e\u003ca href\u003d\"javascript:void(0);\" style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003echrome://media-internals\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e by packaging up and sending JavaScript function calls to it via MediaInternalsUI. It also currently stores the information it receives from AudioRendererHost to hand off to newly created media-internals tabs, but this functionality may be removed in the future.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMediaInternalsUI is a WebUI component that hosts chrome://media-internals. There’s not much of interest here, just lots of proxying function calls across threads.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ca href\u003d\"javascript:void(0);\" style\u003d\"font-family:Times New Roman\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003echrome://media-internals\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e contains most of the logic. It handles MediaLogEvents, NetLog events, and updates from AudioRendererHost. It infers the contents of the media cache from NetLog events (cache_entry.js, disjoint_range_set.js) and displays a log of events (event_list.js) and properties (media_player.js) of each active media player. I also displays time measurements between pre-defined events (metrics.js) and some basic information about audio streams from AudioRendererHost.\u003c/span\u003e\u003c/font\u003e\u003ch2 dir\u003d\"ltr\" style\u003d\"font-family:Times New Roman\"\u003e\u003ca name\u003d\"TOC-Potential-Future-Work\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"3\"\u003ePotential Future Work\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cul style\u003d\"font-family:Times New Roman\"\u003e\u003cli style\u003d\"list-style-type:disc;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eAssociate data from AudioRendererHost with data from the MediaLog from the same player.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style\u003d\"list-style-type:disc;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eEmbed a video player in the page, something like scherkus@’s IHeartVideo project.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3463878342489281452"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/audio-video/media-internals"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6000661462801866575"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6000661462801866575"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6000661462801866575"}],"author":[{}],"sites$pageName":{"$t":"media-internals"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3666565234465838331"},"published":{"$t":"2009-09-25T19:02:59.877Z"},"updated":{"$t":"2016-06-10T01:58:01.525Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-10T01:58:00.261Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Mac Development"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eResources for developers new to the Mac platform:\u003cdiv\u003e\u003cul\u003e\u003cli\u003eDepending on what you're touching, you may not need to modify UI code or write Objective C at all in which case you don't really need any of this.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.amazon.com/exec/obidos/ASIN/0321503619\" rel\u003d\"nofollow\"\u003eCocoa Programming for Mac OS X\u003c/a\u003e by Aaron Hillegass is a great starter book on Cocoa programming, working through the examples will get you pretty far in terms of understanding the fundamentals of Cocoa.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://ktd.club.fr/programmation/fichiers/cpp-objc-en.pdf\" rel\u003d\"nofollow\" target\u003d\"_blank\"\u003eFrom C++ to Objective-C\u003c/a\u003e by Pierre Chatelier is a free online book introducing Objective C.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/a/chromium.org/document/d/1HDxOA0TD97e8MhS__7KBSAJRzKWyi0hqVTc13WSHFqc/edit?usp\u003dsharing\"\u003eObjective-C Development in Chrome\u003c/a\u003e by krstnmnlsn is a collection of basic information about working with Objective C in Chrome along with pitfalls to avoid.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://docs.google.com/presentation/d/1H8UOJmSJFQl3hgzDAjmObYTqHDTF98hj_ENpVydJ4OE/edit?usp\u003dsharing\" target\u003d\"_blank\"\u003eIntro to Chrome Mac Development\u003c/a\u003e is a shorter summary of things specific to Chrome + Mac, with links to useful parts of the code.\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eMore in-depth stuff:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542\" rel\u003d\"nofollow\" target\u003d\"_blank\"\u003eMac OS X Internals\u003c/a\u003e by Amit Singh is the defacto reference for low level OS X programming topics.\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"http://www.amazon.com/Advanced-Mac-Programming-Core-Unix/dp/0974078514\" rel\u003d\"nofollow\"\u003eAdvanced Mac OS X Programming\u003c/a\u003e by Mark Dalrymple and Aaron Hillegass .\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eStuff you should read on this site:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/debugging-on-os-x\"\u003eMac debugging tips\u003c/a\u003e - a page with details pertaining to debugging Chrome on Mac.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/mac-development"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3666565234465838331"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3666565234465838331"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3666565234465838331"}],"author":[{"name":{"$t":"Jeremy Moskovich"},"email":{"$t":"jeremy@chromium.org"}}],"sites$pageName":{"$t":"mac-development"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5028583296065317574"},"published":{"$t":"2014-11-18T23:30:21.658Z"},"updated":{"$t":"2016-06-03T00:51:48.317Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-03T00:51:46.651Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Syncing Languages and Input Methods"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h2\u003e\r\n\u003cdiv\u003eIn M41, Chromium OS \u003ca href\u003d\"https://codereview.chromium.org/312023002\" target\u003d\"_blank\"\u003estarted syncing preferences\u003c/a\u003e for languages, keyboard layouts, and extension IMEs. Because devices may have different physical keyboard layouts, as well as different available locales and input methods, changes on one device should not automatically propagate to another device. However, we still wanted to provide a convenient out-of-box experience for users who go beyond their device's default input method when they Powerwash their system or sign in to a new device.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\r\n\u003cdiv\u003eInstead of syncing input methods both ways, we send changes to input methods from the device to the sync server. This lets us \"remember\" the most recent settings without overwriting existing preferences on other machines. When a user signs in to a device for the first time, we combine the input method used to sign in with the information from the sync server, adding the user's saved input method preferences to the local preferences without overwriting any input methods already set up.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eFor instance, a user should only have to manually add the Dvorak layout to a device once. Then, we automatically add this layout to new devices for this user, without affecting devices that have already been set up. If the layout isn't available on a device, it's simply not added. In the worst case, we may add an input method that is incompatible with the hardware keyboard, but the user would still retain any input methods that they enabled before the first sync.\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Design\" /\u003eDesign\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Preferences\" /\u003ePreferences\u003c/h3\u003e\r\n\u003cdiv\u003eWe kept the original unsyncable preferences, which describe the local settings:\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003esettings.language.preferred_languages:\u003c/b\u003e enabled language IDs (e.g., \"en-US,fr,ko\")\u003c/li\u003e\r\n\u003cli\u003e\u003cb\u003esettings.language.preload_engines:\u003c/b\u003e preloaded (active) component input method IDs (e.g., \"pinyin,mozc\")\u003c/li\u003e\r\n\u003cli\u003e\u003cb\u003esettings.language.enabled_extension_imes:\u003c/b\u003e enabled extension IME IDs\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003eWe added three syncable preferences: \u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003esettings.language.preferred_languages_syncable\u003c/b\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cb\u003esettings.language.preload_engines_syncable\u003c/b\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cb\u003esettings.language.enabled_extension_imes_syncable\u003c/b\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003eDuring the first sync, the values of these preferences are merged with the local preferences above. After that, these preferences are only used to keep track of the user's latest settings. They never affect the settings on a device that has already synced. In other words, they can be thought of as one-way, syncing from the device to the sync server -- except during the first sync.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eA fourth preference was added to indicate whether the initial merging should happen: \u003cb\u003esettings.language.merge_input_methods\u003c/b\u003e. This is set to true during OOBE. After the first sync, this is always false. This ensures that devices set up before M41 won't have their input settings changed.\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-First-Sync\" /\u003eFirst Sync\u003c/h3\u003e\r\n\u003cdiv\u003e\u003ca href\u003d\"https://cs.chromium.org/chromium/src/chrome/browser/chromeos/input_method/input_method_syncer.h\" target\u003d\"_blank\"\u003echromeos::input_method::InputMethodSyncer\u003c/a\u003e was created to handle sync logic for input methods. After the first ever sync, MergeSyncedPrefs adds the IME settings from the syncable prefs to the local prefs using the following algorithm for each pref:\u003c/div\u003e\r\n\u003col\u003e\u003cli\u003eAppend unique tokens from the syncable pref to the local pref.\u003c/li\u003e\r\n\u003cli\u003eSet the syncable pref equal to the merged list.*\u003c/li\u003e\r\n\u003cli\u003eRemove tokens corresponding to values not available on this system.\u003c/li\u003e\r\n\u003cli\u003eSet the local pref equal to this validated list.\u003c/li\u003e\u003c/ol\u003e\r\n\u003cdiv\u003eMergeSyncedPrefs also sets merge_input_methods to false, ensuring that it won't be called again.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNotice that this solution doesn't assume the first sync happens right after OOBE. For cases where users have set encryption passphrases, they could easily add languages and input methods before enabling sync, so we support arbitrary lists instead of single values during the merge.\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Updates\" /\u003eUpdates\u003c/h3\u003e\r\n\u003cdiv\u003eWhen a local input method pref changes, InputMethodSyncer updates the syncable prefs to correspond to the local pref values.* We update all three prefs at the same time to ensure the settings are consistent -- since these will be the values used the next time the user completes OOBE, the languages should correspond to the input methods.\u003c/div\u003e\u003cbr /\u003e\r\n\u003cdiv\u003e* For preload_engines_syncable (input method IDs), we transform the list to use legacy component IDs so the preference can sync between Chrome OS and Chromium OS. During first sync, we convert this back to locally valid component IDs.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5028583296065317574"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5028583296065317574"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5028583296065317574"}],"author":[{"name":{"$t":"Michael Giuffrida"},"email":{"$t":"michaelpg@chromium.org"}}],"sites$pageName":{"$t":"syncing-input-methods"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6171195031263283104"},"published":{"$t":"2016-06-02T00:50:23.513Z"},"updated":{"$t":"2016-06-02T01:20:06.082Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-06-02T01:20:06.067Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"SourcePowerRule.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6171195031263283104"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1435735528477792232"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6171195031263283104"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6171195031263283104"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6171195031263283104"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6171195031263283104"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"Wil7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6971546035595074427"},"published":{"$t":"2015-10-02T21:42:53.871Z"},"updated":{"$t":"2016-05-29T17:00:22.927Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-29T17:00:19.816Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"LibFuzzer"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Moved-to-here.\" /\u003eMoved to \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/testing/libfuzzer/README.md\"\u003ehere\u003c/a\u003e.\u003c/h2\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1447271005938918470"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/libfuzzer"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6971546035595074427"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6971546035595074427"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6971546035595074427"}],"author":[{"name":{"$t":"Mike Aizitsky"},"email":{"$t":"aizatsky@chromium.org"}}],"sites$pageName":{"$t":"libfuzzer"},"sites$revision":{"$t":"53"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7558198276238605752"},"published":{"$t":"2015-04-08T16:55:49.854Z"},"updated":{"$t":"2016-05-27T17:27:21.977Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-04-08T16:55:49.877Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#filecabinet","label":"filecabinet"}],"title":{"$t":"PLTP"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5839539150440436229"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/power-testing/pltp"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7558198276238605752"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7558198276238605752"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7558198276238605752"}],"author":[{"name":{"$t":"Todd Broch"},"email":{"$t":"tbroch@chromium.org"}}],"gd$feedLink":{"href":"https://sites.google.com/feeds/content/chromium.org/dev?parent\u003d7558198276238605752"},"sites$pageName":{"$t":"pltp"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2869066291316238837"},"published":{"$t":"2016-05-20T22:41:54.143Z"},"updated":{"$t":"2016-05-20T22:41:54.190Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-20T22:41:54.143Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen Shot 2016-05-20 at 15.41.22.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2869066291316238837"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3052022592259397387"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/security-sheriff/Screen%20Shot%202016-05-20%20at%2015.41.22.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2869066291316238837"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2869066291316238837"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2869066291316238837"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2869066291316238837"}],"author":[{"name":{"$t":"Lucas Garron"},"email":{"$t":"lgarron@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1206125349347793641"},"published":{"$t":"2008-11-10T21:33:41.359Z"},"updated":{"$t":"2016-05-20T01:33:18.336Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-20T01:33:15.732Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tab to Search"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003eAmong the many features Chromium's Omnibox offers is the ability to search a site without navigating to the sites homepage. Once Chromium has determined it can search a site, any time the user types the URL of the site into the Omnibox the user is offered the ability to search the site. Once the user presses tab, then types in a string and presses the enter, the site is searched and the results shown to the user. It's important to note the search is done by the site itself, not Google or Chromium.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nChromium provides two heuristics that automatically add a site to the list of searchable sites. The following describes these heuristics:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n1. On your site's homepage provide a link to an \u003ca href\u003d\"http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document\" rel\u003d\"nofollow\"\u003eOpenSearch description document\u003c/a\u003e. The link to the OSDD is placed in the head of the html file. For example:\u003cbr /\u003e\r\n\u003cpre\u003e\u0026lt;head\u0026gt;\r\n \u0026lt;link type\u003d\"application/opensearchdescription+xml\" rel\u003d\"search\"\r\n href\u003d\"url_of_osdd_file\"/\u0026gt;\r\n\u0026lt;/head\u0026gt;\r\n\u003c/pre\u003e\r\n\r\nThe important part of this document is the URL used to search your site. The following is an example that contains the bare minimum needed, see the \u003ca href\u003d\"http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document\" rel\u003d\"nofollow\"\u003eOpenSearch description document specification\u003c/a\u003e for the list of values you can specify.\r\n\r\n\u003cpre\u003e\u0026lt;?xml version\u003d\"1.0\"?\u0026gt;\r\n\u0026lt;OpenSearchDescription xmlns\u003d\"\u003ca href\u003d\"http://a9.com/-/spec/opensearch/1.1/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(42,93,176)\" target\u003d\"_blank\"\u003ehttp://a9.com/-/spec/opensearch/1.1/\u003c/a\u003e\"\u0026gt;\r\n \u0026lt;ShortName\u0026gt;Search My Site\u0026lt;/ShortName\u0026gt;\r\n \u0026lt;Description\u0026gt;Search My Site\u0026lt;/Description\u0026gt;\r\n \u0026lt;Url type\u003d\"text/html\" method\u003d\"get\" template\u003d\"\u003ca href\u003d\"http://my_site/%7BsearchTerms%7D\" rel\u003d\"nofollow\" style\u003d\"color:rgb(42,93,176)\" target\u003d\"_blank\"\u003ehttp://my_site/{searchTerms}\u003c/a\u003e\"/\u0026gt;\r\n\u0026lt;/OpenSearchDescription\u0026gt;\r\n\u003c/pre\u003e\r\n\r\nWhen the user presses enter in the Omnibox the string {searchTerms} in the url is replaced with the string the user typed.\u003c/span\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003eYou can also include a suggestion service by adding another URL element with rel\u003d\"suggestions\" such as: \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e \u0026lt;Url type\u003d\"application/json\" rel\u003d\"suggestions\" template\u003d\"http://my_site/suggest?q\u003d{searchTerms}\" /\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you include this, the omnibox will use your suggestion service to provide query suggestions based on the user's partial query.\u003c/font\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n2. If the site does not provide a link to an OpenSearch description document but the user submits a form, then Chrome automatically adds the site to the list of searchable sites. There are a number of restrictions with this approach though. In particular the form must generate a GET, must result in a HTTP url, and the form must not have OnSubmit script. Additionally there must be only one input element of type text, no passwords, files or text areas and all other input elements must be in their default state.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFor 1 and 2 Chromium only adds sites that the user navigated to without a path. For example \u003ca href\u003d\"http://mysite.com/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(42,93,176)\" target\u003d\"_blank\"\u003ehttp://mysite.com\u003c/a\u003e, but not \u003ca href\u003d\"http://mysite.com/foo\" rel\u003d\"nofollow\" style\u003d\"color:rgb(42,93,176)\" target\u003d\"_blank\"\u003ehttp://mysite.com/foo\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/tab-to-search"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1206125349347793641"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1206125349347793641"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1206125349347793641"}],"author":[{"name":{"$t":"Scott Violet"},"email":{"$t":"sky@chromium.org"}}],"sites$pageName":{"$t":"tab-to-search"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2092310125697550176"},"published":{"$t":"2016-05-12T02:19:04.830Z"},"updated":{"$t":"2016-05-12T02:19:41.032Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-12T02:19:39.029Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Blink gardening"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis page has moved (there's no more Blink gardening!). See \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/blink/sheriffing\"\u003eHandling Blink failures\u003c/a\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2023764670965291136"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/blink/blink-gardening"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2092310125697550176"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2092310125697550176"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2092310125697550176"}],"author":[{"name":{"$t":"Dirk Pranke"},"email":{"$t":"dpranke@chromium.org"}}],"sites$pageName":{"$t":"blink-gardening"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"XSl7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4610229329751924702"},"published":{"$t":"2012-12-07T19:14:28.423Z"},"updated":{"$t":"2016-05-10T18:40:35.363Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-10T18:40:33.898Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Developing PNaCl"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:400px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Prerequisites\"\u003e\u003cstrong\u003e1 \u003c/strong\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Get-the-Native-Client-Source\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eGet the Native Client Source\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Prebuilt-binaries\"\u003e\u003cstrong\u003e3 \u003c/strong\u003ePrebuilt binaries\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Sanity-Check:-Compiling-a-test-program-with-the-prebuilt-toolchain\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eSanity Check: Compiling a test program with the prebuilt toolchain\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-a-PNaCl-toolchain-with-SCons\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eTesting a PNaCl toolchain with SCons\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Other-Compiler-Tests\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eOther Compiler Tests\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-LLVM-regression-tests\"\u003e\u003cstrong\u003e6.1 \u003c/strong\u003eLLVM regression tests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-GCC-Torture-tests\"\u003e\u003cstrong\u003e6.2 \u003c/strong\u003eGCC Torture tests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-LLVM-Test-Suite\"\u003e\u003cstrong\u003e6.3 \u003c/strong\u003eLLVM Test Suite\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Spec2k\"\u003e\u003cstrong\u003e6.4 \u003c/strong\u003eSpec2k\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Subzero-standalone-tests\"\u003e\u003cstrong\u003e6.5 \u003c/strong\u003eSubzero standalone tests\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Toolchain-Development\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eToolchain Development\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-TL-DR-for-checking-out-PNaCl-sources-building-and-testing\"\u003e\u003cstrong\u003e7.1 \u003c/strong\u003eTL;DR for checking out PNaCl sources, building and testing\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Important-Scripts\"\u003e\u003cstrong\u003e7.2 \u003c/strong\u003eImportant Scripts\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-toolchain_build-toolchain_build_pnacl.py\"\u003e\u003cstrong\u003e7.2.1 \u003c/strong\u003etoolchain_build/toolchain_build_pnacl.py\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Sandboxed-translator-build-\"\u003e\u003cstrong\u003e7.2.2 \u003c/strong\u003eSandboxed translator build \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-pnacl-test.sh-\"\u003e\u003cstrong\u003e7.2.3 \u003c/strong\u003epnacl/test.sh \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-pnacl-driver-\"\u003e\u003cstrong\u003e7.2.4 \u003c/strong\u003epnacl/driver/*\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Process-for-making-changes-to-the-PNaCl-toolchain-\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eProcess for making changes to the PNaCl toolchain \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-How-to-send-out-reviews-for-git-repos\"\u003e\u003cstrong\u003e9 \u003c/strong\u003eHow to send out reviews for git repos\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Update-stable-revisions-in-the-pnacl-COMPONENT_REVISIONS-test-review-and-submit-\"\u003e\u003cstrong\u003e9.1 \u003c/strong\u003eUpdate stable revisions in the pnacl COMPONENT_REVISIONS, test, review and submit \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Change-the-native-client-pnacl_newlib.json-file-test-review-and-submit-\"\u003e\u003cstrong\u003e9.2 \u003c/strong\u003eChange the native client pnacl_newlib.json file, test, review and submit \u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Misc-Notes\"\u003e\u003cstrong\u003e9.3 \u003c/strong\u003eMisc Notes\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003e\u003cfont color\u003d\"#ff0000\"\u003eThis page is intended for developers making changes to the PNaCl tools.\u003c/font\u003e If you just want to build PNaCl-based applications, see the \u003ca href\u003d\"https://developers.google.com/native-client/dev/overview\"\u003eNative Client developer documentation\u003c/a\u003e. If you just want to build the toolchain, e.g. to package PNaCl or Chromium with NaCl support, see the shorter document on \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers\"\u003ebuilding\u003c/a\u003e.\u003c/font\u003e\u003c/b\u003e\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Prerequisites\" /\u003ePrerequisites\u003c/h2\u003e\u003cdiv\u003eIn addition to what is needed to [build nacl], several packages may need to be installed on your system. For Ubuntu systems, e.g.:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode style\u003d\"font-size:13.3333px\"\u003esudo apt-get install git cmake texinfo flex bison\u003c/code\u003e\u003cspan style\u003d\"font-size:13.3333px;color:rgb(0,96,0);font-family:monospace;line-height:13.3333px\"\u003e ccache g++ \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003eg++-multilib \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003egcc-arm-linux-gnueabihf\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:13.3333px;color:rgb(0,96,0);font-family:monospace\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:13.3333px;color:rgb(0,96,0);font-family:monospace\"\u003eg++-arm-linux-gnueabihf\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003etest -e /usr/include/asm || sudo ln -s /usr/include/asm-generic /usr/include/asm\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Get-the-Native-Client-Source\" /\u003eGet the Native Client Source\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eTo build the PNaCl toolchain, you will need to check out the entire native client project \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/nativeclient/how-tos/how-to-use-git-svn-with-native-client\" style\u003d\"font-size:10pt\"\u003ewith git\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e. After that:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003ecd $NACL_DIR/native_client\u003c/code\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt\"\u003eOnce you have the native client project checked out, you can \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/nativeclient/pnacl/developing-pnacl#TOC-TL-DR-for-checking-out-PNaCl-sources-building-and-testing\"\u003echeck out the PNaCl sources\u003c/a\u003e\u003c/span\u003e.\u003cbr /\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Prebuilt-binaries\" /\u003ePrebuilt binaries\u003c/h2\u003ePre-built binaries for PNaCl are downloaded from the DEPS file by gclient, and are located in one of these directories, depending upon your architecture and operating system. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003etoolchain/linux_x86/pnacl_newlib_raw\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003etoolchain/mac_x86/pnacl_newlib_raw\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003etoolchain/win_x86/pnacl_newlib_raw\u003c/code\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eIf you want to use these binaries outside of Scons, you must build and install the SDK libraries. This installs the libraries such as libnacl from the NaCl repo that go into the SDK and are needed to link programs without any special flags. \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e(Note that this does not install the Pepper libraries, as those come from the Chromium repository):\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003epnacl/build.sh sdk\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Sanity-Check:-Compiling-a-test-program-with-the-prebuilt-toolchain\" /\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont size\u003d\"4\"\u003eSanity Check: Compiling a test program with the prebuilt toolchain\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003eAt this point, you probably want to test if the pre-built toolchain works. Let's start by creating a \"hello world\" program:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e#include \u0026lt;stdio.h\u0026gt;\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003eint main(int argc, const char *argv[]) {\u003c/code\u003e\u003cbr /\u003e\u003ccode\u003e printf(\"Hello World!\\n\");\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e return 0;\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd the PNaCl toolchain to your path for convenience, if desired:\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003ePATH\u003d${PATH}:toolchain/linux_x86/pnacl_newlib/bin # Adjust the name for your system \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNow compile hello.c:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003epnacl-clang hello.c -o hello.nonfinal.pexe\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003epnacl-finalize hello.nonfinal.pexe -o hello.pexe\u003c/font\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003e(NOTE: If you get an error about missing crt1.o or -lnacl, you must run the SDK install step. See the installation instructions in the previous section.)\u003cdiv\u003e\u003cbr /\u003e\u003cdiv\u003eYou have now produced a \"pexe\", a PNaCl bitcode application. To run this pexe, it must be first translated to native code. Let's translate it to X86-32, X86-64 and ARM.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003epnacl-translate -arch x86-32 hello.pexe -o hello_x86_32.nexe\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003epnacl-translate -arch x86-64 hello.pexe -o hello_x86_64.nexe\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003epnacl-translate -arch arm hello.pexe -o hello_arm.nexe\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNow you have 3 native executables, one for each architecture. To run them inside of \u003ccode\u003esel_ldr\u003c/code\u003e, use the helper script, \u003ccode\u003enative_client/run.py\u003c/code\u003e:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e./run.py hello_x86_32.nexe\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./run.py hello_x86_64.nexe\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./run.py hello_arm.nexe # By default it will look for qemu to run the ARM nexe.\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-a-PNaCl-toolchain-with-SCons\" /\u003eTesting a PNaCl toolchain with SCons\u003c/h2\u003e\u003cdiv\u003eTo use the PNaCl toolchain with the native client scons tests, just specify \"bitcode\u003d1\" on the command-line.\u003c/div\u003e\u003cdiv\u003eSome sample command lines:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003darm bitcode\u003d1 # build everything\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003darm bitcode\u003d1 smoke_tests # run smoke_tests\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-32 bitcode\u003d1 \u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e # build everything\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-32 bitcode\u003d1 smoke_tests\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e # run smoke_tests\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-64 bitcode\u003d1 \u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e # build everything\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-64 bitcode\u003d1 smoke_tests\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e # run smoke_tests\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e./scons -j32 -k --verbose ... # parallelize, don't abort on first error, verbose output\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e./scons platform\u003d... bitcode\u003d1 use_sz\u003d1 ... # run using pnacl-sz instead of pnacl-llc\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cp\u003eThe scons tests are more conveniently wrapped in a testing script:\u003c/p\u003e\u003cdiv style\u003d\"line-height:13px\" /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-x86-32 # Runs the smoke tests as above, plus nonpexe_tests\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-x86-64\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-arm\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-x86-32-sbtc # Runs the same tests, but with the sandboxed translator\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-x86-64-sbtc\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"line-height:13px\"\u003e\u003ccode\u003epnacl/test.sh test-arm-sbtc\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Other-Compiler-Tests\" /\u003eOther Compiler Tests\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-LLVM-regression-tests\" /\u003eLLVM regression tests\u003c/h3\u003e\u003cdiv\u003eThese tests can be run directly by running 'make check' in the build directory (pnacl/build/llvm_x86_64). There are currently a few known failures which are not marked as XFAIL in the usual LLVM way, so instead the regression tests can also be run in the following way, which will ignore the known failures. (This only works after you have built the PNaCl LLVM and have the build directory available).\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003epnacl/scripts/llvm-test.py --llvm-regression\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eThe LLVM regression tests run quickly and should be run before every LLVM commit, along with the scons tests.\u003c/div\u003e\u003cdiv\u003eThe following tests take longer and are generally not run by the developers on every commit, but they should be run for large changes, and are run on the toolchain testing bots on every commit.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-GCC-Torture-tests\" /\u003eGCC Torture tests\u003c/h3\u003e\u003cdiv\u003eTo run the gcc torture test suite against PNaCl, do the following:\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003etools/toolchain_tester/torture_test.py pnacl x86-64 --concurrency\u003d12\u003c/code\u003e\u003c/div\u003eOther options are documented in torture_test.py and tools/toolchain_tester/toolchain_tester.py\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-LLVM-Test-Suite\" /\u003eLLVM Test Suite\u003c/h3\u003e\u003cdiv\u003eTo run the LLVM test suite against PNaCl, do\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003epnacl/scripts/llvm-test.py --testsuite-all --arch x86-64\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eThis is equivalent to\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003epnacl/scripts/llvm-test.py --testsuite-prereq --arch x86-64\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cdiv\u003epnacl/scripts/llvm-test.py --testsuite-clean\u003c/div\u003e\u003cdiv\u003epnacl/scripts/llvm-test.py --testsuite-configure\u003c/div\u003e\u003cdiv\u003epnacl/scripts/llvm-test.py --testsuite-run --arch x86-64\u003c/div\u003e\u003cdiv\u003epnacl/scripts/llvm-test.py --testsuite-report --arch x86-64\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eThe test suite needs to be cleaned and re-configured each time you switch architectures, but the results files persist after cleaning, so testsuite-report will give the result from the last run for that architecture. Because there is no good way to filter the set of tests that are actually run and there are a lot of known failures (e.g. tests that have not been ported to use newlib), this test suite takes a long time to run.\u003c/p\u003e\u003cp\u003eYou need to set LD_LIBRARY_PATH before running the test suite, otherwise the native build of each test, whose output the PNaCl build is validated against, will fail to run. It's also helpful to set PNACL_CONCURRENCY.\u003c/p\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eLD_LIBRARY_PATH\u003d$NACL_DIR/native_client/toolchain/linux_x86/pnacl_newlib/lib PNACL_CONCURRENCY\u003d12 pnacl/scripts/llvm-test.py --testsuite-all --arch x86-64\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Spec2k\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eSpec2k\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003eIf you have access to the spec2k benchmark suite you can use the harness in tests/spec2k/ to run some more extensive tests.\u003c/div\u003e\u003cdiv\u003eIf SPEC_DIR is the directory containing the benchmark code/data, run:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"line-height:14px\"\u003e\u003cdiv\u003e\u003ccode\u003epnacl/test.sh test-spec \u0026lt;SPEC_DIR\u0026gt; SetupPnaclX8664Opt\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003etest.sh is a convenience script and clobbers old results, etc. The actual steps are:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"line-height:14px\"\u003e\u003cdiv\u003e\u003ccode\u003epushd tests/spec2k\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./run_all.sh CleanBenchmarks\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./run_all.sh PopulateFromSpecHarness \u0026lt;SPEC_DIR\u0026gt;\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./run_all.sh TimedBuildAndRunBenchmarks SETUP\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003epopd\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003ewhere SETUP is for example \"SetupPnaclArmOpt\". See \"run_all.sh\" for a full list of setups.\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Subzero-standalone-tests\" /\u003eSubzero standalone tests\u003c/h3\u003e\u003cdiv\u003eThese tests depend on having built PNaCl's branch of LLVM from source (uses some of the headers, etc.). See \"checking out PNaCl sources, building and testing\" below.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn general look at the Makefile.standalone file for various targets and options. E.g., you can compile with DEBUG\u003d1 while debugging, so that variables aren't optimized-out and functions aren't so inlined, etc.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-size:12.8000001907349px\" /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-size:12.8000001907349px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003ccode\u003ecd toolchain_build/src/subzero\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(34,34,34);font-size:12.8000001907349px\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003ccode\u003emake -j32 -f \u003c/code\u003e\u003cspan\u003e\u003ccode\u003eMakefile\u003c/code\u003e\u003c/span\u003e\u003ccode\u003e.\u003c/code\u003e\u003cspan\u003e\u003ccode\u003estandalone\u003c/code\u003e\u003c/span\u003e\u003ccode\u003e check\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Toolchain-Development\" /\u003eToolchain Development\u003c/h2\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-TL-DR-for-checking-out-PNaCl-sources-building-and-testing\" /\u003eTL;DR for checking out PNaCl sources, building and testing\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eIf you are using Chromium's build of clang to build PNaCl (the default) and you have never done so, you need to install it.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333330154419px\"\u003eFrom the native_client/ directory:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e../tools/clang/scripts/update.py\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFrom now on, when you run 'gclient sync' clang will also be updated if needed.\u003c/div\u003e\u003cdiv\u003eNow you can build the PNaCl toolchain:\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003etoolchain_build/toolchain_build_pnacl.py --verbose --sync --clobber --install toolchain/linux_x86/pnacl_newlib_raw\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003erm -rf \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003etoolchain/linux_x86/pnacl_newlib\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003eln -s \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003epnacl_newlib_raw \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003etoolchain/linux_x86/pnacl_newlib\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e# syncs the sources and builds the developer toolchain\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e# Add the --build-sbtc flag to also build the sandboxed translator\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003eIf everything built correctly, run the scons tests as described above.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Important-Scripts\" /\u003eImportant Scripts\u003c/h3\u003e\u003cdiv\u003eMost tasks related to the toolchains are focused a few scripts.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ethe driver scripts in the directory: \u003ccode\u003epnacl/driver/\u003c/code\u003e\u003c/li\u003e\u003cli\u003ethe toolchain builder and helper script: \u003ccode\u003etoolchain_build/toolchain_build_pnacl.py\u003c/code\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003ethe old toolchain build script, still used for the sandboxed translator: \u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003epnacl/build.sh\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-toolchain_build-toolchain_build_pnacl.py\" /\u003etoolchain_build/toolchain_build_pnacl.py\u003c/h4\u003e\u003cdiv\u003eThis script checks out and builds the complete PNaCl toolchain. Run with the -h flag for a full list of flags and build targets. Here are the most important flags:\u003c/div\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e\u003cspan style\u003d\"line-height:13px\"\u003eoptional arguments:\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333330154419px;line-height:13.3333320617676px\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\" size\u003d\"3\"\u003e--build-sbtc Build the sandboxed translators\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003e...\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003e\u003cbr /\u003e\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"courier new, monospace\" size\u003d\"3\"\u003e\u003ccode\u003eUsage: toolchain_build_pnacl.py [options] [targets...]\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:13px;color:rgb(0,96,0);font-family:monospace;font-size:medium\"\u003e...\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003ccode\u003e\u003cdiv\u003eOptions:\u003c/div\u003e\u003cdiv\u003e -h, --help show this help message and exit\u003c/div\u003e\u003cdiv\u003e -v, --verbose Produce more output.\u003c/div\u003e\u003cdiv\u003e -c, --clobber Clobber working directories before building.\u003c/div\u003e\u003cdiv\u003e -y, --sync Run source target commands \u003cfont color\u003d\"#000000\"\u003e[i.e. sync the targets' sources before building them]\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e -i, --ignore-dependencies\u003c/div\u003e\u003cdiv\u003e Ignore target dependencies and build only the\u003c/div\u003e\u003cdiv\u003e specified target.\u003c/div\u003e\u003cdiv\u003e --install\u003dINSTALL After building, copy contents of build packages to the\u003c/div\u003e\u003cdiv\u003e specified directory\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/code\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Sandboxed-translator-build-\" /\u003eSandboxed translator build \u003c/h4\u003e\u003cdiv\u003eThe build.sh script is now only used to build the sandboxed translator. It has 2 relevant arguments:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003etranslator-all\u003c/b\u003e: builds the sandboxed translator nexes (not included in 'build-all' or 'all')\u003c/li\u003e\u003cli\u003e\u003cb\u003eclean\u003c/b\u003e: cleans the build files\u003c/li\u003e\u003c/ul\u003eHowever, it is called from toolchain_build_pnacl.py for the bots, and it expects to use the toolchain built by the translator_compiler target of toolchain_build_pnacl.py. Use the --build-sbtc flag of toolchain_build_pnacl.py and build everything (or just the sandboxed_translators target and its dependencies) for that.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-pnacl-test.sh-\" /\u003epnacl/test.sh \u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0px 0px 0px 40px;border:none;padding:0px\"\u003eThis script runs toolchain tests. It deletes old testing artifacts before running. The main invocation is test-all.\u003c/blockquote\u003e\u003cdiv\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-pnacl-driver-\" /\u003epnacl/driver/*\u003c/h4\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0px 0px 0px 40px;border:none;padding:0px\"\u003eThis directory contains the compiler drivers, which are in Python. If you change them, run e.g. \"toolchain_build/toolchain_build_pnacl.py --install toolchain/linux_x86/pnacl_newlib driver_i686_linux\" to install them.\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eGit Repositories\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eMost of the code required to build the PNaCl toolchain lives in git repositories hosted on chromium.googlesource.com. The build.sh script will automatically check out and update these repositories. The checked-out code is placed in toolchain_build/src.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eRelevant Directories\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"width:217px;height:19px\"\u003e toolchain_build/src\u003c/td\u003e\u003ctd style\u003d\"width:428px;height:19px\"\u003e holds all the git checkouts managed by toolchain_build_pnacl.py\u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:217px;height:15px\"\u003e toolchain/${os}_x86/pnacl_newlib\u003c/td\u003e\u003ctd style\u003d\"width:428px;height:15px\"\u003e root of PNaCl toolchain installed by package_version.py\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:217px;height:15px\"\u003e toolchain_build/out \u003c/td\u003e\u003ctd style\u003d\"width:428px;height:15px\"\u003e holds build directories for the pnacl toolchain\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:217px;height:15px\"\u003e toolchain_build/out/toolchain_build.log \u003c/td\u003e\u003ctd style\u003d\"width:428px;height:15px\"\u003e holds the logs of the builds\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Process-for-making-changes-to-the-PNaCl-toolchain-\" /\u003eProcess for making changes to the PNaCl toolchain \u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eIf you've made changes to PNaCl toolchain, either to the driver or git repositories, you can rebuild PNaCl by doing:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003e\u003cspan style\u003d\"line-height:1;font-size:10pt\"\u003etoolchain_build/toolchain_build_pnacl.py -v --install toolchain/linux_x86/pnacl_newlib_raw\u003c/span\u003e # Incrementally build and reinstall\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003epnacl/test.sh test-all # Run the scons tests\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-send-out-reviews-for-git-repos\" /\u003eHow to send out reviews for git repos\u003c/h2\u003eTo send out reviews for the git repos, you must have \u003ca href\u003d\"http://dev.chromium.org/developers/how-tos/install-depot-tools\"\u003edepot tools\u003c/a\u003e. Code reviews are sent using the \u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003egit cl\u003c/font\u003e script in depot_tools.\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eIf you are going to commit\u003c/b\u003e, you will need to have a credential in your \u003ccode\u003e~/.netrc\u003c/code\u003e file:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px\"\u003eGo to \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/new-password\" rel\u003d\"nofollow\" style\u003d\"margin:0px;padding:0px;border:0px;vertical-align:baseline;text-decoration:none;color:rgb(102,17,204);font-family:Arial,Helvetica,sans-serif;font-size:13px\" target\u003d\"_blank\"\u003ehttps://chromium.googlesource.com/new-password\u003c/a\u003e\u003c/li\u003e\u003cli\u003eLogin with your @chromium.org account.\u003c/li\u003e\u003cli\u003eFollow the instructions in the \"Staying Authenticated\" section.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe first time you set up code review you'll need to let \u003ccode\u003egit cl\u003c/code\u003e do some setup:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cfont color\u003d\"#38761d\" size\u003d\"3\" style\u003d\"background-color:rgb(243,243,243)\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003ecd toolchain_build/src/llvm\u003c/code\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/font\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003ccode\u003egit cl config\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eJust press Enter at the prompts.\u003c/div\u003e\u003cdiv\u003eTo do local development, create a new branch:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003egit checkout -b mybranch origin/master\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eThe last argument to git checkout (the start point) is important because if your local branch does not track the remote master branch, then \u003ccode\u003egit cl land\u003c/code\u003e will not work)\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eEdit your code, and commit as many times as you want:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003egit commit -a -m “comment describing changes”\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eThen use git-cl to upload to the code review site:\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb style\u003d\"font-family:Times New Roman;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e\u003cfont size\u003d\"3\"\u003egit cl upload\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eYou'll need to authenticate to codereview.chromium.org also. Most likely this will be your ldap email. This will upload the review, and give you an issue number, e.g. http://codereview.chromium.org/1557002. Go to the issue webpage, and edit the change summary, add reviewers, then hit send mail. Command line options from gcl such as reviewers (\"-r\") and send mail (\"--send_mail\") are also available with git cl.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003eGit cl associates each branch with a review issue ID. So you if you \u003ccode\u003egit cl upload\u003c/code\u003e again from the same branch, it will upload a new patch set to the same issue.\u003c/div\u003e\u003cdiv\u003eWhen you get the LGTM, you can push the changes. \u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"line-height:14px\"\u003e\u003ccode\u003egit cl land\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eIf there have been changes on the master branch since you forked your local branch, git cl may complain, in which case you should rebase it against the new HEAD before you push:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003egit fetch origin\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003egit rebase origin/master\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Update-stable-revisions-in-the-pnacl-COMPONENT_REVISIONS-test-review-and-submit-\" /\u003eUpdate stable revisions in the pnacl COMPONENT_REVISIONS, test, review and submit \u003c/h4\u003e\u003cdiv\u003eAt this point the official \u003cb\u003etoolchain builder\u003c/b\u003e is still not incorporating your changes as it builds off of specific commit IDs in the external repo.\u003c/div\u003e\u003cdiv\u003eTo fix this modify \u003cb\u003enative_client/pnacl/COMPONENT_REVISIONS\u003c/b\u003e to point at your new commit ID which look like\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"line-height:13px\"\u003e\u003ccode\u003ellvm\u003defa7b3d5c85f0242787eb091dadedc2727215df4\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eYou can then make a standard native_client change list and test the CL with trybots (CLs affecting pnacl/ will end up selecting pnacl trybots). Upload, trybot, get an LGTM, then commit. You can also test locally by cleaning the toolchain directory, rebuilding, and testing as described earlier.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOr, you can automatically update the file using a script: \u003cfont size\u003d\"3\"\u003e\u003cfont color\u003d\"#38761d\"\u003epnacl/deps_update.py\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Change-the-native-client-pnacl_newlib.json-file-test-review-and-submit-\" /\u003e\u003cb\u003eChange the native client pnacl_newlib.json file, test, review and submit \u003c/b\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eFinally, to allow users to download the new revision built by the \u003c/span\u003etoolchain builder,\u003cspan style\u003d\"font-weight:normal\"\u003e look in the \u003c/span\u003e\u003c/b\u003e\u003cspan style\u003d\"background-color:transparent\"\u003etoolchain_revisions/pnacl_newlib.json file. The current revision is in a line near the end:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:13px\"\u003e\u003ccode\u003e\"revision\": 13392,\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-weight:bold;line-height:13px\" /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUpdate this to an svn revision number that is new enough to include your COMPONENT_REVISIONS change by running:\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003ebuild/package_version/package_version.py setrevision --revision-package pnacl_newlib --revision 12345\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNow create a CL and test it with some try jobs (e.g., \u003ccode\u003egit cl try my_cl_name\u003c/code\u003e). NOTE: You will need to wait for a toolchain to be built (\u003ca href\u003d\"http://build.chromium.org/p/client.nacl.toolchain/waterfall\"\u003esee the waterfall\u003c/a\u003e) before this change actually works (downloads a toolchain tarball). Also see \u003cfont color\u003d\"#38761d\" size\u003d\"3\"\u003ebuild/update_pnacl_tool_revisions.py\u003c/font\u003e to automate this process.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Misc-Notes\" /\u003eMisc Notes\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eBuilding Validators\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003eIn the case that you want to run the native client validators on your nexes, build the validators like so:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"line-height:14px\"\u003e\u003cdiv\u003e\u003ccode\u003e./scons targetplatform\u003darm sdl\u003dnone arm-ncval-core\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-32 sdl\u003dnone ncval\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e./scons platform\u003dx86-64 sdl\u003dnone ncval\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe validators will be placed in scons-out/{host}-{platform}/staging/.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2062405729464790262"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/pnacl/developing-pnacl"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4610229329751924702"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4610229329751924702"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4610229329751924702"}],"author":[{"name":{"$t":"Derek Schuff"},"email":{"$t":"dschuff@google.com"}}],"sites$pageName":{"$t":"developing-pnacl"},"sites$revision":{"$t":"54"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/239031761262545324"},"published":{"$t":"2016-05-06T22:46:32.999Z"},"updated":{"$t":"2016-05-06T22:46:33.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-06T22:46:32.999Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"inclue-bytes-mobile.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/239031761262545324"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/inclue-bytes-mobile.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/239031761262545324"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/239031761262545324"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/239031761262545324"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/239031761262545324"}],"author":[{"name":{"$t":"David Benjamin"},"email":{"$t":"davidben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5619276014451965615"},"published":{"$t":"2016-05-06T22:34:07.964Z"},"updated":{"$t":"2016-05-06T22:37:43.817Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-06T22:37:43.799Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"start-logging-to-disk.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5619276014451965615"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7356854172176759459"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/for-testers/providing-network-details/start-logging-to-disk.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5619276014451965615"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5619276014451965615"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5619276014451965615"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5619276014451965615"}],"author":[{"name":{"$t":"David Benjamin"},"email":{"$t":"davidben@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8065537843372370187"},"published":{"$t":"2016-05-02T22:52:40.213Z"},"updated":{"$t":"2016-05-06T22:08:27.430Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-06T22:08:26.141Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Firmware Management Parameters"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-s-in-the-FWMP-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eWhat's in the FWMP?\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Setting-the-FWMP\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eSetting the FWMP\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Removing-the-FWMP\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eRemoving the FWMP\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-I-Can-t-Get-Into-Developer-Mode\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eI Can't Get Into Developer Mode\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003eFirmware Management Parameters (aka FWMP) are optional settings that can be stored in the TPM to control some aspects of developer mode for developers and system administrators.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-What-s-in-the-FWMP-\" /\u003eWhat's in the FWMP?\u003c/h2\u003e\u003cdiv\u003eThe FWMP contains a set of flags and an optional developer key hash.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe flags are as follows:\u003c/div\u003e\u003cdiv\u003e\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-color:rgb(136,136,136);border-width:1px\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:14px\"\u003e Flag\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:14px\"\u003eName \u003c/td\u003e\u003ctd style\u003d\"width:893px;height:14px\"\u003eMeaning \u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:57px\"\u003e 0x01\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:57px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_DISABLE_BOOT\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:57px\"\u003eDisable developer mode. If this flag is set, booting the device in developer mode will take you straight to the TONORM screen, which asks you to confirm turning developer mode off.\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:14px\"\u003e 0x02\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:14px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_DISABLE_RECOVERY\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:14px\"\u003eDisable developer features of recovery images.\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:29px\"\u003e 0x04\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:29px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_ENABLE_USB\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:29px\"\u003eEnable Ctrl+U to boot from USB.\u003cbr /\u003eSame effect as 'crossystem dev_boot_usb\u003d1'\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:29px\"\u003e 0x08\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:29px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_ENABLE_LEGACY\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:29px\"\u003eEnable Ctrl+L to boot from legacy OS\u003cbr /\u003eSame effect as 'crossystem dev_boot_legacy\u003d1'\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:43px\"\u003e 0x10\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:43px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_ENABLE_OFFICIAL_ONLY\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:43px\"\u003eOnly accept developer images signed with the official Chrome OS key.\u003cbr /\u003eSame effect as 'crossystem dev_boot_signed_only\u003d1'\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:61px;height:58px\"\u003e 0x20\u003c/td\u003e\u003ctd style\u003d\"width:270px;height:58px\"\u003e \u003cspan style\u003d\"font-size:13.3333px\"\u003eFWMP_DEV_USE_KEY_HASH\u003c/span\u003e\u003c/td\u003e\u003ctd style\u003d\"width:893px;height:58px\"\u003eOnly accept developer images signed a specific key. If this is set, the SHA-256 digest of the kernel key data is compared with the digest stored in the FWMP. This enables you to decide what developer images will boot on your device, instead of blindly trusting them all. Particularly handy when combined with FWMP_DEV_ENABLE_USB.\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe key hash is the SHA-256 of the key data for the kernel key. There isn't a tidy way to extract this from a keyblock yet; coming soon.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Setting-the-FWMP\" /\u003eSetting the FWMP\u003c/h2\u003e\u003cdiv\u003eUse cryptohome to set the FWMP. To do this, the TPM must just have been owned, or you must know the owner password:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003ecryptohome --action\u003dset_firmware_management_parameters --flags\u003d{flags_as_decimal_or_0xhex} [--developer_key_hash\u003d{hash_as_hex_string}]\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo remove the FWMP:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003ecryptohome --action\u003dremove_\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003efirmware_management_parameters\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnd, of course, you can see what it contains; this works even if you don't know the owner password:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003ecryptohome --action\u003dget_\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003efirmware_management_parameters\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSystem administrators can automatically set the FWMP on enterprise-enrolled devices during the initial device enrollment.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Removing-the-FWMP\" /\u003eRemoving the FWMP\u003c/h2\u003e\u003cdiv\u003eIf you have somehow locked yourself out of your system - say, by setting FWMP_DEV_DISABLE_BOOT, or by setting FWMP_DEV_USE_KEY_HASH but specifying the wrong hash, all is not lost.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf your Chrome OS device is NOT enterprise-enrolled, disable developer mode, recovery your system to a fresh state, then log in. That will automatically remove the FWMP. And whatever else was on your system.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf your Chrome OS device is enterprise-enrolled, see your system administrator.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-I-Can-t-Get-Into-Developer-Mode\" /\u003eI Can't Get Into Developer Mode\u003c/h2\u003e\u003cdiv\u003eIf you've enabled developer mode, and you're getting this warning at boot time:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003eDeveloper mode is disabled on this device by system policy.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eFor more information, see http://dev.chromium.org/chromium-os/fwmp\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ethat's because FWMP_DEV_DISABLE_BOOT is set. See the previous section on removing the FWMP.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/fwmp"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8065537843372370187"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8065537843372370187"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8065537843372370187"}],"author":[{"name":{"$t":"Randall Spangler"},"email":{"$t":"rspangler@chromium.org"}}],"sites$pageName":{"$t":"fwmp"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"Wyl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8792129383300950901"},"published":{"$t":"2013-06-19T03:32:10.279Z"},"updated":{"$t":"2016-05-05T19:49:21.740Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-05-05T19:49:19.928Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Telemetry: Profiling"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"text-align:left;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:350px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tracing\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTracing\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-CPU-Profiling---Linux-Android-and-Mac\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eCPU Profiling - Linux / Android and Mac\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Linux-Android\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eLinux / Android\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-perf\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eperf\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-You-may-find-it-useful-to-install-a-copy-of-perf-from-your-distro-s-repository-and-use-that-instead-of-the-included-perfhost-binary-e.g.-for-additional-UI-options-as-long-as-you-use-the-flags-Telemetry-suggests.\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eYou may find it useful to install a copy of perf from your distro's repository and use that instead of the included perfhost binary (e.g. for additional UI options), as long as you use the flags Telemetry suggests.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-VTune\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eVTune\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-gprof\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003egprof\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-systrace\"\u003e\u003cstrong\u003e2.6 \u003c/strong\u003esystrace\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Mac\"\u003e\u003cstrong\u003e2.7 \u003c/strong\u003eMac\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Memory-Profiling---Linux-Android\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eMemory Profiling - Linux / Android\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Linux-Android-C-C-\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eLinux / Android (C/C++)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Android-Memory-Report\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eAndroid Memory Report\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Android-Java\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eAndroid Java\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Network-Profiling---Linux-Android\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eNetwork Profiling - Linux / Android\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Linux-Android1\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eLinux / Android\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Manual-Profiling---Android\"\u003e\u003cstrong\u003e5 \u003c/strong\u003e\"Manual\" Profiling - Android\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cspan style\u003d\"font-family:Arial;font-size:15px;white-space:pre-wrap;line-height:1.15;background-color:transparent\"\u003e\u003cb style\u003d\"color:rgb(255,0,0)\"\u003eWarning: \u003c/b\u003eUse these directions at your own risk: \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap;line-height:1.15\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:transparent\"\u003e--profiler \u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"background-color:transparent\"\u003eis deprecated and \u003c/font\u003e\u003cfont\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/tools/telemetry/telemetry/core/platform/tracing_controller.py\" style\u003d\"font-family:courier new,monospace;background-color:rgb(238,238,238)\"\u003eplatform/tracing_controller.py\u003c/a\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"background-color:rgb(255,255,255)\"\u003e should be used instead for scenarios requiring long-term support for profiling data collection.\u003c/font\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003cspan\u003e\r\n\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Tracing\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTracing\u003c/span\u003e\u003c/h2\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOn all platforms, Telemetry can gather an \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eabout:tracing\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e trace for each page in the page_set. To do so, simply pass the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003dtrace\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e flag. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003dtrace page_cycler tools/perf/page_sets/typical_25.json \u003c/code\u003e\u003cbr /\u003e\r\n\u003cdiv /\u003e\r\n\u003c/div\u003e\r\n\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\r\nInstructions for opening the results will be printed.\u003c/font\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-CPU-Profiling---Linux-Android-and-Mac\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCPU Profiling - Linux / Android and Mac\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Linux-Android\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLinux / Android\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"font-weight:normal;background-color:transparent;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eIn order for Linux profilers to display call graph information correctly, it is necessary to first build with \u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;background-color:transparent;font-size:15px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eprofiling\u003d1\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;background-color:transparent;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e (GYP) or \u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-size:15px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003eenable_profiling \u003d true\u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;background-color:transparent;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e (GN). To do so:\u003c/span\u003e\u003c/p\u003e\r\n\u003c/span\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ # Linux (GYP)\u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e$ GYP_DEFINES\u003d'profiling\u003d1' gclient runhooks \u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e$ ninja -C out/Release chrome\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\r\n$ # Android (GYP)\u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e$ GYP_DEFINES\u003d\"OS\u003dandroid profiling\u003d1 release_extra_cflags\u003d-fno-omit-frame-pointer disable_pie\u003d1\" \\\u003cbr /\u003e gclient runhooks\u003cbr /\u003e\u003cspan style\u003d\"font-size:13.3333px;line-height:13.3333px\"\u003e$ ninja -C out/Release chrome_public_apk\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e$ # GN\u003cbr /\u003e$ gn args out/Profiling\u003cbr /\u003e# include \"enable_profiling \u003d true\"\u003cbr /\u003e$ export CHROMIUM_OUTPUT_DIR\u003d\"$PWD/out/Profiling\"\u003c/code\u003e\u003cbr /\u003e\r\n\u003ccode\u003e$ ninja -C out/Profiling chrome_public_apk\u003c/code\u003e\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-perf\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eperf\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"background-color:transparent;font-weight:normal;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003eOn Linux and Android, Telemetry can gather a \u003c/span\u003e\u003ca href\u003d\"https://perf.wiki.kernel.org/index.php/Tutorial\" style\u003d\"line-height:1.15;background-color:transparent;font-size:10pt;font-weight:normal;text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eperf\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:normal;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e profile for each page in the page_set. To do so, pass the \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:normal;font-size:15px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:normal;font-size:15px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003dperf\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-weight:normal;font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap\"\u003e flag. For example:\u003c/span\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003dperf kraken\u003c/code\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eInstructions for opening the results will be printed.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf the page_set you are profiling includes cross-origin navigations, it is necessary to pass \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--page-repeat\u003d2\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e so that renderer process is not swapped out mid-profile on the second run. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003dperf --page-repeat\u003d2 page_cycler tools/perf/page_sets/intl_ar_fa_he.json\u003c/code\u003e\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-You-may-find-it-useful-to-install-a-copy-of-perf-from-your-distro-s-repository-and-use-that-instead-of-the-included-perfhost-binary-e.g.-for-additional-UI-options-as-long-as-you-use-the-flags-Telemetry-suggests.\" /\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;font-weight:normal;white-space:pre-wrap\"\u003eYou may find it useful to install a copy of perf from your distro's repository and use that instead of the included perfhost binary (e.g. for additional UI options), as long as you use the flags Telemetry suggests.\u003c/span\u003e\u003c/font\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-VTune\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eVTune\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal;vertical-align:baseline;background-color:transparent\"\u003eOn x86 builds (including Android on x86) Telemetry can collect an \u003ca href\u003d\"https://software.intel.com/en-us/intel-vtune-amplifier-xe\" rel\u003d\"nofollow\"\u003eIntel VTune\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal;vertical-align:baseline;background-color:transparent\"\u003e profile for each page in the page_set. This requires VTune to be installed on your home system. To collect a profile, pass the \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal;font-family:Courier New;vertical-align:baseline;background-color:transparent\"\u003e--profiler\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal;font-family:Courier New;vertical-align:baseline;background-color:transparent\"\u003e\u003dvtune\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal;vertical-align:baseline;background-color:transparent\"\u003e flag. For example:\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px;font-weight:normal;white-space:normal\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px;font-weight:normal;white-space:normal\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003dvtune kraken\u003c/code\u003e\u003c/div\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px;font-weight:normal;white-space:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eYou can then open the results in the VTune GUI. Instructions for opening the results will be printed.\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-gprof\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003egprof\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWhile not explicitly supported by Telemetry. It is possible to gather a \u003c/span\u003e\u003ca href\u003d\"http://sourceware.org/binutils/docs/gprof/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003egprof\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e profile for the entire measurement run when running in single process mode. To do so, first build with profiling enabled, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e-fno-omit-frame-pointer\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e and without position independent code:\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ GYP_DEFINES\u003d'profiling\u003d1' gclient runhooks\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ ninja -C out/Release chrome\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThen run with \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCPUPROFILE\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e in the environment and \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--single-process\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ CPUPROFILE\u003d/tmp/myprofile tools/perf/run_benchmark --extra-browser-args\u003d--single-process sunspider\u003c/code\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eView the profile like so:\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ cpprof --gv out/Release/chrome /tmp/myprofile\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-systrace\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003esystrace\u003c/span\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003eTelemetry also supports recording an Android \u003ca href\u003d\"http://developer.android.com/tools/help/systrace.html\"\u003eSystrace\u003c/a\u003e while running measurements:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Courier New;line-height:17px\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003dandroid-systrace kraken\u003c/code\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv /\u003e\r\n\u003c/div\u003e\r\n\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(153,153,153);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Courier New;line-height:17px\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003eThe resulting trace file can be opened in Chrome by going to \u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool\"\u003eabout:tracing\u003c/a\u003e and clicking on \"Load\".\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/h3\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Mac\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMac\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOn mac, Telemetry can gather an \u003c/span\u003e\u003ca href\u003d\"http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eInstruments\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e profile for each page in the page_set. To do so, pass the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003diprofiler\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e flags. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --profiler\u003diprofiler octane\u003c/code\u003e\u003c/span\u003e\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eInstructions for opening the results will be printed. Once in Instruments, if symbols are not resolved, go to “File \u0026gt; Re-Symbolicate Document...” and browse to the *.dsym files for Chromium Framework and Chromium Helper.\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003ch2 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Memory-Profiling---Linux-Android\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMemory Profiling - Linux / Android\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Linux-Android-C-C-\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLinux / Android (C/C++)\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOn special instrumented builds of linux Android, Telemetry can gather TCMalloc heap dumps that can be then fed to \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/developers/deep-memory-profiler\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eDeep Memory Profiler\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e . Please check that page for:\u003c/span\u003e\u003c/p\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGYP_DEFINES for both platforms.\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\r\n\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003elinux: environment variables\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\r\n\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eandroid: system properties (note: requires a rooted device)\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRun any measurement with \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003dtcmalloc-heap \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e flags. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark -v --browser\u003dandroid-content-shell --profiler\u003dtcmalloc-heap memory.top_25\u003c/code\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce the measurement completes, the dump files will be in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e/tmp/{RANDOM}.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eFollow instructions from the \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/developers/deep-memory-profiler\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eDeep Memory Profiler\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eto generate the data and graphs.\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote: depending on the page set, there’ll be multiple directories under \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e/tmp/{RANDOM}, \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eone per page in the set. In each folder, there’ll be a mix of dumps per browser and renderer processes for that particular page. You may want to analyse the browser process across the entire page set, rather than just a particular page. To do so:\u003c/span\u003e\u003c/p\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThere’s a file called “browser.pid” on each one of the page directories.\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\r\n\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCopy (or move) all dump files for that pid to say, “browser/”.\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\r\n\u003cli dir\u003d\"ltr\" style\u003d\"list-style-type:decimal;font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRun dmprof on that folder.\u003c/span\u003e\u003c/p\u003e\r\n\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Android-Memory-Report\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAndroid Memory Report\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px;font-weight:normal;white-space:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTelemetry can gather high level \"memory report\" for each page in the page_set. To do so, pass the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003dandroid-memreport\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e flags. At the end of the test, it will print a link to the HTML page that was generated.\r\nThis profile gives an overview of all memory (including mapped files, read-only, dirty, clean pages, etc..) but without any backtrace like the ones above. It does not require any instrumented build, as it gathers all information directly from /proc/PID/maps, etc..\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;font-size:13px;font-weight:normal;white-space:normal;line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/p\u003e\r\n\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Android-Java\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAndroid Java\u003c/span\u003e\u003c/h3\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eTelemetry can gather “heap profiles” for the java side for each page in the page_set. To do so, pass the \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--profiler\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ejava-heap\u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e flags. For example:\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark -v --browser\u003dandroid-content-shell --profiler\u003djava-heap \u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:10pt\"\u003ememory.top_25\u003c/span\u003e\u003cbr style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:10pt\" /\u003e\r\n\u003c/div\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.15;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe dump files will then be fetched in \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e/tmp/{RANDOM} \u003c/span\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ein the host, already converted to “hprof” format which can be used by tools like \u003c/span\u003e\u003ca href\u003d\"http://www.eclipse.org/mat/\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eEclipse’s MAT\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e. \u003c/span\u003e\u003ca href\u003d\"http://android-developers.blogspot.co.uk/2011/03/memory-analysis-for-android.html\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eThis post \u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e from the android team contains useful instructions. Please note: android has a “zygote” process that contains pre-loaded resources for all apps. These resources will show up in the heap profile: they are actually shared across all apps, they aren't exclusive to the process being profiled.\u003c/span\u003e\u003c/p\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"vertical-align:baseline\"\u003e\r\n\u003ch2 dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-size:15px;white-space:normal;font-family:Arial,Verdana,sans-serif;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Network-Profiling---Linux-Android\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNetwork Profiling - Linux / Android\u003c/span\u003e\u003c/h2\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"background-color:transparent;font-size:15px;white-space:normal;font-family:Arial,Verdana,sans-serif;line-height:1.15;margin-top:8pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Linux-Android1\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Trebuchet MS;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLinux / Android\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv style\u003d\"background-color:transparent;font-size:15px;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline\"\u003eTelemetry can gather “tcpdump” network captures for each page in the page_set. To do so, pass the \u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Courier New;vertical-align:baseline\"\u003e--profiler\u003d\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Courier New;vertical-align:baseline\"\u003etcpump\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline\"\u003e flags. For example:\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003e$ tools/perf/run_benchmark --browser\u003dandroid-content-shell --profiler\u003dtcpdump memory_measurement memory.top_25\u003c/code\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"background-color:transparent;font-size:15px;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"background-color:transparent;font-family:Arial;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Courier New;line-height:17px\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"background-color:transparent;font-size:15px;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline\"\u003eThe dump files will then be fetched in \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;background-color:transparent;vertical-align:baseline\"\u003e/tmp/{RANDOM},\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003e\u003cfont face\u003d\"Arial\"\u003e and then can be opened in tools such as \u003ca href\u003d\"http://www.wireshark.org/\" rel\u003d\"nofollow\"\u003eWireshark\u003c/a\u003e.\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" style\u003d\"font-size:15px;white-space:pre-wrap\"\u003eOn android, \"tcpdump\" binary will be downloaded from \u003ca href\u003d\"http://www.chromium.org/developers/telemetry/upload_to_cloud_storage\"\u003ecloud storage\u003c/a\u003e and installed in the device automatically.\r\n\u003c/font\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"background-color:transparent\"\u003e\r\n\u003ch2 dir\u003d\"ltr\" style\u003d\"font-size:15px;line-height:1.15;margin-top:10pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-Manual-Profiling---Android\" /\u003e\u003cspan style\u003d\"font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\"Manual\" Profiling - Android\u003c/span\u003e\u003c/h2\u003e\r\n\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"Arial\"\u003e\r\nSometimes it's useful to drive the browser \"manually\" in order to run a specific profiler during a regular browsing session. This command:\r\n\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"background-color:transparent\" /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e\u003ccode\u003e$ tools/perf/record_android_profile.py --browser\u003dandroid-chrome --profiler\u003dperf\u003c/code\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv /\u003e\r\n\u003c/div\u003e\r\n\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWill launch the browser and the associated profiler and wait until you hit enter. It will then fetch all profile data from the device and print instructions on how to open them.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYou can also use \u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs\"\u003eadb_profile_chrome\u003c/a\u003e to record a perf profile from a running browser:\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"background-color:transparent;vertical-align:baseline\"\u003e\r\n\u003cdiv /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cspan style\u003d\"font-family:courier new,monospace;font-size:15px;white-space:pre-wrap;background-color:transparent\"\u003e\u003ccode\u003e$ tools/android/adb_profile_chrome --browser\u003dbuild --time 5 --perf\u003cbr /\u003e\r\n\u003c/code\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4695032730150632508"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/telemetry/profiling"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8792129383300950901"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8792129383300950901"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8792129383300950901"}],"author":[{}],"sites$pageName":{"$t":"profiling"},"sites$revision":{"$t":"32"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3552352060534588556"},"published":{"$t":"2008-08-28T23:25:29.412Z"},"updated":{"$t":"2016-04-25T13:58:53.490Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-25T13:58:51.860Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Incognito"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/incognito/incognito2.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197827938/user-experience/incognito/incognito2.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003eIncognito mode is a window-level mode - all pages viewed within this window are not persisted to the user's history, and incognito pages use a temporary cookie store that is blank at the start of the incognito session.\u003cbr /\u003e\u003cbr /\u003eChromium's backend could be made capable of running incognito on a per-tab basis, but we keep the mode at the window level to avoid the confusion of having a tabstrip of mixed-mode tabs.\u003cbr /\u003e\u003cbr /\u003eTo avoid having to back-delete a page's history, we do not allow dragging between incognito and regular-mode windows.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/incognito"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3552352060534588556"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3552352060534588556"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3552352060534588556"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"incognito"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8668205748691108705"},"published":{"$t":"2016-04-21T19:08:49.632Z"},"updated":{"$t":"2016-04-21T19:08:52.608Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-21T19:08:49.645Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Label and Component Naming Style Guide"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/label-and-component-naming-style-guide"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8668205748691108705"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8668205748691108705"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8668205748691108705"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"label-and-component-naming-style-guide"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"},"published":{"$t":"2008-08-29T00:01:48.210Z"},"updated":{"$t":"2016-04-11T19:27:08.574Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-11T19:27:07.470Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Status Bubble"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Overview\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eOverview\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Timing-and-behavior\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eTiming and behavior\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Mouseover\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eMouseover\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Mouseout\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eMouseout\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Size\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eSize\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Lack-of-Security\"\u003e\u003cstrong\u003e4 \u003c/strong\u003e(Lack of) Security\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003eChromium does not have a status bar - to show the target of a link or\r\npage load status, we use a fixed-width bubble that floats over the\r\ncontent when necessary.\u003cbr /\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/status-bubble/status_bubble_hover.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197829306/user-experience/status-bubble/status_bubble_hover.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Timing-and-behavior\" /\u003eTiming and behavior\u003c/h2\u003eThe status bubble behavior in the link-hover case is described below.\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Mouseover\" /\u003eMouseover\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003col\u003e\u003cli\u003eOn mouse over link, begin Timer A.\u003c/li\u003e\u003cli\u003eWhen Timer A expires, change the bubble text to the link value and begin fading in.\u003c/li\u003e\u003cli\u003eIf mouse moves out while fading in, begin fading out.\u003c/li\u003e\u003cli\u003eWhen fade-in completes, show the bubble at full opacity.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Mouseout\" /\u003eMouseout\u003cbr /\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003col\u003e\u003cli\u003eOn mouseout, begin Timer B.\u003c/li\u003e\u003cli\u003eIf the user mouses over another link, change the bubble text to the value of the new link instantly. Go to step 4 of \u003cb\u003eMouseover\u003c/b\u003e, above.\u003c/li\u003e\u003cli\u003eOtherwise, if Timer B expires:\u003c/li\u003e\u003col\u003e\u003cli\u003eBegin fading out until fade-out completes. \u003cbr /\u003e\u003c/li\u003e\u003cli\u003eOr if mouse over again, change content and resume fade-in.\u003c/li\u003e\u003c/ol\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis ensures that the bubble does not flicker in and out as the user's mouse traverses many links, and allows users to see the targets of multiple links quickly (compare to a tooltip solution). Timer A should be high enough so that if the user's cursor doesn't accidentally trigger the bubble in normal navigation, but low enough so that a user who wants to see a link is not kept waiting - generally with a slower fade-in, Timer A can be pretty low.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Size\" /\u003eSize\u003c/h2\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe status bubble's width is fixed to a percentage of the width of the window - while this results in link truncation, it prevents resizing as the user moves the mouse over multiple links. We try to keep the bubble under half the width of the window so that the bubble feels anchored to a corner, making that corner the obvious target for the user's eyes.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Lack-of-Security\" /\u003e(Lack of) Security\u003c/h2\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eNote that the status bubble is \u003ca href\u003d\"https://garron.net/web/spoof-link/\" rel\u003d\"nofollow\"\u003etrivial to spoof\u003c/a\u003e using a little CSS.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eIn addition, it is also trivial to swap out the link after the user has hovered over it and pressed it, but before navigation.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eTherefore, the status bubble is just a convenience for users hovering over links on well-behaved sites, but it is \u003cb\u003enot\u003c/b\u003e a security surface.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/status-bubble"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1463738024678720638"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"status-bubble"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"USl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5721327275560914372"},"published":{"$t":"2015-11-12T00:46:52.924Z"},"updated":{"$t":"2016-04-11T16:21:54.830Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-11T16:21:52.225Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Rvalue references in Chromium"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNow that C++11 support is available in our standard library (libc++), we should be able to make use of standard container types in more places, and to use containers and standard types more efficiently. In order to do that we need to understand and make use of \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::move()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e and \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ervalue references\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr style\u003d\"font-size:13.3333px\" /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"font-size:13.3333px;line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWe hope that the information here will be enough for you to start using these C++11 features safely in Chromium. (Some of the information here may purposefully gloss over details or edge cases.)\u003c/span\u003e\u003c/p\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Rvalue-references-and-std::move-\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eRvalue references and std::move()\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-1.-What-makes-rvalues.\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003e1. What makes rvalues.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-2.-Move-constructor-is-used-with-rvalues.\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003e2. Move constructor is used with rvalues.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-3.-Move-constructor-does-a-shallow-copy.\"\u003e\u003cstrong\u003e1.3 \u003c/strong\u003e3. Move constructor does a shallow copy.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-4.-std::move-will-cast-a-variable-to-an-rvalue.\"\u003e\u003cstrong\u003e1.4 \u003c/strong\u003e4. std::move() will cast a variable to an rvalue.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-5.-You-must-not-use-a-variable-after-calling-std::move-on-it.\"\u003e\u003cstrong\u003e1.5 \u003c/strong\u003e5. You must not use a variable after calling std::move() on it.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-6.-std::move-does-not-move-it-casts.\"\u003e\u003cstrong\u003e1.6 \u003c/strong\u003e6. std::move() does not move, it casts.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-7.-Copy-constructors-can-also-bind-to-rvalues-with-lower-priority-.\"\u003e\u003cstrong\u003e1.7 \u003c/strong\u003e7. Copy constructors can also bind to rvalues (with lower priority).\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-8.-Move-constructors-will-only-bind-to-non-const-rvalues.\"\u003e\u003cstrong\u003e1.8 \u003c/strong\u003e8. Move constructors will only bind to non-const rvalues.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-9.-Move-constructors-should-be-accompanied-by-move-assignment-operators.\"\u003e\u003cstrong\u003e1.9 \u003c/strong\u003e9. Move constructors should be accompanied by move-assignment operators.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-10.-Don-t-go-cray-cray-with-move-semantics.\"\u003e\u003cstrong\u003e1.10 \u003c/strong\u003e10. Don’t go cray cray with move semantics.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-11.-Don-t-return-references.-Don-t-use-std::move-on-rvalues.\"\u003e\u003cstrong\u003e1.11 \u003c/strong\u003e11. Don’t return references. Don’t use std::move() on rvalues.\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-12.-std::move-is-the-same-thing-as-our-familiar-Pass-function.\"\u003e\u003cstrong\u003e1.12 \u003c/strong\u003e12. std::move() is the same thing as our familiar Pass() function.\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Perfect-forwarding\"\u003e\u003cstrong\u003e2 \u003c/strong\u003ePerfect forwarding\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-std::forward-is-a-conditional-cast-to-an-rvalue.\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003estd::forward() is a conditional cast to an rvalue.\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003cspan\u003e\u003ch2 style\u003d\"line-height:1.38;margin-top:20pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Rvalue-references-and-std::move-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:26.6667px;font-weight:400;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003eRvalue references and std::move()\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe \u003c/span\u003e\u003ca href\u003d\"https://google.github.io/styleguide/cppguide.html#Rvalue_references\" style\u003d\"line-height:1.38;font-size:10pt;text-decoration:none;background-color:transparent\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003egoogle style guide\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e allows the following: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUse rvalue references only to define move constructors and move assignment operators, or for perfect forwarding.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Here we talk about the first type of use, and follow up about the second later.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMany of the ideas here come from a talk given by Scott Meyers that is \u003c/span\u003e\u003ca href\u003d\"https://channel9.msdn.com/Events/GoingNative/2013/An-Effective-Cpp11-14-Sampler\" style\u003d\"text-decoration:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eavailable on MSDN\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. The video is really excellent and worth watching.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThere are links to full example code with each of the examples. You can try them out locally, or drop them into an \u003c/span\u003e\u003ca href\u003d\"http://coliru.stacked-crooked.com/\" style\u003d\"text-decoration:none\" target\u003d\"_blank\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eonline compiler\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-1.-What-makes-rvalues.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e1. What makes rvalues\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"font-weight:normal;line-height:normal;font-size:14.6667px;vertical-align:baseline;background-color:transparent\"\u003eYou know that you have an rvalue when the object \u003c/span\u003e\u003cspan style\u003d\"line-height:normal;font-size:14.6667px;vertical-align:baseline;background-color:transparent\"\u003ehas no name\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;line-height:normal;font-size:14.6667px;vertical-align:baseline;background-color:transparent\"\u003e. Typically \u003c/span\u003ervalues \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eare temporary objects that exist on the stack as the result of a function call or other operation.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Returning a value from a function will turn that value into an \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ervalue\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. Once you call return on an object, the name of the object does not exist anymore (it goes out of scope), so it becomes an rvalue.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Similarly, calling a function will give back an \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ervalue\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. The return value of a function has no name.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emain\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eargc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e**argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// MakeMyType returns an rvalue MyType.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type \u003d MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e())\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dki3q2Gbi\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dki3q2Gbi\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-2.-Move-constructor-is-used-with-rvalues.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2. Move constructor is used with rvalues.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMove constructors are similar to copy constructors. They construct an object out of another object of the same type. The signature of the method changes in order for it to accept rvalues only.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHere’s an example of a class with a move constructor. It will cause the compiler to not generate an implicit copy constructor, making this class move-only.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epublic\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {}\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; other\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e { fprintf\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(61,133,198);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estderr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \"move ctor\\n\"\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// Copy constructor is implicitly deleted.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MyType(const MyType\u0026amp; other) \u003d delete;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e};\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e a\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// This is here to circumvent some compiler optimizations,\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // to ensure that we will actually call a move constructor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e if \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ea \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e%\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(61,133,198);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emain\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e **argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MakeMyType returns an rvalue MyType.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Both lines below call our move constructor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dtjxdwQuL\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dtjxdwQuL\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe argument of the move constructor is a \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e which is a reference (like a \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e) except that it will only bind to an rvalue. That means the following won’t compile, since it tries to construct a new \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e without an rvalue.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epublic\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {}\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; other\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e { fprintf\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estderr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \"move ctor\\n\"\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Copy constructor is implicitly deleted.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MyType(const MyType\u0026amp; other) \u003d delete;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e};\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e main\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e** argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // |type| is an lvalue, so this will not compile because move\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor's argument will only bind to rvalues.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e other_type \u003d type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003d9bjPNiWY\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003d9bjPNiWY\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-3.-Move-constructor-does-a-shallow-copy.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e3. Move constructor does a shallow copy.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eA move constructor (like a copy constructor) works by copying the members of another object into itself. The differences of a move constructor are the following:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- The move constructor \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ecan be destructive\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. Since the argument is a non-const reference, it may modify the object passed to it. This is okay since the argument is an \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ervalue\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, so the caller does not hold onto a name for the original object, and won’t make use of it (note that its destructor will happen though).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- The move constructor only needs to \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eshallow copy\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. For example if the object holds a pointer, it doesn’t need to deref the pointer and copy its contents. The move constructor can just copy the pointer’s address. \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis is where the performance benefits of move constructors happen.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epublic\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enew\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 1;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memset\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, 0, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e vector_.push_back\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e3.14\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; other) {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e fprintf\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estderr, \"move ctor\\n\"\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// Steal the memory, null out |other|.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e other.pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e other.pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enullptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Copy the contents of the array.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memcpy\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, other.array_, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Swap with our (empty) vector.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e vector_.swap\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eother.vector_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ~MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003edelete\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e private:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e* pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e array_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e[\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e42\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e]\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::vector\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efloat\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; vector_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e};\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emain\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e **argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MakeMyType returns an rvalue MyType.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Both lines below call our move constructor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dTXZB61Sg\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dTXZB61Sg\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-4.-std::move-will-cast-a-variable-to-an-rvalue.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e4. std::move() will cast a variable to an rvalue.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIf you want to construct a new object from a variable, you can still use the move constructor to do so. \u003c/span\u003e\u003ca href\u003d\"http://en.cppreference.com/w/cpp/utility/move\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);font-weight:700;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::move()\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e will cast your variable to an rvalue, allowing it to bind to a move constructor.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emain\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e **argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MyType other_type \u003d type; won't work, since there is no copy ctor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // std::move casts |type| to an rvalue, so it uses the move\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eother_type \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dDzNMxt5j\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dDzNMxt5j\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis also means that you can pass an rvalue to a function that uses pass-by-value.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#3c78d8;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003emain\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e **argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003etype;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e// The return value of MakeMyType is an rvalue, so the move constructor\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e // is used.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e// Error: |type| is an lvalue, and is not copyable.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cb style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e// But std::move() turns lvalues into rvalues, so the move constructor\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e // is used again.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"color:rgb(56,118,29);font-family:Courier New;font-size:13.3333px;white-space:pre-wrap;line-height:normal;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"line-height:1.38;font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"line-height:1.38;font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"line-height:1.38;font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"line-height:1.38;font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"line-height:1.38;font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dP7prZEur\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dP7prZEur\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHowever..\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-5.-You-must-not-use-a-variable-after-calling-std::move-on-it.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e5. You must not use a variable after calling std::move() on it.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSince you have casted your variable to an rvalue, functions that receive rvalues may act destructively on your variable, so using the variable’s contents afterward may result in undefined behaviour. The only valid things you may do \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eafter calling std::move()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e on a variable are:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Destroy it\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Assign to it (ie. replace its contents)\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis applies to member variables too, don't leave your class in an undefined state when leaving a method.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-6.-std::move-does-not-move-it-casts.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e6. std::move() does not move, it casts.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eYou may think of \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::move\u0026lt;T\u0026gt;()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e as instead \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ervalue_cast\u0026lt;T\u0026gt;()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. It does not perform any action of its own on the value passed to it, only changing what methods you can pass it to.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSo the following does nothing:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e t;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// Casts it but it’s unused.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJust the same as:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e t;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereinterpret_cast\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eunsigned char\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// Cast it but it’s unused.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn fact, the actual implementation of std::move() is done with static_cast. It is simply a cast from MyType to MyType\u0026amp;\u0026amp; (a reference to an rvalue of MyType):\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn static_cast\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etypename\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::remove_reference\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,128);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,0,64);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-7.-Copy-constructors-can-also-bind-to-rvalues-with-lower-priority-.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e7. Copy constructors can also bind to rvalues (with lower priority).\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNever read std::move() on an unfamiliar type and assume anything about what is going to happen!\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIf you see code that calls \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::move()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e it looks like it should be calling a move constructor, but you could be wrong.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhen a move constructor on the type being cast to an rvalue does not exist, the compiler will fall back to binding the rvalue as a const-reference. This means the \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ecopy-constructor would be used instead\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epublic\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enew\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 1;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memset\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, 0, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e vector_.push_back\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e3.14\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp; other\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e fprintf\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estderr, \"copy ctor\\n\"\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Copy memory.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enew\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *other.pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Copy the contents of the array.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memcpy\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, other.array_, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // More copies.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e vector_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e other.vector_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ~MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003edelete\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e private:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e* pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e array_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e[\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e42\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e]\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::vector\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efloat\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; vector_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e};\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e main\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e** argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MyType other_type \u003d type; works the same way here.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // std::move casts |type| to an rvalue, but since there is no move\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor, the copy constructor is used.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e other_type \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // MakeMyType returns an rvalue, but since there is no move\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor, the copy constructor is used.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // ProcessMyType(type); works the same way here.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // std::move casts |type| to an rvalue, but since there is no move\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor, the copy constructor is used.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dp5ciyVVk\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dp5ciyVVk\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSo do not assume anything from reading std::move(). You need to understand the class being moved to know what will happen.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-8.-Move-constructors-will-only-bind-to-non-const-rvalues.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e8. Move constructors will only bind to non-const rvalues.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBeware of const! Const variables can not be moved from, since move constructors take a non-const (rvalue) reference. However the compiler will \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003esilently fall-back to the copy constructor\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e main(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e** argv) {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e2\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // std::move casts to an rvalue, but since this is const, it becomes an\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // rvalue to const, which uses the copy constructor, not the move\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // constructor.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003d5aVRz5SQ\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003d5aVRz5SQ\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis type of error can only be caught by code inspection (and performance testing). \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAlways look at the type\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e of the variable on which you call move().\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis won’t bite you with function return rvalues, but requires caution when using std::move().\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-9.-Move-constructors-should-be-accompanied-by-move-assignment-operators.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e9. Move constructors should be accompanied by move-assignment operators.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJust as a copy constructor \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp; t\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e should be accompanied by a copy-assignment operator \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eoperator\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp; t\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, so should a move constructor. \u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMove-assignment operators work and look the same as a Move constructor. Most things we’ve discussed about move constructors (behaviour and performance) will apply in all the same ways to move-assignment.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn following example, the class defines its move constructor in terms of operator\u003d, using a move assignment to construct itself.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epublic\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e new int;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *pointer_ \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 1;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memset\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, 0, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e vector_.push_back\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e3.14\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; other\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"line-height:normal;font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e : pointer_(\u003c/span\u003e\u003cspan style\u003d\"line-height:normal;font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003enullptr\u003c/span\u003e\u003cspan style\u003d\"line-height:normal;font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e) \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;font-size:13.3333px;white-space:pre-wrap;line-height:1.38;background-color:transparent\"\u003e{\u003c/span\u003e\u003c/p\u003e\u003c/span\u003e\u003cspan\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Note that although the type of |other| is an rvalue reference,\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // |other| itself is an lvalue, since it is a named object. In order\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // to ensure that the move assignment is used, we have to explicitly\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // specify std::move(other).\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ethis\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove(other);\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ~MyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003edelete \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003epointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u0026amp; operator\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#b45f06;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u0026amp;\u0026amp; other\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#38761d;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e // Steal the memory, null out |other|.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#3c78d8;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003edelete\u003c/span\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e pointer_;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;background-color:transparent\"\u003e pointer_ \u003d other.pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;background-color:transparent\"\u003e other.pointer_ \u003d \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;color:rgb(60,120,216);vertical-align:baseline;background-color:transparent\"\u003enullptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;vertical-align:baseline;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Copy the contents of the array.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e memcpy\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_, other.array_, sizeof\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e // Swap with our vector. Leaves the old contents in |other|.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.333333333333332px;font-family:Courier New;color:#a64d79;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e // We could destroy the old content instead, but this is equally\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan\u003e\u003cspan style\u003d\"font-size:13.3333px;color:rgb(166,77,121);vertical-align:baseline;background-color:transparent\"\u003e // valid.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;color:rgb(166,77,121);vertical-align:baseline;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e vector_.swap\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eother.vector_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *this;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e }\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e private:\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e* pointer_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003earray_\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e[\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e42\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e]\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::vector\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003efloat\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; vector_;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e};\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dWMZg2y3C\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dWMZg2y3C\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-10.-Don-t-go-cray-cray-with-move-semantics.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e10. Don’t go cray cray with move semantics.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMove-constructing is always as cheap or cheaper than copy-constructing. So you \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ecould\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e use it in every situation possible. But it may be adding very little value (or making code misleading).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAlmost always, just use a copy constructor. For example gfx::Point is 2 integers, a move constructor would do nothing different than a copy constructor. There’s no reason to write a move constructor for this class, or to use std::move() when using Points.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eclass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Point \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e{\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e x_;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e y_;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e ...\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Point\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePoint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp; p\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e{\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e x_ \u003d p.x_; y_ \u003d p.y_; \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Point\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePoint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; p\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e{\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e x_ \u003d p.x_; y_ \u003d p.y_; \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMove constructors are especially valuable for types that hold a pointer to something large, since moving a pointer is much cheaper than copying everything it points to. Other scenarios benefit less or not at all.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-11.-Don-t-return-references.-Don-t-use-std::move-on-rvalues.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e11. Don’t return references. Don’t use std::move() on rvalues.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFunctions return an rvalue without you doing anything, they already do this (see point #1). So you don’t need to do anything to make this happen. You should not see functions that return a MyType\u0026amp;\u0026amp;. Simply return MyType.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e() {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// This is WRONG. The return type should not be\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // a reference.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e type;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// This is usually WRONG. Returning will\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // already make it an rvalue.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eJust as returning a MyType\u0026amp; would be wrong (returning a reference to a temporary object), returning a MyType\u0026amp;\u0026amp; is wrong for the same reasons.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePutting std::move() on the return call actually makes things less efficient, it interferes with the compiler doing RVO (Return Value Optimization). You can read a previous chromium-dev thread about this in the context of scoped_ptr: \u003c/span\u003e\u003ca href\u003d\"https://groups.google.com/a/chromium.org/d/msg/chromium-dev/ICA3hiR4Z3A/Bi_ec46cAQAJ\" style\u003d\"text-decoration:none\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003elink\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHowever, if the types of the variable and the return type do not match exactly, then you will have to use std::move() in order to convert without creating an extra temporary.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::unique_ptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; MakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e{ \u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::unique_ptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eChildClassOfMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; ptr;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// This call to std::move() is needed to convert from a pointer-to-the\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // child class to a pointer-to-the parent.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSimilarly do not use move() on the return value from calling a function. You already have an rvalue, so casting it there adds no value, only noise.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// This is WRONG. It is casting an rvalue to an rvalue, which is not\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// needed.\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProcessMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMakeMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e()))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-12.-std::move-is-the-same-thing-as-our-familiar-Pass-function.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e12. std::move() is the same thing as our familiar Pass() function.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor some time, scoped_ptr::Pass() has been implemented as being the same thing as std::move().\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePlaces that previously called a.Pass() can be changed to call std::move(a) instead, and they will be changed in the near future. It may help you to consider this, if you are already familiar with Pass().\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUsing std::unique_ptr instead of scoped_ptr will require the use of std::move() instead, as Pass() does not exist there (and is not needed). So code will be change from:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003escoped_ptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; t \u003d ...;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCallFunction\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et.Pass\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e())\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTo instead be:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::unique_ptr\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt; t \u003d ...;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eCallFunction\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003ch2 style\u003d\"line-height:1.38;margin-top:20pt;margin-bottom:6pt\"\u003e\u003ca name\u003d\"TOC-Perfect-forwarding\" /\u003e\u003cspan style\u003d\"font-size:26.6667px;font-family:Arial;font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ePerfect forwarding\u003c/span\u003e\u003c/h2\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe \u003c/span\u003e\u003ca href\u003d\"https://google.github.io/styleguide/cppguide.html#Rvalue_references\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003egoogle style guide\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e allows the following: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eUse rvalue references only to define move constructors and move assignment operators, or for perfect forwarding.\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e We’ll talk about the latter here.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSo far, we’ve seen that we can write an rvalue reference in a move constructor, or a move-assignment operator:\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; type\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; // Move constructor\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eoperator\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; type\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e; // Move-assignment operator\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn both of these cases, the type \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e is fixed, so we know that we have a reference to something that is definitely an rvalue. However when writing a templated method, we may want to support an unknown type instead, at which point we don’t know if it is an rvalue.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etemplate\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etypename\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e T\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003evoid \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProcessAndStore\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; var\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e { ... }\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eHere the argument type may have been one of two things:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Passed by move (rvalue reference) if you had an rvalue: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Passed by reference (aka lvalue reference) otherwise: \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(You can read more about \u003c/span\u003e\u003ca href\u003d\"http://stackoverflow.com/questions/13725747/concise-explanation-of-reference-collapsing-rules-requested-1-a-a-2\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereference collapsing\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e if you want more details about how these are the only two possibilities.)\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eArguments in templates can be written this way to implement \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eperfect forwarding\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e. This allows for arguments to be passed through the template to another method without introducing any additional copies of the object (ie no copy or move constructors occur inside the template):\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- If we had written the template as taking a parameter \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, then a new variable would have to be constructed inside the templated method. This could be done with a copy constructor, or a move constructor (using std::move() inside the template method), but it would require some extra work (which is why we normally don’t pass-by-value of course).\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- If we had written it instead as taking a \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econst \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, then no copy takes place entering the method, which is great. But when passing the variable to another method, if it takes the argument by value, a copy occurs.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e- Lastly, if we had written \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, then an rvalue would not bind to it, causing a compiler error.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThe most generally correct way to implement this is with \u003c/span\u003e\u003ca href\u003d\"http://en.cppreference.com/w/cpp/utility/forward\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;color:rgb(17,85,204);font-weight:700;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::forward()\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, which will always do the right thing for you.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etemplate\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etypename\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e T\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003evoid \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eProcessAndStore\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp; var\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Process\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // ...\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // The type of |var| could be an rvalue reference, which means we\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // should pass an rvalue to Store. However, it could also be an lvalue\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // reference, which means we should pass an lvalue.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Note that just doing Store(var); will always pass an lvalue and\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // doing Store(std::move(var)) will always pass an rvalue. Forward does\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // the right thing by casting to rvalue only if var is an rvalue\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // reference.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Store\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eforward\u0026lt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003evar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e))\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003c/span\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003drVRebELt\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003drVRebELt\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003ch3 style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003ca name\u003d\"TOC-std::forward-is-a-conditional-cast-to-an-rvalue.\" /\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::forward() is a \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;font-style:italic;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econditional \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ecast to an rvalue.\u003c/span\u003e\u003c/h3\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThis sounds lot like \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::move()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, which also casts to an rvalue. But \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003estd::forward()\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e will avoid casting to an rvalue if the argument is an lvalue reference. It’s implementation is conceptually something like:\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eif \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(230,145,56);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eis_lvalue_reference\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026lt;T\u0026gt;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003evalue\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e return \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et;\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(60,120,216);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ereturn\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003et\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(0,128,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThat is, it preserves lvalue references. Why?\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eBecause doing std::move() on an lvalue reference is bad!\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Code producing an lvalue reference expects the object to remain valid. But code receiving an rvalue reference expects to be able to steal from it. This leaves you with a reference pointing to a potentially-invalid object.\u003c/span\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// Although Chromium disallows non-const lvalue references, this\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e// situation is still possible in templates.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003evoid Oops\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp; type\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Move is destructive. It can change |type| which is an lvalue\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // reference.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003elocal_type \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e std\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e::\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003emove\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Work with local_type.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // ...\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e main\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eint\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e argc, \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003echar\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e **argv\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e {\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eMyType \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Don't move type, just pass it.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e Oops\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e(\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003etype\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e)\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e // Oops, this is a null pointer dereference.\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(166,77,121);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e *type.pointer \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;color:rgb(56,118,29);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003d\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e 314;\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e}\u003c/span\u003e\u003c/p\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;margin-left:36pt\"\u003e\u003ca href\u003d\"http://pastebin.com/raw.php?i\u003dcPrYgGhr\" style\u003d\"text-decoration:none\" rel\u003d\"nofollow\"\u003e\u003cspan style\u003d\"font-size:13.3333px;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ehttp://pastebin.com/raw.php?i\u003dcPrYgGhr\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\u003cbr /\u003e\u003cp dir\u003d\"ltr\" style\u003d\"line-height:1.38;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eFor perfect forwarding \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003ein templates\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e (ie arguments of type \u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;color:rgb(180,95,6);vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eT\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e), use std::forward() instead of std::move().\u003c/span\u003e\u003c/p\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:14.6667px;font-family:Arial;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/rvalue-references"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5721327275560914372"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5721327275560914372"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5721327275560914372"}],"author":[{"name":{"$t":"danakj chromium"},"email":{"$t":"danakj@chromium.org"}}],"sites$pageName":{"$t":"rvalue-references"},"sites$revision":{"$t":"18"}},{"gd$etag":"\"Wyl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7357830605173012368"},"published":{"$t":"2008-08-31T15:00:31.022Z"},"updated":{"$t":"2016-04-01T16:04:10.799Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-04-01T16:04:09.309Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Inter-process Communication (IPC)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"Overview\"\u003e \u003c/a\u003e\u003c/h2\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Overview\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eOverview\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#IPC_in_the_browser\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eIPC in the browser\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#IPC_in_the_renderer\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eIPC in the renderer\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Messages\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eMessages\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Types_of_messages\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eTypes of messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Declaring_messages\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eDeclaring messages\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Pickling_values\"\u003e\u003cstrong\u003e2.2.1 \u003c/strong\u003ePickling values\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Sending_messages\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eSending messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Handling_messages\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eHandling messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Security_considerations\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003eSecurity considerations\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Channels\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eChannels\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Synchronous_messages\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eSynchronous messages\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Declaring_synchronous_messages\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eDeclaring synchronous messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Issuing_synchronous_messages\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eIssuing synchronous messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Handling_synchronous_messages\"\u003e\u003cstrong\u003e4.3 \u003c/strong\u003eHandling synchronous messages\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Handling_synchronous_messages\"\u003e\u003cstrong\u003e4.4 \u003c/strong\u003eConverting message type to a message name\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"Overview\"\u003eOverview \u003c/a\u003e\u003c/h2\u003e\r\n\u003cp\u003eChromium has a \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture\"\u003emulti-process architecture\u003c/a\u003e which means that we have a lot of processes communicating with each other. Our main inter-process communication primitive is the named pipe.\r\nOn Linux \u0026amp; OS X, we use a \u003cspan style\u003d\"font-family:courier new,monospace\"\u003esocketpair()\u003c/span\u003e. A named pipe is allocated for each renderer process for communication\r\nwith the browser process. The pipes are used in asynchronous mode to\r\nensure that neither end is blocked waiting for the other.\u003c/p\u003e\u003cp\u003eFor advice on how to write safe IPC endpoints, please see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/education/security-tips-for-ipc\"\u003eSecurity Tips for IPC\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"IPC_in_the_browser\"\u003e IPC in the browser \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003eWithin the browser, communication with the renderers is done in a\r\nseparate I/O thread. Messages to and from the views then have to be\r\nproxied over to the main thread using a \u003ccode\u003eChannelProxy\u003c/code\u003e.\r\nThe advantage of this scheme is that resource requests (for web pages,\r\netc.), which are the most common and performance critical messages, can\r\nbe handled entirely on the I/O thread and not block the user interface.\r\nThese are done through the use of a \u003ccode\u003eChannelProxy::MessageFilter\u003c/code\u003e which is inserted into the channel by the \u003ccode\u003eRenderProcessHost\u003c/code\u003e.\r\nThis filter runs in the I/O thread, intercepts resource request\r\nmessages, and forwards them directly to the resource dispatcher host.\r\nSee \u003ca href\u003d\"http://dev.chromium.org/developers/design-documents/multi-process-resource-loading\"\u003eMulti-process Resource Loading\u003c/a\u003e for more information on resource loading.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"IPC_in_the_renderer\"\u003e IPC in the renderer \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nEach renderer also has a thread that manages communication (in this\r\ncase, the main thread), with the rendering and most processing\r\nhappening on another thread (see the diagram in \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture\"\u003emulti-process architecture\u003c/a\u003e).\r\nMost messages are sent from the browser to the WebKit thread through\r\nthe main renderer thread and vice-versa. This extra thread is to\r\nsupport synchronous renderer-to-browser messages (see \"Synchronous\r\nmessages\" below).\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"Messages\"\u003e Messages \u003c/a\u003e\u003c/h2\u003e\r\n\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Types_of_messages\"\u003e Types of messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003eWe have two primary types of messages: \"routed\" and \"control.\" Control messages are handled by the class that created the pipe. Sometimes that class will allow others to received message by having a \u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003eMessageRouter\u003c/font\u003e object that other listeners can register with and received \"routed\" messages sent with their unique (per pipe) id.\u003c/p\u003e\u003cp\u003eFor example, when rendering, control messages are not specific to a given view and will be handled by the \u003ccode\u003eRenderProcess\u003c/code\u003e (renderer) or the \u003ccode\u003eRenderProcessHost\u003c/code\u003e (browser). Requests for resources or to modify the clipboard are not view-specific so are control messages. An example of routed messages are a message to ask a view to paint a region.\u003c/p\u003e\u003cp\u003eRouted messages have historically been used to get messages to a specific\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003eRenderViewHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. However, technically any class can receive routed messages by using \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003eRenderProcessHost::GetNextRoutingID\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and registering itself with \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003eRenderProcessHost::AddRoute\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. Currently both\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003eRenderViewHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003eRenderFrameHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e instances have their own routing IDs.\u003c/span\u003e\u003c/p\u003e\u003cp\u003eIndependent of the message type is whether the message is sent\r\nfrom the browser to the renderer, or from the renderer to the browser.\r\nMessages related to a document's frame sent from the browser to the renderer are called\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003eFrame\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e messages because they are being sent \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003eto\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e the\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003eRenderFrame\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. Similarly, messages sent from the renderer to the browser are called\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003eFrameHost\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e messages because they are being sent \u003c/span\u003e\u003ci style\u003d\"font-size:10pt;background-color:transparent\"\u003eto\u003c/i\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e the \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003eRenderFrameHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. You will notice the messages defined in \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/content/common/frame_messages.h\"\u003eframe_messages.h\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e are \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003etwo sections, one for \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px\"\u003eFrame\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e and one for \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px\"\u003eFrameHost\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px\"\u003e messages\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ePlugins also have separate processes. Like the render messages, there are \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003ePluginProcess\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e messages (sent from the browser to the plugin process) and \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003ePluginProcessHost\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e messages (sent from the plugin process to the browser). These messages are all defined in \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/content/common/plugin_process_messages.h\"\u003eplugin_process_messages.h\u003c/a\u003e\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e. The automation messages (for controlling the browser from the UI tests) are done in a similar manner.\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003cp style\u003d\"font-size:13.3333px\"\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe same organization applies for other groups of messages exchanged between the browser and the renderer, as for\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003eView\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003eViewHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e labeled messages exchanged between\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(0,96,0);font-family:monospace;background-color:transparent\"\u003eRenderViewHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e and\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003eRenderView\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e, defined in\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px;background-color:transparent\"\u003e\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/content/common/view_messages.h\"\u003eview_messages.h\u003c/a\u003e\u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e.\u003c/span\u003e\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Declaring_messages\"\u003eDeclaring messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nSpecial macros are used to declare messages. \u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eTo declare a routed message from the renderer to the browser (e.g. a \u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px\"\u003eFrameHost\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e message \u003c/span\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003especific to a frame\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e) that contains a URL and\r\nan integer as an argument, write:\u003c/span\u003e\u003c/p\u003e\u003cpre\u003eIPC_MESSAGE_ROUTED2(FrameHostMsg_MyMessage, GURL, int)\u003c/pre\u003e\r\n\u003cp\u003eTo declare a control message from the browser to the renderer (\u003cspan style\u003d\"font-size:13.3333px\"\u003ee.g.\u003c/span\u003e a \u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace;font-size:13.3333px\"\u003eFrame\u003c/span\u003e message not specific to a frame) that\r\ncontains no parameters, write:\r\n\u003c/p\u003e\u003cpre\u003eIPC_MESSAGE_CONTROL0(FrameMsg_MyMessage)\u003c/pre\u003e\r\n\u003cp\u003e\r\n\u003c/p\u003e\u003ch4\u003e\u003ca name\u003d\"Pickling_values\"\u003e Pickling values \u003c/a\u003e\u003c/h4\u003e\r\n\u003cp\u003e\r\nParameters are serialized and de-serialized to message bodies using the \u003ccode\u003eParamTraits\u003c/code\u003e template. Specializations of this template are provided for most common types in \u003ccode\u003eipc_message_utils.h\u003c/code\u003e. If you define your own types, you will also have to define your own \u003ccode\u003eParamTraits\u003c/code\u003e specialization for it.\r\n\u003c/p\u003e\u003cp\u003eSometimes, a message has too many values to be reasonably put in\r\na message. In this case, we define a separate structure to hold the\r\nvalues. For example, for the \u003ccode\u003eFrameMsg_Navigate\u003c/code\u003e message, the \u003ccode\u003eCommonNavigationParams\u003c/code\u003e structure is defined in \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch/#chromium/src/content/common/navigation_params.h\"\u003e\u003ccode\u003enavigation_params.h\u003c/code\u003e\u003c/a\u003e. \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch/#chromium/src/content/common/frame_messages.h\"\u003e\u003ccode\u003eframe_messages.h\u003c/code\u003e\u003c/a\u003e defines the \u003ccode\u003eParamTraits\u003c/code\u003e specializations for the structures using the \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch/#chromium/src/ipc/param_traits_macros.h\"\u003e\u003ccode\u003eIPC_STRUCT_TRAITS\u003c/code\u003e\u003c/a\u003e family of macros.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Sending_messages\"\u003e Sending messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nYou send messages through \"channels\" (see below). In the browser, the \u003ccode\u003eRenderProcessHost\u003c/code\u003e contains the channel used to send messages from the UI thread of the browser to the renderer. The \u003ccode\u003eRenderWidgetHost\u003c/code\u003e (base class for \u003ccode\u003eRenderViewHost\u003c/code\u003e) provides a \u003ccode\u003eSend\u003c/code\u003e function that is used for convenience.\r\n\u003c/p\u003e\u003cp\u003e\r\nMessages are sent by pointer and will be deleted by the IPC layer after\r\nthey are dispatched. Therefore, once you can find the appropriate \u003ccode\u003eSend\u003c/code\u003e function, just call it with a new message:\r\n\u003c/p\u003e\u003cpre\u003eSend(new ViewMsg_StopFinding(routing_id_));\u003c/pre\u003e\r\nNotice that you must specify the routing ID in order for the message to\r\nbe routed to the correct View/ViewHost on the receiving end. Both the \u003ccode\u003eRenderWidgetHost\u003c/code\u003e (base class for \u003ccode\u003eRenderViewHost\u003c/code\u003e) and the \u003ccode\u003eRenderWidget\u003c/code\u003e (base class for \u003ccode\u003eRenderView\u003c/code\u003e) have\u003ccode\u003e GetRoutingID()\u003c/code\u003e members that you can use.\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Handling_messages\"\u003e Handling messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nMessages are handled by implementing the \u003ccode\u003eIPC::Listener\u003c/code\u003e interface, the most important function on which is \u003ccode\u003eOnMessageReceived\u003c/code\u003e. We have a variety of macros to simplify message handling in this function, which can best be illustrated by example:\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003cpre\u003eMyClass::OnMessageReceived(const IPC::Message\u0026amp; message) {\u003cbr /\u003e IPC_BEGIN_MESSAGE_MAP(MyClass, message)\u003cbr /\u003e // Will call OnMyMessage with the message. The parameters of the message will be unpacked for you.\u003cbr /\u003e IPC_MESSAGE_HANDLER(ViewHostMsg_MyMessage, OnMyMessage) \u003cbr /\u003e ...\u003cbr /\u003e IPC_MESSAGE_UNHANDLED_ERROR() // This will throw an exception for unhandled messages.\u003cbr /\u003e IPC_END_MESSAGE_MAP()\u003cbr /\u003e}\u003cbr /\u003e\u003cbr /\u003e// This function will be called with the parameters extracted from the ViewHostMsg_MyMessage message.\u003cbr /\u003eMyClass::OnMyMessage(const GURL\u0026amp; url, int something) {\u003cbr /\u003e ...\u003cbr /\u003e}\u003c/pre\u003e\r\n\u003cp\u003e\r\nYou can also use \u003ccode\u003eIPC_DEFINE_MESSAGE_MAP\u003c/code\u003e to implement the function definition for you as well. In this case, do not specify a message variable name, it will declare a \u003ccode\u003eOnMessageReceived\u003c/code\u003e function on the given class and implement its guts.\r\n\u003c/p\u003e\u003cp\u003e\r\nOther macros:\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003cul\u003e\u003cli\u003e \u003ccode\u003eIPC_MESSAGE_FORWARD\u003c/code\u003e: This is the same as \u003ccode\u003eIPC_MESSAGE_HANDLER\u003c/code\u003e but you can specify your own class to send the message to, instead of sending it to the current class.\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cpre\u003eIPC_MESSAGE_FORWARD(ViewHostMsg_MyMessage, some_object_pointer, SomeObject::OnMyMessage)\u003c/pre\u003e\r\n\u003cul\u003e\u003cli\u003e \u003ccode\u003eIPC_MESSAGE_HANDLER_GENERIC\u003c/code\u003e: This allows you to write your own code, but you have to unpack the parameters from the message yourself:\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cpre\u003eIPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_MyMessage, printf(\"Hello, world, I got the message.\"))\u003c/pre\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Security_considerations\"\u003e Security considerations \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003eSecurity bugs in IPC \u003cspan style\u003d\"font-size:10pt\"\u003ecan have \u003c/span\u003e\u003ca href\u003d\"http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html\" style\u003d\"font-size:10pt\"\u003enasty consequences\u003c/a\u003e (file theft, sandbox escapes, remote code execution). Check out our \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/Home/chromium-security/education/security-tips-for-ipc\" style\u003d\"font-size:10pt\"\u003esecurity for IPC\u003c/a\u003e document for tips on how to avoid common pitfalls.\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"Channels\"\u003e Channels \u003c/a\u003e\u003c/h2\u003e\r\n\u003cp\u003e\r\n\u003ccode\u003eIPC::Channel\u003c/code\u003e (defined in \u003cfont color\u003d\"#38761d\"\u003eipc\u003c/font\u003e\u003ccode style\u003d\"font-family:courier new,monospace\"\u003e/\u003cfont color\u003d\"#38761d\"\u003eipc_channel\u003c/font\u003e.h\u003c/code\u003e) defines the methods for communicating across pipes. \u003ccode\u003eIPC::SyncChannel\u003c/code\u003e\r\nprovides additional capabilities for synchronously waiting for\r\nresponses to some messages (the renderer processes use this as\r\ndescribed below in the \"Synchronous messages\" section, but the browser\r\nprocess never does).\r\n\u003c/p\u003e\u003cp\u003eChannels are not thread safe. We often want to send messages\r\nusing a channel on another thread. For example, when the UI thread\r\nwants to send a message, it must go through the I/O thread. For this,\r\nwe use a \u003ccode\u003eIPC::ChannelProxy\u003c/code\u003e.\r\nIt has a similar API as the regular channel object, but proxies\r\nmessages to another thread for sending them, and proxies messages back\r\nto the original thread when receiving them. It allows your object\r\n(typically on the UI thread) to install a \u003ccode\u003eIPC::ChannelProxy::Listener\u003c/code\u003e\r\non the channel thread (typically the I/O thread) to filter out some\r\nmessages from getting proxied over. We use this for resource requests\r\nand other requests that can be handled directly on the I/O thread. \u003ccode\u003eRenderProcessHost\u003c/code\u003e installs a \u003ccode\u003eRenderMessageFilter\u003c/code\u003e object that does this filtering.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"Synchronous_messages\"\u003e Synchronous messages \u003c/a\u003e\u003c/h2\u003e\r\n\u003cp\u003e\r\nSome messages should be synchronous from the renderer's perspective.\r\nThis happens mostly when there is a WebKit call to us that is supposed\r\nto return something, but that we must do in the browser. Examples of\r\nthis type of messages are spell-checking and getting the cookies for\r\nJavaScript. Synchronous browser-to-renderer IPC is disallowed to\r\nprevent blocking the user-interface on a potentially flaky renderer.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003cb\u003eDanger:\u003c/b\u003e Do not handle any synchronous messages in the\r\nUI thread! You must handle them only in the I/O thread. Otherwise, the\r\napplication might deadlock because plug-ins require synchronous\r\npainting from the UI thread, and these will be blocked when the\r\nrenderer is waiting for synchronous messages from the browser.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Declaring_synchronous_messages\"\u003e Declaring synchronous messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nSynchronous messages are declared using the \u003ccode\u003eIPC_SYNC_MESSAGE_*\u003c/code\u003e\r\nmacros. These macros have input and return parameters (non-synchronous\r\nmessages lack the concept of return parameters). For a control function\r\nwhich takes two input parameters and returns one parameter, you would\r\nappend \u003ccode\u003e2_1\u003c/code\u003e to the macro name to get:\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003cpre\u003eIPC_SYNC_MESSAGE_CONTROL2_1(SomeMessage, // Message name\u003cbr /\u003e GURL, //input_param1\u003cbr /\u003e int, //input_param2\u003cbr /\u003e std::string); //result\u003c/pre\u003e\r\n\u003cp\u003e\r\nLikewise, you can also have messages that are routed to the view in which case you would replace \"control\" with \"routed\" to get \u003ccode\u003eIPC_SYNC_MESSAGE_ROUTED2_1\u003c/code\u003e. You can also have \u003ccode\u003e0\u003c/code\u003e\r\ninput or return parameters. Having no return parameters is used when\r\nthe renderer must wait for the browser to do something, but needs no\r\nresults. We use this for certain printing and clipboard operations.\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Issuing_synchronous_messages\"\u003e Issuing synchronous messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nWhen the WebKit thread issues a synchronous IPC request, the request object (derived from \u003ccode\u003eIPC::SyncMessage\u003c/code\u003e) is dispatched to the main thread on the renderer through a \u003ccode\u003eIPC::SyncChannel\u003c/code\u003e object (the same one is also used to send all asynchronous messages). The \u003ccode\u003eSyncChannel\u003c/code\u003e will block the calling thread when it receives a synchronous message, and will only unblock it when the reply is received.\r\n\u003c/p\u003e\u003cp\u003eWhile the WebKit thread is waiting for the synchronous reply,\r\nthe main thread is still receiving messages from the browser process.\r\nThese messages will be added to the queue of the WebKit thread for\r\nprocessing when it wakes up. When the synchronous message reply is\r\nreceived, the thread will be un-blocked. Note that this means that the\r\nsynchronous message reply can be processed out-of-order.\r\n\u003c/p\u003e\u003cp\u003eSynchronous messages are sent the same way normal messages are,\r\nwith output parameters being given to the constructor. For example:\r\n\u003c/p\u003e\u003cp\u003e\r\n\u003c/p\u003e\u003cpre\u003econst GURL input_param(\"http://www.google.com/\");\u003cbr /\u003estd::string result;\u003cbr /\u003econtent::RenderThread::Get()-\u0026gt;Send(new MyMessage(input_param, \u0026amp;result));\u003cbr /\u003eprintf(\"The result is %s\\n\", result.c_str());\u003c/pre\u003e\r\n\u003cp\u003e\r\n\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"Handling_synchronous_messages\"\u003e Handling synchronous messages \u003c/a\u003e\u003c/h3\u003e\r\n\u003cp\u003e\r\nSynchronous messages and asynchronous messages use the same \u003ccode\u003eIPC_MESSAGE_HANDLER\u003c/code\u003e,\r\netc. macros for dispatching the message. The handler function for the\r\nmessage will have the same signature as the message constructor, and\r\nthe function will simply write the output to the output parameter. For\r\nthe above message you would add \u003c/p\u003e\u003cpre\u003eIPC_MESSAGE_HANDLER(MyMessage, OnMyMessage)\u003c/pre\u003e\r\nto the \u003ccode\u003eOnMessageReceived\u003c/code\u003e function, and write:\r\n\u003cp\u003e\r\n\u003c/p\u003e\u003cpre\u003evoid RenderProcessHost::OnMyMessage(GURL input_param, std::string* result) {\u003cbr /\u003e *result \u003d input_param.spec() + \" is not available\";\u003cbr /\u003e}\u003c/pre\u003e\u003cpre\u003e\u003ch3 style\u003d\"font-family:Arial,Verdana,sans-serif;white-space:normal\"\u003e\u003ca name\u003d\"Handling_synchronous_messages\"\u003eConverting message type to a message name\u003c/a\u003e\u003c/h3\u003e\u003cp\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-size:13.3333px;white-space:normal\"\u003eIf you get a crash and you have the message type you can convert this to a message name. The message type will be 32-bit value, the high 16-bits are the class and the low 16-bits are the id. The class is based on the enums in \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eipc/ipc_message_start.h, the id is based on the line number in the file that defines the message. This means that you need to get the exact revision of Chromium in order to accurately get the message name.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eExample of this in \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003ca href\u003d\"https://crbug.com/554011\"\u003e554011\u003c/a\u003e was \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e0x1c0098 at Chromium revision \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003ca href\u003d\"https://crrev.com/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20\"\u003ead0950c1ac32ef02b0b0133ebac2a0fa4771cf20\u003c/a\u003e. That's class 0x1c which is line \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20/ipc/ipc_message_start.h#40\"\u003e40\u003c/a\u003e which matches \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eChildProcessMsgStart. \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eChildProcessMsgStart messages are in content/common/child_process_messages.h and the IPC will be on line 0x98 or line \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20/content/common/child_process_messages.h#152\"\u003e152\u003c/a\u003e which is \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eChildProcessHostMsg_ChildHistogramData.\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eThis technique is particularly useful if you are dealing with crashes caused by \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"background-color:transparent;font-size:13.3333px;white-space:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003econtent::RenderProcessHostImpl::OnBadMessageReceived\u003c/font\u003e\u003c/span\u003e\u003c/p\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/inter-process-communication"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7357830605173012368"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7357830605173012368"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7357830605173012368"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"inter-process-communication"},"sites$revision":{"$t":"22"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9001020975767722444"},"published":{"$t":"2012-02-23T23:03:18.782Z"},"updated":{"$t":"2016-03-30T15:06:25.591Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2015-09-03T03:52:28.831Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Understanding about:tracing results"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cfont size\u003d\"3\"\u003e\u003ci\u003eGetting down with performance in web apps: not for the faint of heart.\u003c/i\u003e\u003c/font\u003e\u003c/span\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003cspan\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e\r\n\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:75%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Intro\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntro\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Background:-How-Chrome-Renders-Web-Pages\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eBackground: How Chrome Renders Web Pages\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Chrome-s-use-of-multiple-processes\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eChrome's use of multiple processes\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-1.-The-Browser-Process\"\u003e\u003cstrong\u003e2.1.1 \u003c/strong\u003e1. The Browser Process\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-2.-Renderer-Processes\"\u003e\u003cstrong\u003e2.1.2 \u003c/strong\u003e2. Renderer Processes\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-3.-The-GPU-Process\"\u003e\u003cstrong\u003e2.1.3 \u003c/strong\u003e3. The GPU Process\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-Message-Loop\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eThe Message Loop\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Web-page-rendering-CSS-layout-reflow-etc-is-lazy\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eWeb page rendering/CSS/layout/reflow/etc is lazy\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Compositing-vs-Software-Mode\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eCompositing vs Software Mode\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Frames-as-in-Frames-Per-Second-\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003eFrames (as in Frames Per Second)\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Software-Mode\"\u003e\u003cstrong\u003e2.5.1 \u003c/strong\u003eSoftware Mode\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Single-threaded-Accelerated-Mode\"\u003e\u003cstrong\u003e2.5.2 \u003c/strong\u003eSingle-threaded Accelerated Mode\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Multi-threaded-Accelerated-Mode\"\u003e\u003cstrong\u003e2.5.3 \u003c/strong\u003eMulti-threaded Accelerated Mode\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-HTML5-Canvas\"\u003e\u003cstrong\u003e2.6 \u003c/strong\u003eHTML5 Canvas\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-WebGL\"\u003e\u003cstrong\u003e2.7 \u003c/strong\u003eWebGL\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Input\"\u003e\u003cstrong\u003e2.8 \u003c/strong\u003eInput\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Javascript-V8\"\u003e\u003cstrong\u003e2.9 \u003c/strong\u003eJavascript/V8\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Navigating-the-Tracing-View\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eNavigating the Tracing View\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Processes-Timelines\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003eProcesses \u0026amp; Timelines\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Trace-Events\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003eTrace Events\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Import-and-Export\"\u003e\u003cstrong\u003e3.3 \u003c/strong\u003eImport and Export\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Investigating-Performance-Problems\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eInvestigating Performance Problems\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Setting-up-a-good-trace-run\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eSetting up a good trace run\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Investigation-strategy\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eInvestigation strategy\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Next:-Fixing-it-\"\u003e\u003cstrong\u003e4.3 \u003c/strong\u003eNext: Fixing it!\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip:-trace-event-color\"\u003e\u003cstrong\u003e4.4 \u003c/strong\u003eTip: trace event color\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Tip:-which-tab-am-I-looking-at-\"\u003e\u003cstrong\u003e4.5 \u003c/strong\u003eTip: which tab am I looking at?\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Glossary:-Common-Trace-Events\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eGlossary: Common Trace Events\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Common-Events\"\u003e\u003cstrong\u003e5.1 \u003c/strong\u003eCommon Events\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-More-Investigation-Strategies\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eMore Investigation Strategies\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Adding-your-own-trace-events\"\u003e\u003cstrong\u003e6.1 \u003c/strong\u003eAdding your own trace events\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Determining-which-IPC-message-is-active\"\u003e\u003cstrong\u003e6.2 \u003c/strong\u003eDetermining which IPC message is active\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Staying-Current\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eStaying Current\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Intro\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIntro\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome’s DevTools are great, but sometimes you’ve got a hitchy animation or page that scrolls slowly and you just need more info on what’s going on. If you want to dig into the guts of Chrome and figure out what the browser’s really doing under the hood, about:tracing is for you.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThis document will walk you through about:tracing and how to use it to diagnose common, basic rendering performance problems. For background we’ll also cover a few concepts central to Chrome’s overall rendering architecture, since artifacts of this architecture show up all over tracing results.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Background:-How-Chrome-Renders-Web-Pages\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBackground: How Chrome Renders Web Pages\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eA key mental backflip one has to do when reading a trace is understand how web concepts are actually executed by Chrome. Once you understand how Chrome works, and its words for common web concepts, you'll feel a lot better moving around in a trace. This section covers a few key concepts to get you started.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Chrome-s-use-of-multiple-processes\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome's use of multiple processes\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFull article: \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/developers/design-documents/multi-process-architecture\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome’s Multi-Process Architecture\u003c/span\u003e\u003c/a\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are three types of processes in Chrome you need to worry about when dealing with graphics:\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-1.-The-Browser-Process\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e1. The Browser Process\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe browser process is the central coordination point for all of Chrome’s renderers (i.e. things actually drawing web pages). We call the browser process CrBrowserMain, and any threads with the same PID as CrBrowserMain are threads within that process.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe browser process receives input from the OS, controls the browser UI (e.g. omnibox, back buttons, the tabstrip, menus, etc). In software mode, it actually puts the image of the webpage on the screen.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-2.-Renderer-Processes\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e2. Renderer Processes\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe renderer process is responsible for a given web page. There are typically many renderer processes running in Chrome at any given time, but just one Browser process. The renderers are all instances of \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eCrRendererMain, and threads with the same PID as a given CrRendererMain are that process’s threads.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome tries to put each tab in its own render process, subject to various restrictions. In general, the rule is different domains go into different processes, up to some memory-defined limit on process count. CrRendererMain is where javascript/html/css/etc is running, and in most cases, it is the bottleneck in your application!\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-3.-The-GPU-Process\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e3. The GPU Process\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome has a single GPU process where GPU accelerated operations are issued to the graphics driver. We call this process CrGpuMain.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eGPU operations are done in a separate process/thread for security and stability reasons. When you use WebGL in JavaScript, or 3D CSS, or accelerated canvas, they are being made in the renderer but then sent asynchronously for actual execution in the GPU process.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-The-Message-Loop\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eThe Message Loop\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eAll threads in Chrome use a message loop, which is roughly a bit of code that does \"while(true) { pop message; run message; }\". A nice feature of about:tracing is that anytime chrome is running a message, it will be traced. This means that if there is no MessageLoop task on a thread, you can have high confidence that that thread is idle.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Web-page-rendering-CSS-layout-reflow-etc-is-lazy\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eWeb page rendering/CSS/layout/reflow/etc is lazy\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003ePositioning and rendering of renderable elements (divs, etc) is done lazily by Webkit. For instance:\u003c/span\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen you move a div, we just set a dirty bit and come around later and actually move it and update the screen.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eSimilarly, when you change an element’s class, we don’t recalculate its new computed style until the last possible minute. We just set a dirty bit.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe actual costs of this laziness show up in the following ways:\u003c/span\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen javascript code asks for a computed style, or we decide it is time [here be dragons], you may see a trace for recalculateStyle. If you see that spiking, you're seeing the interaction of classnames with style cascades and your DOM size/shape. That’s WebKit inspecting your css and classnames and figuring out what things are supposed to look like.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eAt the beginning of a frame [see below for definition], we recompute styles AND get ready to render. There, you will see WebViewImpl::layout, which is both style recalc and also us figuring out what part of (and how) your page should be drawn.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003ePainting/Updating: when we go to make a picture of the screen, we call it painting or updating. This is picture generation, and will usually include costs like bitmap decompression (if needed), complex gradient shading, rounded edges, blurriness, text rendering, and so on.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Compositing-vs-Software-Mode\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eCompositing vs Software Mode\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eFull article: \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eGPU Accelerated Compositing in Chrome\u003c/span\u003e\u003c/a\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eChrome renders in either \"software mode\" or \"accelerated compositing mode\":\u003c/span\u003e\u003cbr /\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eIn software mode, Chrome software rasterizes the webpage into an image and blits it onto the screen using the underlying OS' software drawing primitives. Chrome tracks a \"dirty region\" on the screen to minimize the size of the blits for common operations like blinking cursors, playing videos, and scrolling.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eIn accelerated compositing mode, Chrome breaks the webpage up into layers, and then each layer is composited together using the GPU.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eAdditionally, accelerated mode operates in either single or multi-threaded modes:\u003c/span\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eIn single threaded mode, we periodically stop the webpage to update the screen.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eIn multi-threaded (often referred to as just ‘threaded’) mode, we can update the screen without stopping the webpage, which allows us to scroll the page smoothly or run animations without hitching.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWhat does stopping the web page entail? In effect, the main thread in the renderer process is the thing that needs to do the screen updating. When it’s doing that, it can’t be doing any of the other things that it normally would -- like running JavaScript. Being able to run script while the screen updates is a main motivation both for threaded compositing and for web workers.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe configurations to keep in mind, based on Chrome 18, are:\u003c/span\u003e\r\n\u003cul style\u003d\"font-weight:bold;font-family:Times;font-size:medium;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eAndroid: multi-threaded accelerated mode\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eCrOS: single-threaded accelerated mode\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eDesktop: depends on page content.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen WebGL, Canvas, or 3D CSS is used, single-threaded accelerated mode.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003eOtherwise, software mode is on.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWe’re going to change this as time goes on: we eventually intend to enable multi-threaded accelerated mode on all platforms and pages.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Frames-as-in-Frames-Per-Second-\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eFrames (as in Frames Per Second)\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIt’s important to understand the entire lifecycle of a frame when Chrome is drawing. The key lifecycle events are outlined for each mode below:\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Software-Mode\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSoftware Mode\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIn software mode, a frame can be found by looking for DoDeferredUpdate in the trace. DoDeferredUpdate will run requestAnimationFrame, perform a layout (which is css style recalc plus preparation for rendering), and then paint the screen. We then send the bitmap to the browser where you will see an \"UpdateBackingStore\" which is us putting the resulting picture on the screen.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Single-threaded-Accelerated-Mode\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSingle-threaded Accelerated Mode\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIn single-threaded accelerated mode, a frame can be found by looking for DoDeferredUpdate. DoDeferredUpdate does the same steps as before, but instead of sending the results as pictures to the browser, it sends GL draw calls to the CrGPuMain for every layer.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch5 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Multi-threaded-Accelerated-Mode\" /\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMulti-threaded Accelerated Mode\u003c/span\u003e\u003c/h5\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIn threaded accelerated mode, you have to think of there being two types of frame: the frames generated by the renderer (i.e. what JavaScript can touch), and copies of these frames that are handed to the compositor to draw.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eFrom the renderer / JavaScript perspective, frames can be identified by the \"CCThreadProxy::beginFrame\" trace event, which does the usual steps of calling requestAnimationFrame, doing layout/style recalc, and painting/updating. At the end of a beginFrame, we then \"commit\" the world to the compositor thread. The renderer has produced a single frame.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe compositor thread is then free to draw many frames based on the world it was handed. This is extremely useful because the compositor thread can render many frames e.g. in response to a scroll. Those frames will all be generated from the same “world” (i.e. page state) -- i.e. nothing will have changed from JavaScript, but the compositor thread knows how to handle certain types of other changes like input events (scrolling again) or CSS animations. So even if the renderer is choking on running all your fatty JavaScript, the compositor can continue to serenely scroll the page and run CSS animations on elements. On the compositor’s side of the world, you will see a frame as a CCThreadProxy::scheduledActionDrawAndSwap.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-HTML5-Canvas\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eHTML5 Canvas\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eCanvas can be software-accelerated or GPU-accelerated. \u003ccode\u003eabout:gpu\u003c/code\u003e will show you which is the case for your browser / computer configuration. In non-accelerated mode, canvas calls are executed immediately using software rasterization and are blocking operations in the main thread of the renderer. In accelerated mode, canvas calls are converted to GL commands and issued to the CrGpuMain process for execution. This rendering is ‘deferred’ so the commands are issued to the GPU process and the main thread is free to continue to run JavaScript while the GPU process actually renders them and updates the screen.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-WebGL\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eWebGL\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWebGL is always GPU accelerated. Your WebGL calls are marshalled into a command buffer and shipped to CrGpuMain where we unpack the commands and make the equivalent GL or DirectX calls.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIf your command buffer fills up, or you call a GL function that requires an answer from the underlying driver, e.g. glGetError or glGetUniform, you will see FlushSync call. This FlushSync blocks on the GPU process executing whatever command you issued and ruins performance.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Input\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eInput\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eInput events are received from the system by the Browser process and then forwarded to the renderer process.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen tracing an input event, first look for a (very small) ForwardInputEvent message in CrBrowserMain. This is the browser receiving the input event and forwarding it to the renderer. After the ForwardInputEvent happens, the render process will get a HandleInputEvent message. You will see events inside that HandleInputEvent if it got forwarded into JavaScript.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eNote that for flow control reasons, CrBrowserMain will not send more than 1 input to the renderer process at a time. Rather, it waits on sending another input until the previous one is acknowledged. The renderer will acknowledge input events immediately, most of the time. The one exception is mouse moves/scrolls -- if the screen is dirty (e.g. a DoDeferredUpdate is necessary), then the renderer will not reply to an input until the DoDeferredUpdate completes.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Javascript-V8\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eJavascript/V8\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWhen JavaScript is running, you will (usually) see traces for things that begin with V8. We haven't instrumented every single thing, but you will see v8.run or v8.callfunction for common cases. See the below glossary of common trace events for additional V8 functions that are instrumented (e.g. for event listener callbacks, setTimeout/setInterval callbacks, etc).\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eMany JS APIs interact with the browser process synchronously. E.g. cookie access, IndexedDB operations, synchronous XHR/network operations. When that happens, you can bracket the suspicious operation with console.time/timeEnd calls and look on the browser process for activity that appears correlated with your JS code. See More Investigation Strategies below for examples of how to do this.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h3\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Navigating-the-Tracing-View\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNavigating the Tracing View\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eNow that you’ve got the theory down, how do you actually interact with the tracing tool?\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThis trace assumes that you have opened up a fresh browser, and opened Wikipedia in one tab and about:tracing in another, hit record in the tracing tab and scrolled a bit in the WikiPedia tab, then stopped the recording. More detailed directions on how to do that are\u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(0,0,0);font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(71,18,100);font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003ehere\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-weight:bold;font-family:Times;font-size:medium\"\u003e\u003ca name\u003d\"TOC-Processes-Timelines\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eProcesses \u0026amp; Timelines\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce you have a trace recorded, you should get something like the following:\u003c/span\u003e\u003c/span\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.46.48%20PM.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441252029512/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.46.48%20PM.png\" width\u003d\"700\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is a visualization of the recorded trace. What you’re seeing is Chrome's multi-process architecture at work, scrolling your page. The first thing to notice is that there are three processes running: the browser (pid\u003d17965), the renderer process for about:tracing (pid\u003d17974) and the renderer process for Wikipedia (pid\u003d17982).\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eEach process has a separate horizontal track, filled with trace events. The track is basically an event timeline for events on that thread/process. Events are the colored, rectangular blocks on the timeline tracks. Time moves from left to right.\u003c/span\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441251917450/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\"\u003e\u003ca name\u003d\"TOC-Trace-Events\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eTrace Events\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eIn this case, the data being shown is ~10 seconds, broken down as follows:\u003c/span\u003e\u003c/b\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441251914720/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eThe keyboard can be used to zoom and pan around inside the timeline. The ‘w’ and ‘s’ keys zoom in centered around the mouse, and the ‘a’ and ‘d’ keys pan the timeline left and right. So, with a bit of zooming around, we can look at how a single mousewheel event propagates through Chrome:\u003c/span\u003e\u003c/b\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-2\" /\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441251910822/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/h3\u003e\r\n\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eA single rectangle represents a TRACE_EVENT: where it began, and where it ended. When you see a stack of different rectangles on top of each other, it means that trace events were issued inside one another on the same thread. For example:\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003efoo() {\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e sleep 10ms\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e bar()\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e sleep 5ms\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e}\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003ebar() {\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e sleep 5ms\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"margin-left:30pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e}\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-size:13px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWould look like this:\u003c/span\u003e\u003c/b\u003e\r\n\u003cdiv\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441251905766/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTo study individual rectangles, you can click on them. This will display information about the rectangle: its \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eDuration\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e, \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThreadDuration\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e (CPU time), \u003c/span\u003e\u003cspan style\u003d\"vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSelfTime\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e (time spent in the current slice, subtracting the time\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"vertical-align:baseline;background-color:transparent\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eof all the children slices), \u003cb\u003eThreadSelfTime\u003c/b\u003e (CPU time spent in the current slice, subtracting the CPU time for all the children) and \u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eOccurrences\u003c/b\u003e\u003c/span\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e (the number of times that event appeared in the selection).\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eThe information is sortable. Clicking on a title from the info table will expand all the slices for that event.\u003cbr /\u003e\r\n\u003c/span\u003e\u003cbr /\u003e\r\nFor the Foo/Bar example, the SelfTime for Foo will be 15ms (20 - 5), while the SelfTime for Bar will be 5ms (Since it has no know children).\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eThe ThreadDuration is not available for all events and for all platforms, the SelfTime is omitted in cases where the Slice has no known children. \u003c/font\u003e\u003cspan style\u003d\"background-color:transparent\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eAsynchronous events has no SelfTime by def\u003c/font\u003e\u003cfont size\u003d\"2\"\u003einition.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIn addition to clicking, you can drag the mouse in a rectangle over a group of trace events. This will give you a list of events that intersect that rectangle and summarize them for you:\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\" style\u003d\"font-family:Times;font-size:medium\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003cb style\u003d\"font-family:Times;font-size:medium\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:center;margin-right:auto;margin-left:auto\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1394074376859/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003c/b\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Import-and-Export\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eImport and Export\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eOnce recorded, you can give a trace file to someone else. Just press the save button. The resulting file is just JSON.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTo load a trace, use the load button, or grab the standalone trace viewer from \u003c/span\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:13px;white-space:pre-wrap\"\u003e\u003ca href\u003d\"https://github.com/catapult-project/catapult/tree/master/tracing\" rel\u003d\"nofollow\"\u003ehttps://github.com/catapult-project/catapult/tree/master/tracing\u003c/a\u003e \u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-3\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/h3\u003e\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Investigating-Performance-Problems\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eInvestigating Performance Problems\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNow that you can navigate the basic view, let’s dive into a basic strategy for investigating a performance problem. Here’s an overview:\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Setting-up-a-good-trace-run\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eSetting up a good trace run\u003c/span\u003e\u003c/h4\u003e\r\n\u003col style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStart with only the tab you’re investigating and about:tracing open in a fresh browser session (see below for other methods of figuring out which tab is which if you need multiple).\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSet up the tab for investigation to right before the point where the problem will occur (e.g. right before an animation is going to be triggered, or right before part of the page that scrolls slowly)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStart a tracing run in the about:tracing tab\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSwitch to the tab under investigation\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePause for a couple seconds to record empty space on the timeline (makes finding it later easier)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePerform the action to trigger the bad performance behavior (e.g. start the animation or scroll the page). Keeping the recorded activity under 10 seconds is a good idea.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePause again\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSwitch back to the about:tracing tab and stop the recording.\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Investigation-strategy\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eInvestigation strategy\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eNow let’s find a problematic frame and see what caused the hitch or slowdown. See below for more details on the trace events \u003c/span\u003e\r\n\u003col style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook for the pause right before you started the problem action\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce you’ve found the beginning of the problem area, look for regular patterns that indicate drawing updates.\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe entire time the renderer process is busy (i.e. doing anything at all) will be marked by MessageLoop::RunTask\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA regular draw update will usually start with one of:\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ean input event (RenderWidget::OnHandleInputEvent)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ea requestAnimationFrame callback (RenderWidget::AnimationCallback)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ea timer firing (ScheduledAction::Execute)\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e...and the actual drawing is done in RenderWidget::DoDeferredUpdate\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce you’ve found the pattern indicating frame updates by looking for a regular block of trace events and zooming in to confirm that they’re being called from what you expect, zoom back out to look for a problem area\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you’re investigating a hitch, look for an interruption to the regular pattern -- a block of tracing events that takes longer than the others.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you’re investigating general slowness (e.g. scrolling), check to see if the entire draw block from the triggering event to the end of the deferred update are over frame budget (i.e. longer than 16ms on a 60hz screen).\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eOnce you’ve identified a problem frame, it’s time to figure out what caused that frame to take too long. Options are:\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePaint time\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook for PaintRect or CCLayerTreeHost::UpdateLayers events that take too long\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLayout\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook for WebViewImpl::layout events that take too long\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eJPEG decode/resize\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook for ImageOperations::ResizeSubPixel or ImagerOperations::ResizeBasic\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHeavy input handling\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-roman;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLook for too much activity in RenderWidget::OnHandleInputEvent\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/ol\u003e\r\n\u003cli style\u003d\"list-style-type:decimal;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAn orthogonal option is that you’re GPU bound.\u003c/span\u003e\u003c/li\u003e\r\n\u003col style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you have a ton of activity in the GPU process the card can be swamped -- in this case the renderer process might not be doing anything (won’t be in MessageLoop::RunTask) while the GPU is working feverishly. Look for lots of events in the GPU process but few in the renderer.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:lower-alpha;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eContent updates as the GPU draws are under GPUScheduler::PutChanged, while the actual screen is updated (timed with a screen refresh, as Chrome vsyncs) during GLContext::SwapBuffers\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003c/ol\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Next:-Fixing-it-\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eNext: Fixing it!\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eWhat to do next depends on the nature of the problem. Options are:\u003c/span\u003e\r\n\u003cul style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLong paint times or long layout\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePaint’s show up in the web inspector’s timeline, too, so if you determine that your problem is heavy paints you can use the inspector to figure out when these paints are happening relative to your JavaScript events.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003eYou can also turn on the Chrome flag \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e--\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003eshow\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e-\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003epaint\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap\"\u003e-\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;vertical-align:baseline;white-space:pre-wrap\"\u003erects\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;vertical-align:baseline;white-space:pre-wrap\"\u003e to see which areas of the screen are painted when, which can help identify what’s being painted (and from there try to reduce the amount or frequency of what’s being painted).\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eModify your CSS styles to try to isolate and remove the problem. \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;font-weight:bold;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is by far the highest leverage way to make a site faster! \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIterate in the following loop:\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRemove one of:\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAn entire element\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA single CSS style (e.g. CSS class)\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eA single style modification (e.g. if you set style in JS)\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGrab another trace of the page\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eCheck if the paint times (PaintRect or UpdateLayers) or style recalculation and layout (WebViewImpl::layout) times have gone down.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf they have, you’ve found your culprit (possibly one of many). Start adding parts of the style back in (if you removed a whole class) or experiment with an alternative way of getting the same visual effect but with different style rules.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf they haven’t, repeat the whole process and remove more.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cul style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eHeavy input\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eYou should be doing as little as possible in your input handlers. Ensure that your V8EventListener::callListenerFunction inside of RenderWidget::OnHandleInputEvent take minimal time by simply saving some state in your input handler and then actually \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eacting\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e on that state in your requestAnimationFrame callback, for instance.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eJPEG decode/resize\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eUnfortunately there isn’t a lot to do here at the moment. You can attempt to size your source images such that they won’t get resized, and you can attempt to invalidate them less frequently, but if necessary JPEG operations are what’s causing your woes there isn’t much you can do.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGPU bound\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf your page is composited and drawing to the GPU, make sure you aren’t invalidating more layers than necessary.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf only one thing is moving on the screen (e.g. an animation) it should be in its own layer\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you’re scrolling and everything needs to be updated, you want to ensure that things that aren’t changing are in their own layers so they don’t get invalidated and can just be translated on the GPU\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eBut, if you have too many layers you’ll overwhelm the GPU -- so don’t put everything in its own layer just for the sake of it.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eIn the future, we’ll have a way to see which layers are invalidated when (like \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e--show-paint-rects\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e but for composited mode), but it’s not finished yet.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAn easy way to force layer creation is to add a -webkit-transform:translateZ(0) to an element, which will stick it in its own layer but have no visual effect.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAn easy way to see what layers are being created for what content is to use the “show composited layer render borders” in about:flags.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Tip:-trace-event-color\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eTip: trace event color\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eTrace event types will have a common color across all runs and processes. This means that common events like MessageLoop::RunTask are always the same color, making them easy to identify.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Tip:-which-tab-am-I-looking-at-\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eTip: which tab am I looking at?\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIt can be difficult to discern which tab is which in the renderer process. The easiest way by far to do this is just not to run any other tabs when you’re doing a tracing run. This way you’ll only end up with two renderer processes (one for about:tracing, one for your content tab)\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAnother method is to use about:memory, which lists all tabs, apps, and background pages along with their titles and process IDs. You can figure out which process ID you’re interested in here and then refer to the renderer with that process ID in about:tracing.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Glossary:-Common-Trace-Events\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eGlossary: Common Trace Events\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eThere are a few common scenarios that can cause performance to suffer that the tracing tool is good at identifying. These examples are meant to give you some guidance on common signposts to look for.\u003c/span\u003e\u003cbr /\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Common-Events\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eCommon Events\u003c/span\u003e\u003c/h4\u003e\r\n\u003cul style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMessageLoop::RunTask\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis notes that the process is busy. It’s important to tell when the process is even attempting to do anything vs. not, especially when trying to track down if performance problems are in the renderer, browser, or GPU processes.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRenderWidget::OnHandleInputEvent\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is the browser handling an input event. Your JS event handling will also be in here as a sub-event (V8EventListener::callListenerFunction), and you can determine if that’s taking longer than it should.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eRenderWidget::DoDeferredUpdate\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is the renderer process updating the screen.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eNote that content may not go to the screen immediately because it’s a \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003edeferred\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e update -- textures may be passed to the GPU process and from there to an eventual screen buffer, but these various buffering layers can cause delays.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe basic steps in a draw are:\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAnimation\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eLayout (see \u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:square;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePainting and compositing in software, or updating and drawing on the GPU\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eV8EventListener::callListenerFunction\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is V8 executing an event listener callback, probably deferring to JS code you actually wrote. It’s a good place to stick your own trace events for further detail (see below).\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eWebViewImpl::layout\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is page re-layout, which can be caused by DOM structure and style changes.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePage layout shows up in the web inspector’s timeline, too, so if you determine your problem is layout taking too long you can use the web inspector’s timeline to track it down (i.e. making changes to your page to try to reduce the time or frequency of layout).\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003ePaintRect\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is the renderer painting part of the screen that was invalidated.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eSee “Fixing it” above for strategies on what to do if this is taking too long.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eScheduledAction::Execute\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is a \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003esetTimeout\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e or \u003c/span\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003esetInterval\u003c/span\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003e event firing.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eAgain, these show up in the web inspector so if you determine that a setTimeout event is getting in the way (blocking the renderer from drawing and causing a hitch, for instance) you can use the inspector to more easily identify and disect the related JavaScript.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli style\u003d\"list-style-type:disc;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eImageOperations::ResizeBasic and ImageOperations::ResizeSubPixel\u003c/span\u003e\u003c/li\u003e\r\n\u003cul style\u003d\"margin-top:0pt;margin-bottom:0pt\"\u003e\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThis is an image being resized, which can be expensive.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"list-style-type:circle;font-size:15px;font-family:Arial;background-color:transparent;font-weight:normal;vertical-align:baseline\"\u003e\u003cspan style\u003d\"font-size:13px;background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eThe best way to optimize these is probably to avoid them entirely whenever possible, e.g. by sizing your images correctly, but sometimes they’re unfortunately unavoidable.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-More-Investigation-Strategies\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eMore Investigation Strategies\u003c/span\u003e\u003c/h3\u003e\r\n\u003ch4 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Adding-your-own-trace-events\" /\u003e\u003cspan style\u003d\"font-size:15px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:normal;font-style:italic;vertical-align:baseline;white-space:pre-wrap\"\u003eAdding your own trace events\u003c/span\u003e\u003c/h4\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eIf you’re having trouble figuring out what part of your code maps to what part of the trace, it can be invaluable to add your own trace events. By doing so from JavaScript you can drop annotations onto the trace timeline, allowing easy identification of key points in your code (for instance, the beginning of a draw loop or the entrance of a particularly complicated bit of JS you fear is blowing your frame budget).\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eAdding your own events is as simple as calling \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econsole.time()\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e and \u003c/span\u003e\u003cspan style\u003d\"font-family:Courier New;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003econsole.timeEnd()\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e:\u003c/span\u003e\u003cbr /\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003efunction Foo() {\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e console.time(“Foo”);\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e var now \u003d Date.now();\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e while (Date.now() \u0026lt; now + 1000);\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e console.timeEnd(\"Foo\");\u003c/span\u003e\u003c/p\u003e\r\n\u003cp dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold;margin-left:36pt;margin-top:0pt;margin-bottom:0pt\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Courier New;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003e}\u003c/span\u003e\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003eSee \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003cspan style\u003d\"font-size:13px;font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003ethis page\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:Arial;font-size:13px;font-weight:normal;vertical-align:baseline;white-space:pre-wrap;background-color:transparent\"\u003e for more information on adding your own trace events to C++ code.\u003c/span\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\u003cdiv\u003e\u003ch4 dir\u003d\"ltr\"\u003e\u003ca name\u003d\"TOC-4\" /\u003e\u003cfont color\u003d\"#666666\" face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;font-weight:normal;white-space:pre-wrap\"\u003e\u003ci\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\u003ch4 dir\u003d\"ltr\"\u003e\u003ca name\u003d\"TOC-Determining-which-IPC-message-is-active\" /\u003e\u003cfont color\u003d\"#666666\" face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;font-weight:normal;white-space:pre-wrap\"\u003e\u003ci\u003eDetermining which IPC message is active\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h4\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eTo determine what IPC message corresponds with the class and line shown in the trace:\u003c/span\u003e\u003cbr style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\" /\u003e\r\n\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eClick on the \u003c/span\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eevent and note the class and line values.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt;background-color:transparent\"\u003ee.g. \u003ccode\u003eclass: 41, line: 783\u003c/code\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eOpen the \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/ipc/ipc_message_start.h\"\u003eipc/ipc_message_start.h\u003c/a\u003e for your build. \u003c/span\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt;background-color:transparent\"\u003eProtip: If it's not ToT, you can pull the git hash from about:version and replace `master` in the URL with the hash.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003e\u003cspan style\u003d\"font-size:13.3333330154419px\"\u003eLook at the IPCMessageStart enum to find your class. (If the enum values start at line 12, you'll find your class type on line \u003ccode\u003ex+12 \u003c/code\u003e;) \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003ee.g. class 41 maps to \u003c/span\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/4d31269c6cafb98eced74df70f5d1ccde3af0a44/ipc/ipc_message_start.h\" style\u003d\"font-size:10pt;font-family:arial,sans-serif;background-color:transparent\"\u003eline 53\u003c/a\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(34,34,34);font-family:arial,sans-serif;background-color:transparent\"\u003e: \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003eExtensionMsgStart\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003eAmongst \u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#search/\u0026amp;q\u003df:_messages.h\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\"\u003ethe xxx_messages.h files\u003c/a\u003e, open the one that contains your class. \u003c/font\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:10pt;background-color:transparent\"\u003ee.g. Our match is in\u003ca href\u003d\"https://code.google.com/p/chromium/codesearch#chromium/src/extensions/common/extension_messages.h\u0026amp;q\u003df:_messages.h%20ExtensionMsgStart\u0026amp;sq\u003dpackage:chromium\u0026amp;type\u003dcs\u0026amp;l\u003d33\"\u003e extension_messages.h\u003c/a\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"color:rgb(34,34,34);font-family:arial,sans-serif\"\u003eLook at the corresponding line number in the xxx_messages.h file. Your desired declaration will typically be \u003ci\u003eending\u003c/i\u003e on the given line.\u003c/span\u003e\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003ee.g. Line 783 is the end of the \u003c/span\u003e\u003ccode style\u003d\"font-size:10pt;background-color:transparent\"\u003eExtensionHostMsg_DetailedConsoleMessageAdded\u003c/code\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003e declaration. We've found our message!\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/ol\u003e\r\n\u003cdiv style\u003d\"text-align:center\"\u003e\r\n\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.39.51%20PM.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"font-size:10pt\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1441251623397/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.39.51%20PM.png\" /\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont color\u003d\"#222222\" face\u003d\"arial, sans-serif\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003ch3 dir\u003d\"ltr\" style\u003d\"font-family:Times;font-size:medium;font-weight:bold\"\u003e\u003ca name\u003d\"TOC-Staying-Current\" /\u003e\u003cspan style\u003d\"font-size:16px;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap\"\u003eStaying Current\u003c/span\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-family:Arial;font-size:13px;background-color:transparent;font-weight:normal;vertical-align:baseline;white-space:pre-wrap\"\u003eWe continuously add new events and features to about:tracing to help us figure out what’s going on inside of Chrome. Some of the images above may not reflect all of these features, so don’t be surprised if there are new threads and events in your about:tracing view that aren’t listed here -- all follow the same basic pattern. We welcome additional documentation and use cases.\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702888333079561327"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/trace-event-profiling-tool/trace-event-reading"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9001020975767722444"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9001020975767722444"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9001020975767722444"}],"author":[{"name":{"$t":"Nathaniel Duca"},"email":{"$t":"nduca@chromium.org"}}],"sites$pageName":{"$t":"trace-event-reading"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"KXsmYD9aEg..\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6292183399324108230"},"published":{"$t":"2008-11-12T00:06:54.152Z"},"updated":{"$t":"2016-03-25T15:11:49.641Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-25T15:11:47.971Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Build Instructions (Windows)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cb\u003eWindows build instructions have been moved! See them \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md\"\u003ehere.\u003c/a\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/build-instructions-windows"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6292183399324108230"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6292183399324108230"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6292183399324108230"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$pageName":{"$t":"build-instructions-windows"},"sites$revision":{"$t":"334"}},{"gd$etag":"\"XCl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4883956482089151969"},"published":{"$t":"2012-01-04T21:43:21.872Z"},"updated":{"$t":"2016-03-15T14:20:29.688Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-15T14:20:28.221Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Profile Architecture"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ci\u003eThis page details an ongoing design refactoring, started in \u003cb\u003eJanuary 2012\u003c/b\u003e.\u003c/i\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#ff0000\"\u003eNote: As of Jun 2013, this doc needs updating. The classes have been renamed (s/ProfileKeyed/BrowserContextKeyed/) and moved into components/browser_context_keyed_service.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eChromium has lots of features that hook into a \u003cb\u003eProfile\u003c/b\u003e, a bundle of data about the current user and the current chrome session that can span multiple browser windows. When Chromium first started, the profile had only a few moving parts: the cookie jar, the history database, the bookmark database, and things to do with user preferences. In the three years of the Chromium Project, Profile became the join point for every feature, leading to things like Profile::GetInstantPromoCounter() or Profile::GetHostContentSettingsMap(). As of this writing there are 58 pure virtual methods that start with \"Get\" in Profile.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eProfile should be a minimal reference, a sort of handle object that doesn't own the world.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:450px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Design-Goals\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eDesign Goals\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-BrowserContextKeyedServiceFactory\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eBrowserContextKeyedServiceFactory\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-Old-Way:-Profile-interface-and-ProfileImpl\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eThe Old Way: Profile interface and ProfileImpl\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-New-Way:-BrowserContextKeyedServiceFactory\"\u003e\u003cstrong\u003e2.2 \u003c/strong\u003eThe New Way: BrowserContextKeyedServiceFactory\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-A-Few-Types-of-Factories\"\u003e\u003cstrong\u003e2.3 \u003c/strong\u003eA Few Types of Factories\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-A-Brief-Interlude-About-Complexity\"\u003e\u003cstrong\u003e2.4 \u003c/strong\u003eA Brief Interlude About Complexity\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Dependency-Management-Overview\"\u003e\u003cstrong\u003e2.5 \u003c/strong\u003eDependency Management Overview\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-Five-Minute-Tutorial-of-How-to-Convert-Your-Code\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eThe Five Minute Tutorial of How to Convert Your Code\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Debugging-Tips\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eDebugging Tips\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Using-the-dependency-visualizer\"\u003e\u003cstrong\u003e4.1 \u003c/strong\u003eUsing the dependency visualizer\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Crashes-at-Shutdown\"\u003e\u003cstrong\u003e4.2 \u003c/strong\u003eCrashes at Shutdown\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Design-Goals\" /\u003eDesign Goals\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003eWe must be able to move to the new architecture piece-wise.\u003c/b\u003e One service and feature at a time. We can not stop the world and convert everything in one operation. As of this writing, we've moved 19 services out of Profile.\u003c/li\u003e\u003cul\u003e\u003cli\u003eWe should only make small modifications at the callsite where a Profile is used to get the service in question.\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cb\u003eWe must fix Profile shutdown.\u003c/b\u003e When we started and only had a few objects hanging off of Profile, manual ordering was acceptable for destruction. Now we have over seventy five components and we know that our manual destruction ordering is incorrect as written today. We can not rely on manual ordering when we have so many components.\u003c/li\u003e\u003cli\u003e\u003cb\u003eWe must allow features to be compiled in and out.\u003c/b\u003e Now that we have chromium variants that don't contain all the features in a standard Windows/Mac/Linux Google Chrome build, we need a way to allow these variants to compile without #ifdefing profile.h and profile_impl.h into a mess. These variants also have their own services that they'd like to provide. (Letting chromium variants add their own services also touches on why we can't rely on manual ordering in Profile shutdown.)\u003c/li\u003e\u003cul\u003e\u003cli\u003eStretch goal: Separate features go in their own .a/.so files to further minimize our ridiculous linking time.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-BrowserContextKeyedServiceFactory\" /\u003eBrowserContextKeyedServiceFactory\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-The-Old-Way:-Profile-interface-and-ProfileImpl\" /\u003eThe Old Way: Profile interface and ProfileImpl\u003c/h3\u003e\u003cdiv\u003eIn the previous design, services were fetched through an accessor on Profile:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eclass ProfileImpl {\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e public:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e virtual FooService* GetFooService();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e private:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e scoped_ptr\u0026lt;FooService\u0026gt; foo_service_;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e};\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn the previous system, Profile was an interface with mostly pure virtual accessors. There were separate versions of Profile for Normal, Incognito and Testing profiles.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn this world, the Profile was the center of all activity. The profile owned all of its service and handed them out. Profile destruction was according to whatever order the services were listed in ProfileImpl. There wasn't a way for another variant to add its own services (or leave out ones it didn't need) without modifying the Profile interface.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-The-New-Way:-BrowserContextKeyedServiceFactory\" /\u003eThe New Way: BrowserContextKeyedServiceFactory\u003c/h3\u003e\u003cdiv\u003eInstead of having the Profile own FooService, we have a dedicated singleton FooServiceFactory, like this minimal one:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eclass FooServiceFactory : public BrowserContextKeyedServiceFactory {\u003cbr /\u003e public:\u003cbr /\u003e static FooService* GetForProfile(Profile* profile);\u003cbr /\u003e\u003cbr /\u003e static FooServiceFactory* GetInstance();\u003cbr /\u003e\u003cbr /\u003e private:\u003cbr /\u003e friend struct DefaultSingletonTraits\u0026lt;FooServiceFactory\u0026gt;;\u003cbr /\u003e\u003cbr /\u003e FooServiceFactory();\u003cbr /\u003e virtual ~FooServiceFactory();\u003cbr /\u003e\u003cbr /\u003e // BrowserContextKeyedServiceFactory:\u003cbr /\u003e virtual BrowserContextKeyedService* BuildServiceInstanceFor(\u003cbr /\u003e content::BrowserContext* context) const OVERRIDE;\u003cbr /\u003e};\u003c/font\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe have a generalized \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserContextKeyedServiceFactory\u003c/font\u003e which performs most of the work of associating a profile with an object provided by your \u003cfont face\u003d\"'courier new', monospace\"\u003eBuildServiceInstanceFor()\u003c/font\u003e method. The BrowserContextKeyedServiceFactory provides an interface for you to override while managing the lifetime of your Service object in response to Profile lifetime events and making sure your service is shut down before services it depends on.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAn absolutely minimal factory will supply the following methods:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eA static \u003cfont face\u003d\"'courier new', monospace\"\u003eGetInstance()\u003c/font\u003e method that refers to your Factory as a Singleton.\u003c/li\u003e\u003cli\u003eA constructor that associates this \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserContextKeyedServiceFactory\u003c/font\u003e with the \u003cfont face\u003d\"'courier new', monospace\"\u003eProfileDependencyManager\u003c/font\u003e singleton, and makes \u003cfont face\u003d\"'courier new', monospace\"\u003eDependsOn()\u003c/font\u003e declarations.\u003c/li\u003e\u003cli\u003eA \u003cfont face\u003d\"'courier new', monospace\"\u003eGetForProfile()\u003c/font\u003e method that wraps \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserContextKeyedServiceFactory\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, casting the result back to whatever type you need to return.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eA \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eBuildServiceInstanceFor()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e method which is called once by the framework for each |\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eprofile\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e|, which must return a proper instance of your service.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIn addition, BrowserContextKeyedServiceFactory provides these other knobs for how you can control behavior:\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eRegisterUserPrefs()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e is called once per Profile during initialization and is where you can place any user pref registration.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBy default, BCKSF return NULL when given an Incognito profile.\u003c/font\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you override \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eServiceRedirectedInIncognito()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to return true, it will return the associated normal Profile's service.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIf you override \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eServiceHasOwnInstanceInIncognito()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to return true, it will create a new service for the incognito profile.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBy default, BCKSF will lazily create your service. If you override \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eServiceIsCreatedWithProfile()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e to return true, your service will be created alongside the profile.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBCKSF gives you multiple ways to control behavior during unit tests. See the header for more details.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBCKSF gives you a way to augment and tweak the shutdown and deallocation behavior.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-A-Few-Types-of-Factories\" /\u003eA Few Types of Factories\u003c/h3\u003e\u003cdiv\u003eNot all objects have the same lifecycle and memory management. The previous paragraph was a major simplification; there is a base class \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eBrowserContextKeyedBaseFactory\u003c/span\u003e that defines the most general dependency stuff while \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eBrowserContextKeyedServiceFactory\u003c/span\u003e is a specialization that deals with normal objects. There is a second \u003cspan style\u003d\"font-family:courier new,monospace\"\u003eRefcountedBrowserContextKeyedServiceFactory\u003c/span\u003e that gives slightly different semantics and storage for RefCountedThreadSafe objects.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-A-Brief-Interlude-About-Complexity\" /\u003eA Brief Interlude About Complexity\u003c/h3\u003e\u003cdiv\u003eSo the above, from an implementation standpoint is significantly more complex than what came before it. Is all this really worth it?\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eYes.\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eWe absolutely have to address the interdependency of services. As it stands today, we do not shut down profiles after they are no longer needed in multiprofile mode because our crash rate when shutting down a profile is too high to ship to users. We have about 75 components that plug into the profile lifecycle and their dependency graph is complex enough that our naive manual ordering can not handle the complexity. All of the overrideable behavior above exists because it was implemented per service, ad hoc and copy pasted.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe likewise need to make it easy for other chromium variants to add their own features/compile features out of their build.\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Dependency-Management-Overview\" /\u003eDependency Management Overview\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eWith that in mind, let's look at how dependency management works. There is a single \u003cfont face\u003d\"'courier new', monospace\"\u003eProfileDependencyManager\u003c/font\u003e singleton, which is what is alerted to \u003cfont face\u003d\"'courier new', monospace\"\u003eProfile\u003c/font\u003e creation and destruction. A PKSF will register and unregister itself with the \u003cfont face\u003d\"'courier new', monospace\"\u003eProfileDependencyManager\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. The job of the ProfileDependencyManager is to make sure that individual services are created and destroyed in a safe ordering.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eConsider the case of these three service factories:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eAlphaServiceFactory::AlphaServiceFactory()\u003cbr /\u003e : BrowserContextKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {\u003cbr /\u003e}\u003cbr /\u003e\u003cbr /\u003eBetaServiceFactory::BetaServiceFactory()\u003cbr /\u003e :\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e BrowserContextKeyedServiceFactory(\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003eProfileDependencyManager::GetInstance()) \u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e{\u003cbr /\u003e DependsOn(AlphaServiceFactory::GetInstance());\u003c/span\u003e\u003c/blockquote\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e }\u003c/span\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eGammaServiceFactory::GammaServiceFactory()\u003cbr /\u003e :\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e BrowserContextKeyedServiceFactory(\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003eProfileDependencyManager::GetInstance()) \u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e{\u003cbr /\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e DependsOn(BetaServiceFactory::GetInstance());\u003c/span\u003e\u003c/blockquote\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e }\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe explicitly stated dependencies in this simplified graph mean that the only valid creation order for services is [Alpha, Beta, Gamma] and the destruction order is [Gamma, Beta, Alpha]. The above is all you, as a user of the framework, have to do to specify dependencies.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eBehind the scenes, \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eProfileDependencyManager\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e takes the stated dependency edges, performs a Kahn topological sort, and uses that in \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eCreateProfileServices()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e and \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eDestroyProfileServices()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-Five-Minute-Tutorial-of-How-to-Convert-Your-Code\" /\u003eThe Five Minute Tutorial of How to Convert Your Code\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cb\u003eMake Your Existing FooService derive from BrowserContextKeyedService.\u003c/b\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:small\"\u003eIf possible, make your FooService no longer refcounted.\u003c/span\u003e\u003cspan style\u003d\"font-weight:normal;font-size:small\"\u003e \u003c/span\u003e\u003c/b\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal;font-size:small\"\u003eMost of the refcounted objects that hang off of Profile appear to be that way because they aren't using \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/design-documents/threading#Runnable_methods\" style\u003d\"font-weight:normal;font-size:small\"\u003ebase::bind/WeakPtrFactory\u003c/a\u003e\u003cspan style\u003d\"font-weight:normal;font-size:small\"\u003e instead of needing to own data on multiple threads. (In case you have a real reason for being a RefCountedThreadSafe, such as being accessed on multiple threads, derive your factory from \u003c/span\u003e\u003c/b\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003eRefcountedBrowserContextKeyedServiceFactory\u003c/span\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal;font-size:small\"\u003e and everything should just work.)\u003c/span\u003e\u003c/b\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eBuild a simple FooServiceFactory derived from BrowserContextKeyedServiceFactory. \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:small\"\u003eYour FooServiceFactory will be the main access point consumers will ask for FooService. \u003c/span\u003eBrowserContextKeyedServiceFactory\u003cspan style\u003d\"font-size:small\"\u003e gives you a bunch of virtual methods that control behavior.\u003c/span\u003e\u003c/li\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eBrowserContextKeyedService* BrowserContextKeyedServiceFactory::BuildServiceInstanceFor(content::BrowserContext* context)\u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-size:16px;font-weight:bold\"\u003e \u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003eis the only required method. Given a BrowserContext handle, return a valid FooService.\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"arial, sans-serif\" style\u003d\"font-size:16px;font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eYou can control the incognito behavior with \u003c/span\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:16px\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eServiceRedirectedInIncognito()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e and \u003c/font\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:16px\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eServiceHasOwnInstanceInIncognito().\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003eAdd your service to the \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eEnsureBrowserContextKeyedServiceFactoriesBuilt()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e list in \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003echrome_browser_main_extra_parts_profiles.cc\u003cb\u003e.\u003c/b\u003e\u003c/font\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eUnderstand shutdown behavior. \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-weight:normal\"\u003eFor historical reasons, we have a two phase deletion process:\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003c/li\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003eEvery BrowserContextKeyedService will first have its \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eShutdown()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e method called.\u003cspan style\u003d\"font-weight:normal\"\u003e Use this method to drop weak references to the Profile or other service objects.\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-weight:normal\"\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\" style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eEvery BrowserContextKeyedService is deleted and its destructor is run.\u003c/span\u003e Minimal work should be done here. Attempts to call any *ServiceFactory::GetForProfile() will cause an assertion in debug mode.\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eChange each instance of \"\u003c/span\u003eprofile_-\u0026gt;GetFooService()\u003cspan style\u003d\"font-weight:bold\"\u003e\" to \"\u003c/span\u003eFooServiceFactory::GetForProfile(profile_)\u003cspan style\u003d\"font-weight:bold\"\u003e\".\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eIf you need an example of what the above looks like, try looking at these patches:\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drev\u0026amp;revision\u003d100516\" style\u003d\"color:rgb(85,26,139);font-weight:bold\"\u003er100516\u003c/a\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e:\u003c/span\u003e A simple example, adding a new ProfileKeyedService. This shows off a minimal ServiceFactory subclass.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drev\u0026amp;revision\u003d104806\" style\u003d\"font-weight:bold\"\u003er104806\u003c/a\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e:\u003c/span\u003e plugin_prefs_factory.h gives an example of how to deal with things that are (and have to stay) refcounted. This patch also shows off how to move your preferences into your ProfileKeyedServiceFactory.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Debugging-Tips\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"4\"\u003eDebugging Tips\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Using-the-dependency-visualizer\" /\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003eUsing the dependency visualizer\u003c/font\u003e\u003c/h3\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eChrome has a built in method to dump the profile dependency graph to a file in \u003ca href\u003d\"http://www.graphviz.org/\" rel\u003d\"nofollow\"\u003eGraphViz\u003c/a\u003e format. When you run chrome with the command line flag \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e--dump-browser-context-graph\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e, chrome will write the dependency information to your \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e/path/to/profile/browser-context-dependencies.dot\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e file. You can then convert this text file with dot, which is part of GraphViz:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont size\u003d\"2\"\u003edot -Tpng /path/to/profile/\u003c/font\u003e\u003cspan style\u003d\"font-size:small\"\u003ebrowser-context-dependencies.dot \u0026gt; png-file.png\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003eThis will give you a visual graph like this (generated January 23rd, 2012, click through for full size):\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif;display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/profile-architecture/graph5.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg alt\u003d\"Graph as of Aug 15, 2012\" border\u003d\"0\" height\u003d\"40\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1345070956020/developers/design-documents/profile-architecture/graph5.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Crashes-at-Shutdown\" /\u003eCrashes at Shutdown\u003c/h3\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eIf you get a stack that looks like this:\u003c/div\u003e\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cblockquote style\u003d\"font-size:14px;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eProfileDependencyManager::AssertProfileWasntDestroyed()\u003c/font\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cfont face\u003d\"'courier new', monospace\" size\u003d\"2\"\u003eProfileKeyedServiceFactory::GetServiceForProfile()\u003cbr /\u003eMyServiceFactory::GetForProfile()\u003cbr /\u003e... [Probably a bunch of frames] ...\u003cbr /\u003eOtherService::~OtherService()\u003cbr /\u003eProfileKeyedServiceFactory::ProfileDestroyed()\u003cbr /\u003eProfileDependencyManager::DestroyProfileServices()\u003cbr /\u003eProfileImpl::~ProfileImpl()\u003cbr /\u003e\u003c/font\u003e\u003c/blockquote\u003e\u003cbr /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe problem is that OtherService is improperly depending on MyService. The framework asserts if you try to use a Shutdown()ed component.\u003c/font\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/profile-architecture"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4883956482089151969"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4883956482089151969"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4883956482089151969"}],"author":[{"name":{"$t":"Elliot Glaysher"},"email":{"$t":"erg@chromium.org"}}],"sites$pageName":{"$t":"profile-architecture"},"sites$revision":{"$t":"35"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4594784803619038388"},"published":{"$t":"2015-10-12T22:08:28.719Z"},"updated":{"$t":"2016-03-14T05:58:27.233Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-14T05:58:26.011Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Capturing a Timeline Trace"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Prereqs-if-recording-from-Android:\" /\u003ePrereqs if recording from Android:\u003c/h3\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eUse an up-to-date \u003ca href\u003d\"https://play.google.com/store/apps/details?id\u003dcom.chrome.dev\u0026amp;hl\u003den\"\u003eChrome Dev Channel on android\u003c/a\u003e.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://developers.google.com/web/tools/chrome-devtools/debug/remote-debugging/remote-debugging\" style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eConnect to the device with remote debugging\u003c/a\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e \u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Steps:\" /\u003eSteps:\u003c/h2\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eInspect the tab w/ devtools, open Timeline panel.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eThe only checkbox checked should be JS Profile.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eHit record. \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eDo whatever action is slow. (reload, tapping an icon, scrolling).\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eEnd the recording\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eIf that looks like it captured the right stuff, right-click and save it.\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/devtools/capturing-a-timeline-trace/save%20timeline.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"font-size:10pt\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1444687851757/devtools/capturing-a-timeline-trace/save%20timeline.png\" /\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eZip the file if you can. It'll compress a 40MB file to about 4MB.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eNow you can share it: \u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eattaching it to a bug, emailing it, or sharing via dropbox/etc.\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/devtools/capturing-a-timeline-trace"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4594784803619038388"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4594784803619038388"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4594784803619038388"}],"author":[{"name":{"$t":"Paul Irish"},"email":{"$t":"paulirish@chromium.org"}}],"sites$pageName":{"$t":"capturing-a-timeline-trace"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1046557457130859624"},"published":{"$t":"2016-03-14T02:04:45.067Z"},"updated":{"$t":"2016-03-14T02:32:46.792Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-14T02:32:43.126Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Issue Tracking Lifecycle"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis article explores how issue tracking works on the Chromium project, covering the four key process phases.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-The-Four-Phases\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eThe Four Phases\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Reporting\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eReporting\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Routing\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eRouting\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Triage\"\u003e\u003cstrong\u003e1.3 \u003c/strong\u003eTriage\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Action\"\u003e\u003cstrong\u003e1.4 \u003c/strong\u003eAction\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Status\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eStatus\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2 style\u003d\"display:block;text-align:left\"\u003e\u003ca name\u003d\"TOC-The-Four-Phases\" /\u003eThe Four Phases\u003c/h2\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/issue-tracking-lifecycle/Conceptual%20Model.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1457921362960/issue-tracking/issue-tracking-lifecycle/Conceptual%20Model.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003ch3 style\u003d\"display:block;text-align:left\"\u003e\u003ca name\u003d\"TOC-Reporting\" /\u003eReporting\u003c/h3\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e....\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWhat happens in this step?\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWho is involved?\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWhat's the forward objective?\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Routing\" /\u003eRouting\u003c/h3\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e....\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat happens in this step?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWho is involved?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat's the forward objective?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Triage\" /\u003eTriage\u003c/h3\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e....\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat happens in this step?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWho is involved?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat's the forward objective?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Action\" /\u003eAction\u003c/h3\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e....\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat happens in this step?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWho is involved?\u003c/div\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eWhat's the forward objective?\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Status\" /\u003e\u003cspan\u003eStatus\u003c/span\u003e\u003c/h2\u003e\u003cspan\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/issue-tracking/issue-tracking-lifecycle/State%20Diagram.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1457921358858/issue-tracking/issue-tracking-lifecycle/State%20Diagram.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e \u003c/span\u003e\u003cspan\u003e \u003c/span\u003e\u003cspan\u003e \u003c/span\u003e\u003cspan\u003e \u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6489695432843464000"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/issue-tracking-lifecycle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1046557457130859624"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1046557457130859624"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1046557457130859624"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$pageName":{"$t":"issue-tracking-lifecycle"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4394925689072856836"},"published":{"$t":"2016-03-14T02:06:43.073Z"},"updated":{"$t":"2016-03-14T02:09:22.960Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-14T02:09:22.954Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Conceptual Model.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4394925689072856836"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1046557457130859624"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/issue-tracking-lifecycle/Conceptual%20Model.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4394925689072856836"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4394925689072856836"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4394925689072856836"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4394925689072856836"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2597274523945593354"},"published":{"$t":"2016-03-14T02:09:18.852Z"},"updated":{"$t":"2016-03-14T02:09:18.858Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-14T02:09:18.852Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"State Diagram.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2597274523945593354"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1046557457130859624"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/issue-tracking/issue-tracking-lifecycle/State%20Diagram.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2597274523945593354"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2597274523945593354"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2597274523945593354"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2597274523945593354"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"UCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7253173126224230680"},"published":{"$t":"2015-09-17T11:39:19.809Z"},"updated":{"$t":"2016-03-10T19:27:33.853Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2016-03-10T19:27:31.687Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Blink post-merge FAQ"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Merge-versions\" /\u003eMerge versions\u003c/h2\u003e\r\n\u003cdiv\u003e\u003cb\u003ePre-merge:\u003c/b\u003e\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eBlink \u003c/span\u003egit SHA: \u003cspan style\u003d\"font-size:13px;line-height:20.02px;background-color:rgb(243,243,243)\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/blink/+/refs/heads/master\"\u003e\u003cfont face\u003d\"courier new, monospace\"\u003e37d233bde3baaea720a9a81296fa77b63c9d8981\u003c/font\u003e\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eBlink revision: \u003cb\u003e\u003ca href\u003d\"http://blinkrev.hasb.ug/202666\" rel\u003d\"nofollow\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(243,243,243)\"\u003e202666\u003c/font\u003e\u003c/a\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003eChromium git SHA: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/70aa692d68ee86d365928edd160c3575fda2b453\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(243,243,243)\"\u003e70aa692d68ee86d365928edd160c3575fda2b453\u003c/font\u003e\u003c/a\u003e\u003cbr /\u003e\r\nChromium revision: \u003ca href\u003d\"http://crrev.com/350323\" style\u003d\"font-weight:bold\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(243,243,243)\"\u003e350323\u003c/font\u003e\u003cbr /\u003e\r\n\u003c/a\u003eChrome version: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/70aa692d68ee86d365928edd160c3575fda2b453/chrome/VERSION\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:hsl(104,35%,95%)\"\u003e47.0.2518.0\u003c/font\u003e\u003c/a\u003e\u003c/blockquote\u003e\r\n\u003cdiv\u003e\u003cb\u003ePost-merge:\u003c/b\u003e\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eBlink git SHA: \u003ci\u003en/a\u003c/i\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13.3333px\"\u003eBlink revision: \u003ci\u003en/a\u003c/i\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003cdiv\u003eChromium git SHA: \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/b59b6df51a249895fbba24f92b661f744e031546\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(243,243,243)\"\u003eb59b6df51a249895fbba24f92b661f744e031546\u003c/font\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003eChromium revision: \u003cb\u003e\u003ca href\u003d\"http://crrev.com/350324\"\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"background-color:rgb(243,243,243)\"\u003e350324\u003c/font\u003e\u003c/a\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003eChrome version:\u003c/span\u003e\u003cspan style\u003d\"font-size:10pt;color:rgb(153,153,153);background-color:transparent\"\u003e \u003c/span\u003e\u003cfont face\u003d\"courier new, monospace\" style\u003d\"font-size:10pt;background-color:rgb(241,247,238)\"\u003e\u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/341be68a2f3f424685a709aacc683d227f0de7eb\" style\u003d\"font-size:10pt;background-color:transparent\"\u003e47.0.2519.0\u003c/a\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e \u003c/span\u003e\u003cfont color\u003d\"#999999\" style\u003d\"font-size:13.3333px;background-color:transparent\"\u003e\u003cfont size\u003d\"1\"\u003e-- version bump came 1 day after \u003ca href\u003d\"https://chromium.googlesource.com/chromium/src/+/b59b6df51a249895fbba24f92b661f744e031546/chrome/VERSION\"\u003ebranch\u003c/a\u003e\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-migrate-local-src-chromium-main-project-branches\" /\u003eHow to migrate local /src (chromium main project) branches\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Only-once-to-update-the-remote-git-remote-update-or-git-fetch-For-each-branch-git-rebase-git-merge-base-branch_name-origin-master-branch_name---onto-origin-master\" /\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif;font-size:12.8px;font-weight:normal\"\u003e\r\n\u003cul style\u003d\"font-family:Arial,Verdana,sans-serif;font-size:13.3333px\"\u003e\u003cli\u003eOnly once to update the remote\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit remote update (or git fetch) \u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003cdiv\u003e\u003ccode\u003e\u003cfont color\u003d\"#000000\"\u003eFor each branch\u003c/font\u003e\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit rebase $(git merge-base \u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003ebranch_name\u003c/span\u003e origin/master) \u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003ebranch_name\u003c/span\u003e --onto origin/master\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-How-to-migrate-local-src-third_party-WebKit-branches\" /\u003eHow to migrate local /src/third_party/WebKit branches\u003c/h2\u003e\r\n\u003cdiv\u003eWhen running gclient sync after the merge point, the previous .git directory (containing all the local branches) for blink will be saved in //src/../old_src_third_party_WebKit.git\u003c/div\u003e\r\n\u003cdiv\u003eFor each local branch, run the following steps:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:10pt;background-color:transparent\"\u003eCreate a patch file\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit diff origin/master...branch_name \u0026gt; /tmp/old-blink.patch\u003c/code\u003e\u003c/div\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003eAnd then in the new checkout, after the branch point\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003eRecreate the branch\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003egit new-branch old-blink\ |