Bug 114440

Summary: Dynamically triggered subframe loads are causing tile churn
Product: WebKit Reporter: Antti Koivisto <koivisto>
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: andersca, commit-queue, esprehn+autocc, kling, simon.fraser, thorton
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
patch kling: review+

Description Antti Koivisto 2013-04-11 07:12:03 PDT
We use minimal tile coverage while page is loading. Subframe loads that start after the main load has finishes are causing us to re-enter minimal tiling mode, causing unnecessary churn.
Comment 1 Antti Koivisto 2013-04-11 07:14:01 PDT
This shows up in the tile map with speculative tiles disappearing and reappearing after end of the load.
Comment 2 Antti Koivisto 2013-04-15 05:25:34 PDT
Created attachment 198114 [details]
patch
Comment 3 Andreas Kling 2013-04-15 05:41:41 PDT
Comment on attachment 198114 [details]
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=198114&action=review

r=me, good catch. I wonder if there are cases where the window resize optimization is too clever and just causing churn.

> Source/WebCore/ChangeLog:8
> +        In some cases we switch in and out of minimal times multiple times during page loading. This

minimal times -> minimal tiles

> Source/WebCore/ChangeLog:9
> +        creates tile churn where we create speculatively tiles and then throw them out. This can be

speculatively -> speculative

> Source/WebCore/ChangeLog:16
> +            tiles while waiting response for the initial requests.

waiting -> awaiting

> Source/WebCore/ChangeLog:18
> +        (WebCore):

<darin>Please remove this useless line. Better yet, please fix the script to stop generating them!</darin>

> Source/WebCore/ChangeLog:28
> +                Only switch into minimal coverage mode once per page load.

Indentation is different here.

> Source/WebCore/rendering/RenderLayerBacking.cpp:226
> +        useMinimalTilesDuringLoading = !frameView->isVisuallyNonEmpty() || (frame->page()->progress()->isLoadProgressing() && !frameView->wasScrolledByUser());

"!frameView->isVisuallyNonEmpty()" :|
Comment 4 Antti Koivisto 2013-04-15 05:59:53 PDT
http://trac.webkit.org/changeset/148432
Comment 5 Simon Fraser (smfr) 2013-04-15 13:17:58 PDT
Comment on attachment 198114 [details]
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=198114&action=review

> Source/WebCore/rendering/RenderLayerBacking.h:312
> +    bool m_didSwitchToFullTileCoverageDuringLoading;

Shame to use a bool on every RLB when only the root needs one.