Bug 103773 - Late-loading stylesheets can cause composited layers to be blank
Summary: Late-loading stylesheets can cause composited layers to be blank
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Simon Fraser (smfr)
URL: http://philosophically.com/why-were-p...
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2012-11-30 14:04 PST by Simon Fraser (smfr)
Modified: 2012-11-30 14:49 PST (History)
6 users (show)

See Also:


Attachments
Patch (11.65 KB, patch)
2012-11-30 14:16 PST, Simon Fraser (smfr)
thorton: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Simon Fraser (smfr) 2012-11-30 14:04:22 PST
Loading http://philosophically.com/why-were-pivoting-from-mobile-first-to-web-first on TOT often shows big blank areas.
Comment 1 Simon Fraser (smfr) 2012-11-30 14:04:40 PST
<rdar://problem/12763281>
Comment 2 Simon Fraser (smfr) 2012-11-30 14:16:18 PST
Created attachment 177024 [details]
Patch
Comment 3 Tim Horton 2012-11-30 14:26:12 PST
Comment on attachment 177024 [details]
Patch

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

> Source/WebCore/ChangeLog:9
> +        is pending, which is done to avoid a FOUC. When the stylesheet finally loaded,

Probably spell it out?

> Source/WebCore/rendering/RenderLayerCompositor.h:148
> +    // Repaint parts of all composited layers that intersect the given absolute rectangle (or the entire layer if the pointer is null).
> +    void repaintCompositedLayers(const IntRect* = 0);

This mechanism makes for some slightly unusual looking code elsewhere...

> Source/WebCore/rendering/RenderView.h:-84
> -    virtual void repaintViewRectangle(const LayoutRect&, bool immediate = false) const;
> +    void repaintViewRectangle(const LayoutRect&, bool immediate = false) const;
>      // Repaint the view, and all composited layers that intersect the given absolute rectangle.
>      // FIXME: ideally we'd never have to do this, if all repaints are container-relative.
> -    virtual void repaintRectangleInViewAndCompositedLayers(const LayoutRect&, bool immediate = false);

These weren't virtual for a reason?
Comment 4 Simon Fraser (smfr) 2012-11-30 14:49:59 PST
http://trac.webkit.org/changeset/136277