Reviewed by timo.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Mar 2006 22:16:12 +0000 (22:16 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Mar 2006 22:16:12 +0000 (22:16 +0000)
commit952bdccfbcd2adad98852baeffc2dcfa33779c3d
treeb9f289003ddcdfb4f728b7fc1aebe06a9250ec39
parent763a389737775839938c45e0fe99a03cf2f6a8f6
    Reviewed by timo.

        - Fixed the load progress indicator to give more incremental feedback,
        and to stop spending so much time near 100%.

        I did two things:
        (1) Fixed some bugs and a misspelling in the previous heuristic's
        implementation
        (2) Added two new rules to the heuristic:
            (a) Treat the first layout as the half-way point.
            (b) Just like we jump the first 10% to indicate that a load has
            started, jump the last 10% to indicate that a load has finished.

        Rule 2a is good for two reasons. First, it seems unnatural for loading
        to be "more than half done" when you can't even see anything. Second,
        in the early stages of laading our estimate of how much we'll need to
        load is often off by as much as 6000% (e.g., cnn.com). So anything that
        makes the progress indicator more conservative in the early stages of
        loading is helpful.

        Rule 2b is good because it's confusing for loading to be "100% done"
        but still ongoing.

        FIXME: The indicator still isn't perfect. For example, the old behavior
        shows up @ moviefone.com. Two areas for future work:
        (1) Estimate number of linked resources. Our code estimates the size
        of a single resource, but does nothing to estimate the number of
        resources that resource might link to. This is the key to why we're
        so wrong at the beginning.
        (2) Improve "when to do first layout" heuristic. A JavaScript query
        for a style property forces layout, creating a phantom first layout
        with no content, essentially nullifying 2a for certain pages.

        Filed <rdar://problem/4475834> to track estimating the number of
        linked resources. Phantom layouts are already on Hyatt's radar.

        * WebView/WebFrame.m:
        (-[WebFrame _setState:]): Update firstLayoutDone
        (-[WebFrame _numPendingOrLoadingRequests:]): Bug fix: In the recurisve
        case, query 'frame' instead of 'self', so that we actually recurse.
        (-[WebFrame _firstLayoutDone]): New method
        (-[WebFrame _didFirstLayout]): Update firstLayoutDone
        * WebView/WebFramePrivate.h: Added firstLayoutDone ivar
        * WebView/WebView.m:
        (-[WebView _incrementProgressForConnectionDelegate:data:]):
        (1) Implemented 2a and 2b
        (2) Bug fix: only update the 'last time I sent a notification' time if
        we actually send a notification.
        (3) Don't test for progress < 0 because ensuring progress < max
        also ensures max - progress > 0. (Do still test for progress > max
        because rounding errors make that a possibility -- although a very
        minor one.)
        (4) Query only the loading frame and its subframes for pending
        requests instead of defaulting to the main frame. This is a slight
        optimization in cases where the main frame did not begin the load,
        and it makes the code more consistent.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13269 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebKit/ChangeLog
WebKit/WebView/WebFrame.m
WebKit/WebView/WebFramePrivate.h
WebKit/WebView/WebView.m