summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering
diff options
context:
space:
mode:
authorMike Reed <reed@google.com>2009-06-10 16:48:35 -0400
committerMike Reed <reed@google.com>2009-06-11 10:26:06 -0400
commit353e1e16ed060c0ea11f2dea6dea8b565ac71533 (patch)
tree02d0e35aa82c733ad6834b133ecceac0222733b6 /WebCore/rendering
parent5f95030b683afa83909e9de4ac8ba908ca15112c (diff)
downloadexternal_webkit-353e1e16ed060c0ea11f2dea6dea8b565ac71533.zip
external_webkit-353e1e16ed060c0ea11f2dea6dea8b565ac71533.tar.gz
external_webkit-353e1e16ed060c0ea11f2dea6dea8b565ac71533.tar.bz2
speedup some common matrix operations, to be submitted back
Diffstat (limited to 'WebCore/rendering')
-rw-r--r--WebCore/rendering/RenderLayer.cpp5
-rw-r--r--WebCore/rendering/RenderObject.cpp13
2 files changed, 17 insertions, 1 deletions
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index fd88120..78fe7d8 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -1956,9 +1956,14 @@ RenderLayer::paintLayer(RenderLayer* rootLayer, GraphicsContext* p,
int x = 0;
int y = 0;
convertToLayerCoords(rootLayer, x, y);
+#ifdef ANDROID_FASTER_MATRIX
+ TransformationMatrix transform(*m_transform);
+ transform.translateRight(x, y);
+#else
TransformationMatrix transform;
transform.translate(x, y);
transform = *m_transform * transform;
+#endif
// Apply the transform.
p->save();
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp
index bb98c9f..a9f6693 100644
--- a/WebCore/rendering/RenderObject.cpp
+++ b/WebCore/rendering/RenderObject.cpp
@@ -1703,11 +1703,22 @@ void RenderObject::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, Trans
TransformationMatrix RenderObject::transformFromContainer(const RenderObject* containerObject, const IntSize& offsetInContainer) const
{
TransformationMatrix containerTransform;
+#ifdef ANDROID_FASTER_MATRIX
+ RenderLayer* layer;
+ const double tx = offsetInContainer.width();
+ const double ty = offsetInContainer.height();
+ if (hasLayer() && (layer = toRenderBox(this)->layer()) && layer->transform()) {
+ containerTransform = layer->currentTransform();
+ containerTransform.translateRight(tx, ty);
+ } else
+ containerTransform.translate(tx, ty);
+#else
containerTransform.translate(offsetInContainer.width(), offsetInContainer.height());
RenderLayer* layer;
if (hasLayer() && (layer = toRenderBox(this)->layer()) && layer->transform())
containerTransform.multLeft(layer->currentTransform());
-
+#endif
+
#if ENABLE(3D_RENDERING)
if (containerObject && containerObject->style()->hasPerspective()) {
// Perpsective on the container affects us, so we have to factor it in here.