Title: [232206] trunk/Source/WebCore
Revision
232206
Author
[email protected]
Date
2018-05-25 14:42:52 -0700 (Fri, 25 May 2018)

Log Message

iBooks: text can disappear/flash during finger drag highlight
https://bugs.webkit.org/show_bug.cgi?id=185993
<rdar://problem/34026943>

Reviewed by Simon Fraser.

Reuse existing tiles when override rect is fully covered by the active grid.
Also, recover dropped tiles if override rect forces us to create new ones.

Unable to create a reproducible test case.

* platform/ios/LegacyTileCache.h:
* platform/ios/LegacyTileCache.mm:
(WebCore::LegacyTileCache::setOverrideVisibleRect):
* platform/ios/LegacyTileLayer.mm:
(-[LegacyTileHostLayer renderInContext:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (232205 => 232206)


--- trunk/Source/WebCore/ChangeLog	2018-05-25 21:42:22 UTC (rev 232205)
+++ trunk/Source/WebCore/ChangeLog	2018-05-25 21:42:52 UTC (rev 232206)
@@ -1,3 +1,22 @@
+2018-05-25  Zalan Bujtas  <[email protected]>
+
+        iBooks: text can disappear/flash during finger drag highlight
+        https://bugs.webkit.org/show_bug.cgi?id=185993
+        <rdar://problem/34026943>
+
+        Reviewed by Simon Fraser.
+
+        Reuse existing tiles when override rect is fully covered by the active grid.
+        Also, recover dropped tiles if override rect forces us to create new ones. 
+
+        Unable to create a reproducible test case.
+
+        * platform/ios/LegacyTileCache.h:
+        * platform/ios/LegacyTileCache.mm:
+        (WebCore::LegacyTileCache::setOverrideVisibleRect):
+        * platform/ios/LegacyTileLayer.mm:
+        (-[LegacyTileHostLayer renderInContext:]):
+
 2018-05-25  Eric Carlson  <[email protected]>
 
         Encode ISOWebVTTCue "strings" when logging

Modified: trunk/Source/WebCore/platform/ios/LegacyTileCache.h (232205 => 232206)


--- trunk/Source/WebCore/platform/ios/LegacyTileCache.h	2018-05-25 21:42:22 UTC (rev 232205)
+++ trunk/Source/WebCore/platform/ios/LegacyTileCache.h	2018-05-25 21:42:52 UTC (rev 232206)
@@ -142,7 +142,8 @@
     CALayer* hostLayer() const;
     unsigned tileCapacityForGrid(LegacyTileGrid*);
     Color colorForGridTileBorder(LegacyTileGrid*) const;
-    void setOverrideVisibleRect(std::optional<FloatRect>);
+    bool setOverrideVisibleRect(const FloatRect&);
+    void clearOverrideVisibleRect() { m_overrideVisibleRect = std::nullopt; }
 
     void doPendingRepaints();
 

Modified: trunk/Source/WebCore/platform/ios/LegacyTileCache.mm (232205 => 232206)


--- trunk/Source/WebCore/platform/ios/LegacyTileCache.mm	2018-05-25 21:42:22 UTC (rev 232205)
+++ trunk/Source/WebCore/platform/ios/LegacyTileCache.mm	2018-05-25 21:42:52 UTC (rev 232206)
@@ -99,9 +99,13 @@
     return [layer convertRect:[m_window extendedVisibleRect] fromLayer:hostLayer()];
 }
 
-void LegacyTileCache::setOverrideVisibleRect(std::optional<FloatRect> rect)
+bool LegacyTileCache::setOverrideVisibleRect(const FloatRect& rect)
 {
     m_overrideVisibleRect = rect;
+    auto coveredByExistingTiles = false;
+    if (activeTileGrid())
+        coveredByExistingTiles = activeTileGrid()->tilesCover(enclosingIntRect(m_overrideVisibleRect.value()));
+    return coveredByExistingTiles;
 }
 
 bool LegacyTileCache::tilesOpaque() const

Modified: trunk/Source/WebCore/platform/ios/LegacyTileLayer.mm (232205 => 232206)


--- trunk/Source/WebCore/platform/ios/LegacyTileLayer.mm	2018-05-25 21:42:22 UTC (rev 232205)
+++ trunk/Source/WebCore/platform/ios/LegacyTileLayer.mm	2018-05-25 21:42:52 UTC (rev 232206)
@@ -59,12 +59,15 @@
         WebThreadLock();
 
     CGRect dirtyRect = CGContextGetClipBoundingBox(context);
-    _tileGrid->tileCache().setOverrideVisibleRect(WebCore::FloatRect(dirtyRect));
-    _tileGrid->tileCache().doLayoutTiles();
+    auto useExistingTiles = _tileGrid->tileCache().setOverrideVisibleRect(WebCore::FloatRect(dirtyRect));
+    if (!useExistingTiles)
+        _tileGrid->tileCache().doLayoutTiles();
 
     [super renderInContext:context];
 
-    _tileGrid->tileCache().setOverrideVisibleRect(std::nullopt);
+    _tileGrid->tileCache().clearOverrideVisibleRect();
+    if (!useExistingTiles)
+        _tileGrid->tileCache().doLayoutTiles();
 }
 @end
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to