summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Shared/WebRenderLayer.cpp
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2016-08-25 19:20:41 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-02-02 12:30:55 +0000
commit6882a04fb36642862b11efe514251d32070c3d65 (patch)
treeb7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebKit2/Shared/WebRenderLayer.cpp
parentab6df191029eeeb0b0f16f127d553265659f739e (diff)
downloadqtwebkit-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.cpp67
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