summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2011-12-01 17:08:14 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-12-01 17:08:14 -0800
commitf286c7d338f3c0f398ee27abe1d37d670c51dbbb (patch)
treedf5a050debc3187af0457cca543ba03111f6ca4b
parentf1a221194f2b0d5fd82d2e98ced94f0553c45986 (diff)
parent70adfd756fa5e71bd6913f3a1d8223ca26d8ec92 (diff)
downloadexternal_webkit-f286c7d338f3c0f398ee27abe1d37d670c51dbbb.zip
external_webkit-f286c7d338f3c0f398ee27abe1d37d670c51dbbb.tar.gz
external_webkit-f286c7d338f3c0f398ee27abe1d37d670c51dbbb.tar.bz2
Merge "Scroll position now passed to all layers" into ics-mr1
-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
-rw-r--r--Source/WebKit/android/nav/WebView.cpp9
6 files changed, 37 insertions, 5 deletions
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
index 9c6265f..ef9dd10 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
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp
index fd05ecb..300b58e 100644
--- a/Source/WebKit/android/nav/WebView.cpp
+++ b/Source/WebKit/android/nav/WebView.cpp
@@ -1093,6 +1093,12 @@ int scrollableLayer(int x, int y, SkIRect* layerRect, SkIRect* bounds)
return 0;
}
+void scrollLayer(int layerId, int x, int y)
+{
+ if (m_glWebViewState)
+ m_glWebViewState->scrollLayer(layerId, x, y);
+}
+
int getBlockLeftEdge(int x, int y, float scale)
{
CachedRoot* root = getFrameCache(AllowNewer);
@@ -2668,6 +2674,9 @@ static bool nativeScrollLayer(JNIEnv* env, jobject obj, jint layerId, jint x,
{
#if ENABLE(ANDROID_OVERFLOW_SCROLL)
WebView* view = GET_NATIVE_VIEW(env, obj);
+ view->scrollLayer(layerId, x, y);
+
+ //TODO: the below only needed for the SW rendering path
LayerAndroid* root = view->compositeRoot();
if (!root)
return false;