[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
simon.fraser at apple.com
simon.fraser at apple.com
Wed Dec 22 15:34:31 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 89b838963e2be3b7827031d09270fd04d1f1ca86
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Nov 8 17:48:22 2010 +0000
2010-11-08 Simon Fraser <simon.fraser at apple.com>
Reviewed by Sam Weinig.
Allow applets to participate in accelerated compositing
https://bugs.webkit.org/show_bug.cgi?id=49117
<rdar://problem/8625819>
Add RenderApplet to the list of renderers that can optionally get RenderLayers,
and be composited for some reason.
Not currently testable.
* rendering/RenderApplet.h: Outdented the class declaration.
* rendering/RenderApplet.cpp:
(WebCore::RenderApplet::requiresLayer): Return true if the underlying widget
has a platform layer.
(WebCore::RenderApplet::allowsAcceleratedCompositing): Check the widget to see
if it has a platform layer.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::shouldBeNormalFlowOnly): Reformat, and add isApplet().
(WebCore::RenderLayer::isSelfPaintingLayer): Reformat, and add isApplet().
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use 'renderer' local variable
for efficiency. Now check for embedded objects and applets.
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Check for embedded objects and applets.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71536 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b42d806..129ce69 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,33 @@
+2010-11-08 Simon Fraser <simon.fraser at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Allow applets to participate in accelerated compositing
+ https://bugs.webkit.org/show_bug.cgi?id=49117
+ <rdar://problem/8625819>
+
+ Add RenderApplet to the list of renderers that can optionally get RenderLayers,
+ and be composited for some reason.
+
+ Not currently testable.
+
+ * rendering/RenderApplet.h: Outdented the class declaration.
+
+ * rendering/RenderApplet.cpp:
+ (WebCore::RenderApplet::requiresLayer): Return true if the underlying widget
+ has a platform layer.
+ (WebCore::RenderApplet::allowsAcceleratedCompositing): Check the widget to see
+ if it has a platform layer.
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::shouldBeNormalFlowOnly): Reformat, and add isApplet().
+ (WebCore::RenderLayer::isSelfPaintingLayer): Reformat, and add isApplet().
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use 'renderer' local variable
+ for efficiency. Now check for embedded objects and applets.
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Check for embedded objects and applets.
+
2010-11-08 Xan Lopez <xlopez at igalia.com>
Reviewed by Martin Robinson.
diff --git a/WebCore/rendering/RenderApplet.cpp b/WebCore/rendering/RenderApplet.cpp
index f9eb56e..eaa3535 100644
--- a/WebCore/rendering/RenderApplet.cpp
+++ b/WebCore/rendering/RenderApplet.cpp
@@ -26,6 +26,7 @@
#include "HTMLAppletElement.h"
#include "HTMLNames.h"
#include "HTMLParamElement.h"
+#include "PluginViewBase.h"
#include "Widget.h"
namespace WebCore {
@@ -91,4 +92,19 @@ void RenderApplet::layout()
setNeedsLayout(false);
}
+#if USE(ACCELERATED_COMPOSITING)
+bool RenderApplet::requiresLayer() const
+{
+ if (RenderWidget::requiresLayer())
+ return true;
+
+ return allowsAcceleratedCompositing();
+}
+
+bool RenderApplet::allowsAcceleratedCompositing() const
+{
+ return widget() && widget()->isPluginViewBase() && static_cast<PluginViewBase*>(widget())->platformLayer();
+}
+#endif
+
} // namespace WebCore
diff --git a/WebCore/rendering/RenderApplet.h b/WebCore/rendering/RenderApplet.h
index 641568d..007902d 100644
--- a/WebCore/rendering/RenderApplet.h
+++ b/WebCore/rendering/RenderApplet.h
@@ -27,34 +27,42 @@
namespace WebCore {
- class HTMLAppletElement;
+class HTMLAppletElement;
- class RenderApplet : public RenderWidget {
- public:
- RenderApplet(HTMLAppletElement*, const HashMap<String, String>& args);
- virtual ~RenderApplet();
+class RenderApplet : public RenderWidget {
+public:
+ RenderApplet(HTMLAppletElement*, const HashMap<String, String>& args);
+ virtual ~RenderApplet();
- void createWidgetIfNecessary();
+ void createWidgetIfNecessary();
- private:
- virtual const char* renderName() const { return "RenderApplet"; }
+#if USE(ACCELERATED_COMPOSITING)
+ virtual bool allowsAcceleratedCompositing() const;
+#endif
- virtual bool isApplet() const { return true; }
+private:
+ virtual const char* renderName() const { return "RenderApplet"; }
- virtual void layout();
- virtual IntSize intrinsicSize() const;
+ virtual bool isApplet() const { return true; }
- HashMap<String, String> m_args;
- };
+ virtual void layout();
+ virtual IntSize intrinsicSize() const;
- inline RenderApplet* toRenderApplet(RenderObject* object)
- {
- ASSERT(!object || object->isApplet());
- return static_cast<RenderApplet*>(object);
- }
+#if USE(ACCELERATED_COMPOSITING)
+ virtual bool requiresLayer() const;
+#endif
- // This will catch anyone doing an unnecessary cast.
- void toRenderApplet(const RenderApplet*);
+ HashMap<String, String> m_args;
+};
+
+inline RenderApplet* toRenderApplet(RenderObject* object)
+{
+ ASSERT(!object || object->isApplet());
+ return static_cast<RenderApplet*>(object);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toRenderApplet(const RenderApplet*);
} // namespace WebCore
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 4e8ceec..2f89eb5 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -3745,8 +3745,14 @@ void RenderLayer::repaintIncludingNonCompositingDescendants(RenderBoxModelObject
bool RenderLayer::shouldBeNormalFlowOnly() const
{
- return (renderer()->hasOverflowClip() || renderer()->hasReflection() || renderer()->hasMask() || renderer()->isVideo() || renderer()->isEmbeddedObject() ||
- renderer()->isRenderIFrame() || renderer()->style()->specifiesColumns())
+ return (renderer()->hasOverflowClip()
+ || renderer()->hasReflection()
+ || renderer()->hasMask()
+ || renderer()->isVideo()
+ || renderer()->isEmbeddedObject()
+ || renderer()->isApplet()
+ || renderer()->isRenderIFrame()
+ || renderer()->style()->specifiesColumns())
&& !renderer()->isPositioned()
&& !renderer()->isRelPositioned()
&& !renderer()->hasTransform()
@@ -3755,7 +3761,14 @@ bool RenderLayer::shouldBeNormalFlowOnly() const
bool RenderLayer::isSelfPaintingLayer() const
{
- return !isNormalFlowOnly() || renderer()->hasReflection() || renderer()->hasMask() || renderer()->isTableRow() || renderer()->isVideo() || renderer()->isEmbeddedObject() || renderer()->isRenderIFrame();
+ return !isNormalFlowOnly()
+ || renderer()->hasReflection()
+ || renderer()->hasMask()
+ || renderer()->isTableRow()
+ || renderer()->isVideo()
+ || renderer()->isEmbeddedObject()
+ || renderer()->isApplet()
+ || renderer()->isRenderIFrame();
}
void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle*)
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index 777d07f..4f16800 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -46,6 +46,7 @@
#include "InspectorInstrumentation.h"
#include "KeyframeList.h"
#include "PluginViewBase.h"
+#include "RenderApplet.h"
#include "RenderBox.h"
#include "RenderIFrame.h"
#include "RenderImage.h"
@@ -224,6 +225,7 @@ void RenderLayerBacking::updateAfterLayout(UpdateDepth updateDepth, bool isUpdat
bool RenderLayerBacking::updateGraphicsLayerConfiguration()
{
RenderLayerCompositor* compositor = this->compositor();
+ RenderObject* renderer = this->renderer();
bool layerConfigChanged = false;
if (updateForegroundLayer(compositor->needsContentsCompositingLayer(m_owningLayer)))
@@ -232,7 +234,7 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
if (updateClippingLayers(compositor->clippedByAncestor(m_owningLayer), compositor->clipsCompositingDescendants(m_owningLayer)))
layerConfigChanged = true;
- if (updateMaskLayer(m_owningLayer->renderer()->hasMask()))
+ if (updateMaskLayer(renderer->hasMask()))
m_graphicsLayer->setMaskLayer(m_maskLayer.get());
if (m_owningLayer->hasReflection()) {
@@ -246,27 +248,28 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
if (isDirectlyCompositedImage())
updateImageContents();
- if (renderer()->isEmbeddedObject() && toRenderEmbeddedObject(renderer())->allowsAcceleratedCompositing()) {
- PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>(toRenderEmbeddedObject(renderer())->widget());
+ if ((renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing())
+ || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing())) {
+ PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>(toRenderWidget(renderer)->widget());
m_graphicsLayer->setContentsToMedia(pluginViewBase->platformLayer());
}
#if ENABLE(VIDEO)
- else if (renderer()->isVideo()) {
- HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(renderer()->node());
+ else if (renderer->isVideo()) {
+ HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(renderer->node());
m_graphicsLayer->setContentsToMedia(mediaElement->platformLayer());
}
#endif
#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
- else if (isAcceleratedCanvas(renderer())) {
- HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer()->node());
+ else if (isAcceleratedCanvas(renderer)) {
+ HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
if (CanvasRenderingContext* context = canvas->renderingContext())
m_graphicsLayer->setContentsToCanvas(context->platformLayer());
layerConfigChanged = true;
}
#endif
- if (renderer()->isRenderIFrame())
- layerConfigChanged = RenderLayerCompositor::parentIFrameContentLayers(toRenderIFrame(renderer()));
+ if (renderer->isRenderIFrame())
+ layerConfigChanged = RenderLayerCompositor::parentIFrameContentLayers(toRenderIFrame(renderer));
return layerConfigChanged;
}
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index 1468b6c..a538857 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -42,6 +42,7 @@
#include "HitTestResult.h"
#include "NodeList.h"
#include "Page.h"
+#include "RenderApplet.h"
#include "RenderEmbeddedObject.h"
#include "RenderIFrame.h"
#include "RenderLayerBacking.h"
@@ -1227,21 +1228,20 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer)
bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const
{
- if (!renderer->isEmbeddedObject())
- return false;
-
- RenderEmbeddedObject* embedRenderer = toRenderEmbeddedObject(renderer);
- if (!embedRenderer->allowsAcceleratedCompositing())
+ bool composite = (renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing())
+ || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing());
+ if (!composite)
return false;
m_compositingDependsOnGeometry = true;
-
+
+ RenderWidget* pluginRenderer = toRenderWidget(renderer);
// If we can't reliably know the size of the plugin yet, don't change compositing state.
- if (renderer->needsLayout())
- return embedRenderer->hasLayer() && embedRenderer->layer()->isComposited();
+ if (pluginRenderer->needsLayout())
+ return pluginRenderer->hasLayer() && pluginRenderer->layer()->isComposited();
// Don't go into compositing mode if height or width are zero, or size is 1x1.
- IntRect contentBox = embedRenderer->contentBoxRect();
+ IntRect contentBox = pluginRenderer->contentBoxRect();
return contentBox.height() * contentBox.width() > 1;
}
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index dc36fc1..9626c58 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,18 @@
+2010-11-08 Simon Fraser <simon.fraser at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Allow applets to participate in accelerated compositing
+ https://bugs.webkit.org/show_bug.cgi?id=49117
+ <rdar://problem/8625819>
+
+ If Java is being loaded via the Netscape Plugin API, create a
+ NetscapePluginWidget so that it has an implementation of platformLayer().
+
+ Also clean up by using early returns.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+
2010-11-07 Adam Barth <abarth at webkit.org>
Reviewed by Eric Seidel.
diff --git a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
index 3053b49..7ca27c0 100644
--- a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
@@ -1752,6 +1752,8 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
[values addObject:[NSString stringWithFormat:@"%d", size.height()]];
}
view = pluginView(m_webFrame.get(), (WebPluginPackage *)pluginPackage, names, values, baseURL, kit(element), NO);
+ if (view)
+ return adoptRef(new PluginWidget(view));
}
#if ENABLE(NETSCAPE_PLUGIN_API)
else if ([pluginPackage isKindOfClass:[WebNetscapePluginPackage class]]) {
@@ -1764,6 +1766,8 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
attributeValues:kit(paramValues)
loadManually:NO
element:element] autorelease];
+ if (view)
+ return adoptRef(new NetscapePluginWidget(view));
} else {
ASSERT_NOT_REACHED();
}
@@ -1781,15 +1785,9 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
}
}
- ASSERT(view);
- return adoptRef(new PluginWidget(view));
-
END_BLOCK_OBJC_EXCEPTIONS;
-
- return adoptRef(new PluginWidget);
-#else
- return 0;
#endif // ENABLE(JAVA_BRIDGE)
+ return 0;
}
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list