diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebKit2/Shared/WebRenderLayer.cpp | |
parent | ab6df191029eeeb0b0f16f127d553265659f739e (diff) | |
download | qtwebkit-6882a04fb36642862b11efe514251d32070c3d65.tar.gz |
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebKit2/Shared/WebRenderLayer.cpp')
-rw-r--r-- | Source/WebKit2/Shared/WebRenderLayer.cpp | 67 |
1 files changed, 48 insertions, 19 deletions
diff --git a/Source/WebKit2/Shared/WebRenderLayer.cpp b/Source/WebKit2/Shared/WebRenderLayer.cpp index 31f1bbdb3..9cc10eca4 100644 --- a/Source/WebKit2/Shared/WebRenderLayer.cpp +++ b/Source/WebKit2/Shared/WebRenderLayer.cpp @@ -26,14 +26,17 @@ #include "config.h" #include "WebRenderLayer.h" +#include "APIArray.h" +#include "APIString.h" #include "WebPage.h" -#include "WebString.h" #include <WebCore/Frame.h> #include <WebCore/FrameLoader.h> #include <WebCore/FrameLoaderClient.h> +#include <WebCore/MainFrame.h> #include <WebCore/RenderLayer.h> #include <WebCore/RenderLayerBacking.h> #include <WebCore/RenderView.h> +#include <WebCore/RenderWidget.h> #include <WebCore/StyledElement.h> using namespace WebCore; @@ -44,42 +47,46 @@ PassRefPtr<WebRenderLayer> WebRenderLayer::create(WebPage* page) { Frame* mainFrame = page->mainFrame(); if (!mainFrame) - return 0; + return nullptr; - if (!mainFrame->loader()->client()->hasHTMLView()) - return 0; + if (!mainFrame->loader().client().hasHTMLView()) + return nullptr; RenderView* contentRenderer = mainFrame->contentRenderer(); if (!contentRenderer) - return 0; + return nullptr; RenderLayer* rootLayer = contentRenderer->layer(); if (!rootLayer) - return 0; + return nullptr; return adoptRef(new WebRenderLayer(rootLayer)); } -PassRefPtr<MutableArray> WebRenderLayer::createArrayFromLayerList(Vector<RenderLayer*>* list) +PassRefPtr<WebRenderLayer> WebRenderLayer::create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer) +{ + return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList, frameContentsLayer)); +} + +PassRefPtr<API::Array> WebRenderLayer::createArrayFromLayerList(Vector<RenderLayer*>* list) { if (!list || !list->size()) - return 0; + return nullptr; - RefPtr<MutableArray> array = MutableArray::create(); - for (size_t i = 0; i < list->size(); ++i) { - RefPtr<WebRenderLayer> layer = adoptRef(new WebRenderLayer(list->at(i))); - array->append(layer.get()); - } + Vector<RefPtr<API::Object>> layers; + layers.reserveInitialCapacity(list->size()); + + for (const auto& layer : *list) + layers.uncheckedAppend(adoptRef(new WebRenderLayer(layer))); - return array.release(); + return API::Array::create(WTFMove(layers)); } WebRenderLayer::WebRenderLayer(RenderLayer* layer) { - m_renderer = WebRenderObject::create(layer->renderer()); + m_renderer = WebRenderObject::create(&layer->renderer()); m_isReflection = layer->isReflection(); -#if USE(ACCELERATED_COMPOSITING) if (layer->isComposited()) { RenderLayerBacking* backing = layer->backing(); m_isClipping = backing->hasClippingLayer(); @@ -98,20 +105,42 @@ WebRenderLayer::WebRenderLayer(RenderLayer* layer) m_compositingLayerType = Container; break; } + + m_backingStoreMemoryEstimate = backing->backingStoreMemoryEstimate(); } else { -#endif m_isClipping = false; m_isClipped = false; m_compositingLayerType = None; -#if USE(ACCELERATED_COMPOSITING) + m_backingStoreMemoryEstimate = 0; } -#endif m_absoluteBoundingBox = layer->absoluteBoundingBox(); m_negativeZOrderList = createArrayFromLayerList(layer->negZOrderList()); m_normalFlowList = createArrayFromLayerList(layer->normalFlowList()); m_positiveZOrderList = createArrayFromLayerList(layer->posZOrderList()); + + if (is<RenderWidget>(layer->renderer())) { + if (Document* contentDocument = downcast<RenderWidget>(layer->renderer()).frameOwnerElement().contentDocument()) { + if (RenderView* view = contentDocument->renderView()) + m_frameContentsLayer = adoptRef(new WebRenderLayer(view->layer())); + } + } +} + +WebRenderLayer::WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer) + : m_renderer(renderer) + , m_isReflection(isReflection) + , m_isClipping(isClipping) + , m_isClipped(isClipped) + , m_compositingLayerType(type) + , m_absoluteBoundingBox(absoluteBoundingBox) + , m_backingStoreMemoryEstimate(backingStoreMemoryEstimate) + , m_negativeZOrderList(negativeZOrderList) + , m_normalFlowList(normalFlowList) + , m_positiveZOrderList(positiveZOrderList) + , m_frameContentsLayer(frameContentsLayer) +{ } } // namespace WebKit |