WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-70067-20111013163938.patch (text/plain), 5.55 KB, created by
Vangelis Kokkevis
on 2011-10-13 16:39:39 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Vangelis Kokkevis
Created:
2011-10-13 16:39:39 PDT
Size:
5.55 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 97413) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,27 @@ >+2011-10-13 Vangelis Kokkevis <vangelis@chromium.org> >+ >+ Add support for client-triggered composited layers. >+ https://bugs.webkit.org/show_bug.cgi?id=70067 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This will allow individual implementations to >+ add client-specific triggers for compositing. >+ >+ This code just adds the necessary hooks and required >+ ChromeClient API. It doesn't alter existing functionality. >+ >+ No functionality added or changed. No tests. >+ >+ * page/ChromeClient.h: >+ (WebCore::ChromeClient::requiresCompositingLayerForObject): >+ * rendering/RenderLayerCompositor.cpp: >+ (WebCore::RenderLayerCompositor::RenderLayerCompositor): >+ (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags): >+ (WebCore::RenderLayerCompositor::scheduleLayerFlush): >+ (WebCore::RenderLayerCompositor::requiresCompositingLayer): >+ * rendering/RenderLayerCompositor.h: >+ > 2011-10-13 Chris Marrin <cmarrin@apple.com> > > Fix Leopard build >Index: Source/WebCore/page/ChromeClient.h >=================================================================== >--- Source/WebCore/page/ChromeClient.h (revision 97401) >+++ Source/WebCore/page/ChromeClient.h (working copy) >@@ -59,6 +59,7 @@ namespace WebCore { > class Node; > class Page; > class PopupMenuClient; >+ class RenderObject; > class SecurityOrigin; > class GraphicsContext3D; > class Widget; >@@ -260,6 +261,10 @@ namespace WebCore { > // Returns whether or not the client can render the composited layer, > // regardless of the settings. > virtual bool allowsAcceleratedCompositing() const { return true; } >+ // Returns true if the given RenderObject requires a composited layer. >+ // Will set dependsOnGeometry to true if the decision can only be made >+ // if there's no pending layout. >+ virtual bool requiresCompositingLayerForObject(RenderObject*, bool* dependsOnGeometry) const { return false; } > > enum CompositingTrigger { > ThreeDTransformTrigger = 1 << 0, >Index: Source/WebCore/rendering/RenderLayerCompositor.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayerCompositor.cpp (revision 97401) >+++ Source/WebCore/rendering/RenderLayerCompositor.cpp (working copy) >@@ -92,6 +92,7 @@ struct CompositingState { > > RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView) > : m_renderView(renderView) >+ , m_chromeClient(0) > , m_updateCompositingLayersTimer(this, &RenderLayerCompositor::updateCompositingLayersTimerFired) > , m_hasAcceleratedCompositing(true) > , m_compositingTriggers(static_cast<ChromeClient::CompositingTriggerFlags>(ChromeClient::AllTriggers)) >@@ -108,6 +109,10 @@ RenderLayerCompositor::RenderLayerCompos > , m_rootLayerUpdateCount(0) > #endif // PROFILE_LAYER_REBUILD > { >+ Frame* frame = m_renderView->frameView()->frame(); >+ Page* page = frame ? frame->page() : 0; >+ if (page) >+ m_chromeClient = page->chrome()->client(); > } > > RenderLayerCompositor::~RenderLayerCompositor() >@@ -148,11 +153,8 @@ void RenderLayerCompositor::cacheAcceler > // We allow the chrome to override the settings, in case the page is rendered > // on a chrome that doesn't allow accelerated compositing. > if (hasAcceleratedCompositing) { >- Frame* frame = m_renderView->frameView()->frame(); >- Page* page = frame ? frame->page() : 0; >- if (page) { >- ChromeClient* chromeClient = page->chrome()->client(); >- m_compositingTriggers = chromeClient->allowedCompositingTriggers(); >+ if (m_chromeClient) { >+ m_compositingTriggers = m_chromeClient->allowedCompositingTriggers(); > hasAcceleratedCompositing = m_compositingTriggers; > } > } >@@ -179,12 +181,10 @@ void RenderLayerCompositor::setCompositi > > void RenderLayerCompositor::scheduleLayerFlush() > { >- Frame* frame = m_renderView->frameView()->frame(); >- Page* page = frame ? frame->page() : 0; >- if (!page) >+ if (!m_chromeClient) > return; > >- page->chrome()->client()->scheduleCompositingLayerSync(); >+ m_chromeClient->scheduleCompositingLayerSync(); > } > > void RenderLayerCompositor::flushPendingLayerChanges(bool isFlushRoot) >@@ -1310,7 +1310,8 @@ bool RenderLayerCompositor::requiresComp > || (canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden) > || clipsCompositingDescendants(layer) > || requiresCompositingForAnimation(renderer) >- || requiresCompositingForFullScreen(renderer); >+ || requiresCompositingForFullScreen(renderer) >+ || (m_chromeClient && m_chromeClient->requiresCompositingLayerForObject(renderer, &m_compositingDependsOnGeometry)); > } > > bool RenderLayerCompositor::canBeComposited(const RenderLayer* layer) const >Index: Source/WebCore/rendering/RenderLayerCompositor.h >=================================================================== >--- Source/WebCore/rendering/RenderLayerCompositor.h (revision 97401) >+++ Source/WebCore/rendering/RenderLayerCompositor.h (working copy) >@@ -284,6 +284,7 @@ private: > > private: > RenderView* m_renderView; >+ ChromeClient* m_chromeClient; > OwnPtr<GraphicsLayer> m_rootContentLayer; > Timer<RenderLayerCompositor> m_updateCompositingLayersTimer; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 70067
:
110931