Title: [171308] trunk/Source
- Revision
- 171308
- Author
- [email protected]
- Date
- 2014-07-21 11:31:53 -0700 (Mon, 21 Jul 2014)
Log Message
Put position:fixed elements into layers when a WK1 view is layer-backed
https://bugs.webkit.org/show_bug.cgi?id=135075
Reviewed by Darin Adler.
Source/WebCore:
This patch adds a new ChromeClient function called
requiresAcceleratedCompositingForViewportConstrainedPosition(). Since a view can
go in and out of layer backing, we need a ChromeClient method that can be
dynamically re-evaluated rather than using the existing settings for enabling
accelerated fixed and fixed that creates a stacking context.
Ensure that fixed elements create a stacking context when
requiresAcceleratedCompositingForViewportConstrainedPosition is true.
* css/StyleResolver.cpp:
(WebCore::StyleResolver::adjustRenderStyle):
New ChromeClient function.
* page/ChromeClient.h:
Source/WebKit/mac:
Returns true when the WebHTMLView has a layer.
* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (171307 => 171308)
--- trunk/Source/WebCore/ChangeLog 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebCore/ChangeLog 2014-07-21 18:31:53 UTC (rev 171308)
@@ -1,3 +1,24 @@
+2014-07-21 Beth Dakin <[email protected]>
+
+ Put position:fixed elements into layers when a WK1 view is layer-backed
+ https://bugs.webkit.org/show_bug.cgi?id=135075
+
+ Reviewed by Darin Adler.
+
+ This patch adds a new ChromeClient function called
+ requiresAcceleratedCompositingForViewportConstrainedPosition(). Since a view can
+ go in and out of layer backing, we need a ChromeClient method that can be
+ dynamically re-evaluated rather than using the existing settings for enabling
+ accelerated fixed and fixed that creates a stacking context.
+
+ Ensure that fixed elements create a stacking context when
+ requiresAcceleratedCompositingForViewportConstrainedPosition is true.
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::adjustRenderStyle):
+
+ New ChromeClient function.
+ * page/ChromeClient.h:
+
2014-07-21 Simon Fraser <[email protected]>
Add helper functions to dump the scrolling state tree from the debugger
Modified: trunk/Source/WebCore/css/StyleResolver.cpp (171307 => 171308)
--- trunk/Source/WebCore/css/StyleResolver.cpp 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebCore/css/StyleResolver.cpp 2014-07-21 18:31:53 UTC (rev 171308)
@@ -59,6 +59,8 @@
#include "CachedSVGDocument.h"
#include "CachedSVGDocumentReference.h"
#include "CalculationValue.h"
+#include "Chrome.h"
+#include "ChromeClient.h"
#include "ContentData.h"
#include "Counter.h"
#include "CounterContent.h"
@@ -1147,6 +1149,19 @@
}
#endif
+static inline bool fixedPositionCreatesStackingContext(Element* element)
+{
+ if (!element)
+ return false;
+
+ Page* page = element->document().page();
+ if (!page)
+ return false;
+
+ return page->settings().fixedPositionCreatesStackingContext()
+ || page->chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();
+}
+
void StyleResolver::adjustRenderStyle(RenderStyle& style, const RenderStyle& parentStyle, Element *e)
{
// Cache our original display.
@@ -1255,7 +1270,7 @@
|| style.hasBlendMode()
|| style.hasIsolation()
|| style.position() == StickyPosition
- || (style.position() == FixedPosition && e && e->document().page() && e->document().page()->settings().fixedPositionCreatesStackingContext())
+ || (style.position() == FixedPosition && fixedPositionCreatesStackingContext(e))
|| style.hasFlowFrom()
))
style.setZIndex(0);
Modified: trunk/Source/WebCore/page/ChromeClient.h (171307 => 171308)
--- trunk/Source/WebCore/page/ChromeClient.h 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebCore/page/ChromeClient.h 2014-07-21 18:31:53 UTC (rev 171308)
@@ -427,6 +427,8 @@
virtual bool shouldUseTiledBackingForFrameView(const FrameView*) const { return false; }
+ virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const { return false; }
+
#if ENABLE(SUBTLE_CRYPTO)
virtual bool wrapCryptoKey(const Vector<uint8_t>&, Vector<uint8_t>&) const { return false; }
virtual bool unwrapCryptoKey(const Vector<uint8_t>&, Vector<uint8_t>&) const { return false; }
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (171307 => 171308)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-07-21 18:31:53 UTC (rev 171308)
@@ -2610,7 +2610,9 @@
// FIXME: acceleratedCompositingForFixedPositionEnabled should probably be renamed acceleratedCompositingForViewportConstrainedPositionEnabled().
const Settings& settings = m_renderView.frameView().frame().settings();
- if (!settings.acceleratedCompositingForFixedPositionEnabled())
+ Page* page = this->page();
+ bool clientRequiresCompositing = page && page->chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();
+ if (!(settings.acceleratedCompositingForFixedPositionEnabled() || clientRequiresCompositing))
return false;
if (isSticky)
Modified: trunk/Source/WebKit/mac/ChangeLog (171307 => 171308)
--- trunk/Source/WebKit/mac/ChangeLog 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebKit/mac/ChangeLog 2014-07-21 18:31:53 UTC (rev 171308)
@@ -1,3 +1,16 @@
+2014-07-21 Beth Dakin <[email protected]>
+
+ Put position:fixed elements into layers when a WK1 view is layer-backed
+ https://bugs.webkit.org/show_bug.cgi?id=135075
+
+ Reviewed by Darin Adler.
+
+ Returns true when the WebHTMLView has a layer.
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition):
+
2014-07-18 Andy Estes <[email protected]>
[iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h (171307 => 171308)
--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h 2014-07-21 18:31:53 UTC (rev 171308)
@@ -211,5 +211,7 @@
#endif
private:
+ virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const override;
+
WebView *m_webView;
};
Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (171307 => 171308)
--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm 2014-07-21 18:26:45 UTC (rev 171307)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm 2014-07-21 18:31:53 UTC (rev 171308)
@@ -1009,6 +1009,12 @@
#endif // ENABLE(FULLSCREEN_API)
+bool WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition() const
+{
+ NSView<WebDocumentView> *documentView = [[[m_webView _selectedOrMainFrame] frameView] documentView];
+ return [documentView isKindOfClass:[WebHTMLView class]] && documentView.layer;
+}
+
#if ENABLE(SUBTLE_CRYPTO)
bool WebChromeClient::wrapCryptoKey(const Vector<uint8_t>& key, Vector<uint8_t>& wrappedKey) const
{
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes