Changeset 219293 in webkit


Ignore:
Timestamp:
Jul 10, 2017 9:17:00 AM (7 years ago)
Author:
mmaxfield@apple.com
Message:

REGRESSION(r213590): UI process updates the visible content rects more often than it did in iOS 10
https://bugs.webkit.org/show_bug.cgi?id=174282
<rdar://problem/33144344>

Reviewed by Simon Fraser.

In r213590, we accidentally refactored -[WKWebView _didCommitLayerTree:] to call _scheduleVisibleContentRectUpdate
more often. Instead, this should be triggered from inside the "if" statements.

No tests because there is no behavior change. Performance change is tested in MotionMark.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _isShowingVideoPictureInPicture]):
(-[WKWebView _initializeWithConfiguration:]):
(-[WKWebView goBack]):
(-[WKWebView _didCommitLayerTree:]):
(-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
(-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
(-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
(-[WKWebView scrollViewDidScroll:]):
(-[WKWebView _visibleContentRect]):
(-[WKWebView _frameOrBoundsChanged]):
(-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
(-[WKWebView _updateVisibleContentRects]):
(-[WKWebView _navigationGestureDidBegin]):
(-[WKWebView _reloadWithoutContentBlockers]):
(-[WKWebView _reloadExpiredOnly]):
(-[WKWebView _setObscuredInsets:]):
(-[WKWebView _setUnobscuredSafeAreaInsets:]):
(-[WKWebView _endAnimatedResize]):
(-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
(-[WKWebView _clearOverrideLayoutParameters]):
(-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
(-[WKWebView _propertiesOfLayerWithID:]):

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r219290 r219293  
     12017-07-10  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        REGRESSION(r213590): UI process updates the visible content rects more often than it did in iOS 10
     4        https://bugs.webkit.org/show_bug.cgi?id=174282
     5        <rdar://problem/33144344>
     6
     7        Reviewed by Simon Fraser.
     8
     9        In r213590, we accidentally refactored -[WKWebView _didCommitLayerTree:] to call _scheduleVisibleContentRectUpdate
     10        more often. Instead, this should be triggered from inside the "if" statements.
     11
     12        No tests because there is no behavior change. Performance change is tested in MotionMark.
     13
     14        * UIProcess/API/Cocoa/WKWebView.mm:
     15        (-[WKWebView _isShowingVideoPictureInPicture]):
     16        (-[WKWebView _initializeWithConfiguration:]):
     17        (-[WKWebView goBack]):
     18        (-[WKWebView _didCommitLayerTree:]):
     19        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
     20        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
     21        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
     22        (-[WKWebView scrollViewDidScroll:]):
     23        (-[WKWebView _visibleContentRect]):
     24        (-[WKWebView _frameOrBoundsChanged]):
     25        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
     26        (-[WKWebView _updateVisibleContentRects]):
     27        (-[WKWebView _navigationGestureDidBegin]):
     28        (-[WKWebView _reloadWithoutContentBlockers]):
     29        (-[WKWebView _reloadExpiredOnly]):
     30        (-[WKWebView _setObscuredInsets:]):
     31        (-[WKWebView _setUnobscuredSafeAreaInsets:]):
     32        (-[WKWebView _endAnimatedResize]):
     33        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
     34        (-[WKWebView _clearOverrideLayoutParameters]):
     35        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
     36        (-[WKWebView _propertiesOfLayerWithID:]):
     37
    1382017-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>
    239
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r219271 r219293  
    252252    UIInterfaceOrientation _interfaceOrientationOverride;
    253253    BOOL _overridesInterfaceOrientation;
    254    
     254
    255255    BOOL _allowsViewportShrinkToFit;
    256256
     
    293293    BOOL _delayUpdateVisibleContentRects;
    294294    BOOL _hadDelayedUpdateVisibleContentRects;
    295    
     295
    296296    int _activeAnimatedResizeCount;
    297297
     
    349349    if (!_page || !_page->videoFullscreenManager())
    350350        return false;
    351    
     351
    352352    return _page->videoFullscreenManager()->hasMode(WebCore::HTMLMediaElementEnums::VideoFullscreenModePictureInPicture);
    353353#endif
     
    428428    WebKit::WebProcessPool& processPool = *[_configuration processPool]->_processPool;
    429429    processPool.setResourceLoadStatisticsEnabled(configuration.websiteDataStore._resourceLoadStatisticsEnabled);
    430    
     430
    431431    auto pageConfiguration = API::PageConfiguration::create();
    432432
     
    521521
    522522    [self _updateScrollViewInsetAdjustmentBehavior];
    523    
     523
    524524    [self addSubview:_scrollView.get()];
    525525
     
    840840    if (!navigation)
    841841        return nil;
    842  
     842
    843843    return [wrapper(*navigation.leakRef()) autorelease];
    844844}
     
    14871487    LOG_WITH_STREAM(VisibleRects, stream << "-[WKWebView _didCommitLayerTree:] transactionID " <<  layerTreeTransaction.transactionID() << " _dynamicViewportUpdateMode " << (int)_dynamicViewportUpdateMode);
    14881488
    1489     BOOL needUpdateVisbleContentRects = _page->updateLayoutViewportParameters(layerTreeTransaction);
     1489    bool needUpdateVisibleContentRects = _page->updateLayoutViewportParameters(layerTreeTransaction);
    14901490
    14911491    if (_dynamicViewportUpdateMode != DynamicViewportUpdateMode::NotResizing) {
     
    15391539            _navigationState->didFirstPaint();
    15401540
    1541         needUpdateVisbleContentRects = YES;
     1541        needUpdateVisibleContentRects = true;
    15421542    }
    15431543
    15441544    if (layerTreeTransaction.transactionID() >= _firstTransactionIDAfterPageRestore) {
     1545        bool shouldRestoreScrollPosition = false;
    15451546        if (_scrollOffsetToRestore) {
    15461547            WebCore::FloatPoint scaledScrollOffset = _scrollOffsetToRestore.value();
     
    15531554                changeContentOffsetBoundedInValidRange(_scrollView.get(), contentOffsetInScrollViewCoordinates);
    15541555                _commitDidRestoreScrollPosition = YES;
     1556
     1557                shouldRestoreScrollPosition = true;
    15551558            }
     1559
     1560            needUpdateVisibleContentRects = true;
    15561561        }
    15571562
     
    15691574
    15701575                changeContentOffsetBoundedInValidRange(_scrollView.get(), topLeftInDocumentCoordinates);
     1576
     1577                shouldRestoreScrollPosition = true;
    15711578            }
     1579
     1580            needUpdateVisibleContentRects = true;
    15721581        }
    15731582
    1574         needUpdateVisbleContentRects = YES;
    1575 
    1576         if (_gestureController)
     1583        if (shouldRestoreScrollPosition && _gestureController)
    15771584            _gestureController->didRestoreScrollPosition();
    15781585    }
    15791586
    1580     if (needUpdateVisbleContentRects)
     1587    if (needUpdateVisibleContentRects)
    15811588        [self _scheduleVisibleContentRectUpdate];
    15821589
     
    16451652    _firstTransactionIDAfterPageRestore = downcast<WebKit::RemoteLayerTreeDrawingAreaProxy>(*_page->drawingArea()).nextLayerTreeTransactionID();
    16461653    _unobscuredCenterToRestore = center.value();
    1647    
     1654
    16481655    _scaleToRestore = scale;
    16491656}
     
    19921999        return true;
    19932000    }
    1994    
     2001
    19952002    return false;
    19962003}
     
    21212128        // FIXME: Here, I'm finding the maximum horizontal/vertical scroll offsets. There's probably a better way to do this.
    21222129        CGSize maxScrollOffsets = CGSizeMake(scrollView.contentSize.width - scrollView.bounds.size.width, scrollView.contentSize.height - scrollView.bounds.size.height);
    2123        
     2130
    21242131        CGRect fullViewRect = self.bounds;
    21252132
     
    21332140
    21342141        CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, contentInset);
    2135        
     2142
    21362143        coordinator->adjustTargetContentOffsetForSnapping(maxScrollOffsets, velocity, unobscuredRect.origin.y, targetContentOffset);
    21372144    }
     
    21622169
    21632170    [self _scheduleVisibleContentRectUpdateAfterScrollInView:scrollView];
    2164    
     2171
    21652172    if (WebKit::RemoteLayerTreeScrollingPerformanceData* scrollPerfData = _page->scrollingPerformanceData())
    21662173        scrollPerfData->didScroll([self visibleRectInViewCoordinates]);
     
    22142221
    22152222    CGRect visibleRectInContentCoordinates = [self convertRect:self.bounds toView:_contentView.get()];
    2216    
     2223
    22172224    if (UIView *enclosingView = [self _enclosingViewForExposedRectComputation]) {
    22182225        CGRect viewVisibleRect = [self _visibleRectInEnclosingView:enclosingView];
     
    22732280        if (!_overridesMaximumUnobscuredSize)
    22742281            _page->setMaximumUnobscuredSize(WebCore::FloatSize(bounds.size));
    2275        
     2282
    22762283        BOOL sizeChanged = NO;
    22772284        if (auto drawingArea = _page->drawingArea())
    22782285            sizeChanged = drawingArea->setSize(WebCore::IntSize(bounds.size), WebCore::IntSize(), WebCore::IntSize());
    2279        
     2286
    22802287        if (sizeChanged & [self usesStandardContentView])
    22812288            [_contentView setSizeChangedSinceLastVisibleContentRectUpdate:YES];
     
    23602367
    23612368    _hasScheduledVisibleRectUpdate = YES;
    2362    
     2369
    23632370#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
    23642371    CATransactionPhase transactionPhase = [CATransaction currentPhase];
     
    24542461        if (coordinator && coordinator->hasActiveSnapPoint()) {
    24552462            CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, computedContentInsetUnadjustedForKeyboard);
    2456            
     2463
    24572464            CGPoint currentPoint = [_scrollView contentOffset];
    24582465            CGPoint activePoint = coordinator->nearestActiveContentInsetAdjustedSnapPoint(unobscuredRect.origin.y, currentPoint);
     
    26382645    _frozenVisibleContentRect = [self convertRect:fullViewRect toView:_contentView.get()];
    26392646    _frozenUnobscuredContentRect = [self convertRect:unobscuredRect toView:_contentView.get()];
    2640    
     2647
    26412648    LOG_WITH_STREAM(VisibleRects, stream << "_navigationGestureDidBegin: freezing visibleContentRect " << _frozenVisibleContentRect.value() << " UnobscuredContentRect " << _frozenUnobscuredContentRect.value());
    26422649}
     
    38033810    if (!navigation)
    38043811        return nil;
    3805    
     3812
    38063813    return [wrapper(*navigation.leakRef()) autorelease];
    38073814}
     
    38123819    if (!navigation)
    38133820        return nil;
    3814    
     3821
    38153822    return [wrapper(*navigation.leakRef()) autorelease];
    38163823}
     
    45904597    ASSERT(obscuredInsets.bottom >= 0);
    45914598    ASSERT(obscuredInsets.right >= 0);
    4592    
     4599
    45934600    _haveSetObscuredInsets = YES;
    45944601
     
    46274634    ASSERT(unobscuredSafeAreaInsets.bottom >= 0);
    46284635    ASSERT(unobscuredSafeAreaInsets.right >= 0);
    4629    
     4636
    46304637    _haveSetUnobscuredSafeAreaInsets = YES;
    46314638
     
    48494856        return;
    48504857    }
    4851    
     4858
    48524859    --_activeAnimatedResizeCount;
    48534860    NSUInteger indexOfResizeAnimationView = [[_scrollView subviews] indexOfObject:_resizeAnimationView.get()];
     
    49434950    }
    49444951#endif
    4945    
     4952
    49464953    if (_customContentView) {
    49474954        UIGraphicsBeginImageContextWithOptions(imageSize, YES, 1);
     
    50015008    _overridesMinimumLayoutSize = NO;
    50025009    _minimumLayoutSizeOverride = CGSizeZero;
    5003    
     5010
    50045011    _overridesMaximumUnobscuredSize = NO;
    50055012    _maximumUnobscuredSizeOverride = CGSizeZero;
     
    52765283    auto infoRequest = WebKit::InteractionInformationRequest(WebCore::roundedIntPoint(position));
    52775284    infoRequest.includeSnapshot = true;
    5278    
     5285
    52795286    [_contentView doAfterPositionInformationUpdate:[capturedBlock = makeBlockPtr(block)] (WebKit::InteractionInformationAtPosition information) {
    52805287        capturedBlock([_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:information]);
     
    54745481            @"m44" : @(layer.sublayerTransform.m44),
    54755482        },
    5476        
     5483
    54775484        @"hidden" : @(layer.hidden),
    54785485        @"doubleSided" : @(layer.doubleSided),
Note: See TracChangeset for help on using the changeset viewer.