On Mon, Aug 31, 2009 at 8:56 AM, Mark Mentovai<m...@chromium.org> wrote:
>
> I spent a chunk of last week looking at the new tab page performance
> on startup on the Mac.  I found that the renderer was waiting on data
> from the browser process for what seemed like far too long.  The key
> to this problem is that resource requests for the new tab page are
> funneled through the browser process' main (UI) thread.  At least on
> the Mac, when a new tab is being created or while the application is
> starting up, there's a lot of contention for the UI thread: the window
> is being drawn and there might be animations or other effects, not to
> mention that infernal throbber.
>
> The good news is that turning off the tab strip's Core Animation layer
> improves this, as well as many other things.  A patch to do this just
> landed again at r24881 (on the third try).  In my experiments, this
> reduced the time from when the renderer requests the new tab page to
> the time that all of the resources are present in the renderer from
> between 1-3 seconds to just a hair over 300ms.  This is a huge
> improvement.
>
> I still think that 300ms is too long, though, especially when you
> consider that this is not the time from launch, but the time from the
> renderer's request, which itself can come as much as 300ms after
> launch.
>
> I'm experimenting with a change that lets the new tab HTML and CSS be
> served directly from the browser's IO thread instead of the UI thread.
>  Since these tasks require profile and theme access, the approach is
> to build up the HTML and CSS early, on the UI thread where such access
> is permitted, and cache them.  When a request for the HTML or CSS
> comes in, the browser can then service them entirely on the IO thread.
> This gets the data into the renderer almost immediately after it's
> requested, so that the renderer is able to fully lay out the new tab
> page without having to wait for the browser to do things like draw the
> new tab.  Additional resource requests, such as thumbnails and
> favicons, are still being served from the UI thread.  Based on my
> experiments, this shouldn't be a problem: the renderer isn't ready to
> receive these until it's done with layout based on the HTML and CSS,
> and once it reaches that point, the browser should be done with heavy
> UI tasks and there shouldn't be much contention for its main loop.  It
> might ultimately be better to be able to serve all new tab requests
> from a non-UI thread in the browser, but that could mean additional
> caching.
>
> This change improves new tab page performance by about 65ms on my
> laptop in release mode.  Now we're down to 240.  Great.  What else can
> we do?
>
> Well, that annoying throbber is still chewing up time, causing some
> amount of UI loop contention while the images, thumbnails, and icons
> are fetched.  Windows and Linux don't have a throbber for the new tab
> page.  We shouldn't either.  Excellent, now we're down to 200ms.  It's
> still high, but it's reasonable.  It's a perceptible improvement from
> the 300ms we started with.
>
> What else can we do?  One thing that's begging for improvement based
> on my timings is the renderer startup delay.  We don't bother starting
> up a renderer until about 200ms after launch, and it takes the
> renderer 70ms from that point to reach its main loop.  I bet that if
> we did renderer startup much earlier, we'd have one warm and ready to
> go by the time we needed it.  This doesn't have to be
> startup-specific, we could always maintain a spare renderer in the
> pool (within reason) so that we're not caught twiddling our thumbs
> waiting for the one we just launched.

Go Mark go! This is definitely one of my annoyances on Mac.

- Pam

>
> Mark
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to