summaryrefslogtreecommitdiffstats
path: root/Source/WebCore
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2011-12-01 15:31:25 -0800
committerChris Craik <ccraik@google.com>2011-12-01 15:50:31 -0800
commit70adfd756fa5e71bd6913f3a1d8223ca26d8ec92 (patch)
tree298ee92b8d32376eeb2a2ee5f94f8966994ebe01 /Source/WebCore
parente1ea7f8384757f9b46805df75a0aa72c1fc041b7 (diff)
downloadexternal_webkit-70adfd756fa5e71bd6913f3a1d8223ca26d8ec92.zip
external_webkit-70adfd756fa5e71bd6913f3a1d8223ca26d8ec92.tar.gz
external_webkit-70adfd756fa5e71bd6913f3a1d8223ca26d8ec92.tar.bz2
Scroll position now passed to all layers
bug:5666027 Previously, only the most recent version of the scrollablelayerandroid would have its position updated. This caused issues with position inconsistency between the painting and drawing version of the layer, if both existed. Change-Id: Ife29ae4e2cb00fbaa2f6fc95d9914b3434862f10
Diffstat (limited to 'Source/WebCore')
-rw-r--r--Source/WebCore/platform/graphics/android/GLWebViewState.cpp4
-rw-r--r--Source/WebCore/platform/graphics/android/GLWebViewState.h2
-rw-r--r--Source/WebCore/platform/graphics/android/ScrollableLayerAndroid.cpp3
-rw-r--r--Source/WebCore/platform/graphics/android/TreeManager.cpp18
-rw-r--r--Source/WebCore/platform/graphics/android/TreeManager.h6
5 files changed, 28 insertions, 5 deletions
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
index f72f8ce..900d0fd 100644
--- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
+++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
@@ -150,8 +150,10 @@ void GLWebViewState::setBaseLayer(BaseLayerAndroid* layer, const SkRegion& inval
TilesManager::instance()->setShowVisualIndicator(showVisualIndicator);
}
-void GLWebViewState::scrolledLayer(ScrollableLayerAndroid*)
+void GLWebViewState::scrollLayer(int layerId, int x, int y)
{
+ m_treeManager.updateScrollableLayer(layerId, x, y);
+
// TODO: only inval the area of the scrolled layer instead of
// doing a fullInval()
if (m_layersRenderingMode == kSingleSurfaceRendering)
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.h b/Source/WebCore/platform/graphics/android/GLWebViewState.h
index cffd28f..8d89704 100644
--- a/Source/WebCore/platform/graphics/android/GLWebViewState.h
+++ b/Source/WebCore/platform/graphics/android/GLWebViewState.h
@@ -248,7 +248,7 @@ public:
};
LayersRenderingMode layersRenderingMode() { return m_layersRenderingMode; }
- void scrolledLayer(ScrollableLayerAndroid*);
+ void scrollLayer(int layerId, int x, int y);
void invalRegion(const SkRegion& region);
diff --git a/Source/WebCore/platform/graphics/android/ScrollableLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/ScrollableLayerAndroid.cpp
index 2643d2c..3c2ced5 100644
--- a/Source/WebCore/platform/graphics/android/ScrollableLayerAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/ScrollableLayerAndroid.cpp
@@ -22,9 +22,6 @@ bool ScrollableLayerAndroid::scrollTo(int x, int y)
setPosition(m_scrollLimits.fLeft - newX, m_scrollLimits.fTop - newY);
- if (state())
- state()->scrolledLayer(this);
-
return true;
}
diff --git a/Source/WebCore/platform/graphics/android/TreeManager.cpp b/Source/WebCore/platform/graphics/android/TreeManager.cpp
index fe55df8..71e5f6b 100644
--- a/Source/WebCore/platform/graphics/android/TreeManager.cpp
+++ b/Source/WebCore/platform/graphics/android/TreeManager.cpp
@@ -28,6 +28,7 @@
#include "Layer.h"
#include "BaseLayerAndroid.h"
+#include "ScrollableLayerAndroid.h"
#include "TilesManager.h"
#include <cutils/log.h>
@@ -175,6 +176,23 @@ void TreeManager::updateWithTree(Layer* newTree, bool brandNew)
m_paintingTree->setIsPainting(m_drawingTree);
}
+void TreeManager::updateScrollableLayerInTree(Layer* tree, int layerId, int x, int y)
+{
+ LayerAndroid* layer;
+ if (tree && tree->countChildren()) {
+ layer = static_cast<LayerAndroid*>(tree->getChild(0))->findById(layerId);
+ if (layer && layer->contentIsScrollable())
+ static_cast<ScrollableLayerAndroid*>(layer)->scrollTo(x, y);
+ }
+}
+
+void TreeManager::updateScrollableLayer(int layerId, int x, int y)
+{
+ updateScrollableLayerInTree(m_queuedTree, layerId, x, y);
+ updateScrollableLayerInTree(m_paintingTree, layerId, x, y);
+ updateScrollableLayerInTree(m_drawingTree, layerId, x, y);
+}
+
bool TreeManager::drawGL(double currentTime, IntRect& viewRect,
SkRect& visibleRect, float scale,
bool enterFastSwapMode, bool* treesSwappedPtr, bool* newTreeHasAnimPtr,
diff --git a/Source/WebCore/platform/graphics/android/TreeManager.h b/Source/WebCore/platform/graphics/android/TreeManager.h
index d2e10c8..83d5300 100644
--- a/Source/WebCore/platform/graphics/android/TreeManager.h
+++ b/Source/WebCore/platform/graphics/android/TreeManager.h
@@ -28,6 +28,7 @@
#include "TestExport.h"
#include <utils/threads.h>
+#include "PerformanceMonitor.h"
class Layer;
class SkRect;
@@ -46,6 +47,8 @@ public:
void updateWithTree(Layer* tree, bool brandNew);
+ void updateScrollableLayer(int layerId, int x, int y);
+
bool drawGL(double currentTime, IntRect& viewRect,
SkRect& visibleRect, float scale,
bool enterFastSwapMode, bool* treesSwappedPtr, bool* newTreeHasAnimPtr,
@@ -60,6 +63,8 @@ public:
int baseContentHeight();
private:
+ static void updateScrollableLayerInTree(Layer* tree, int layerId, int x, int y);
+
void swap();
void clearTrees();
@@ -70,6 +75,7 @@ private:
Layer* m_queuedTree;
bool m_fastSwapMode;
+ PerformanceMonitor m_perf;
};
} // namespace WebCore