summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebCore/config.h1
-rw-r--r--WebCore/page/FrameView.cpp7
-rw-r--r--WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp3
-rw-r--r--WebCore/rendering/RenderLayerCompositor.cpp17
-rw-r--r--WebKit/android/nav/CacheBuilder.cpp49
5 files changed, 39 insertions, 38 deletions
diff --git a/WebCore/config.h b/WebCore/config.h
index c7dd31f..a7dfecd 100644
--- a/WebCore/config.h
+++ b/WebCore/config.h
@@ -143,6 +143,7 @@
#define ENABLE_BLOB 1
#define ANDROID_FLATTEN_FRAMESET
+#define ANDROID_FLATTEN_IFRAME
#define ANDROID_LAYOUT
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index 7d9920b..5374487 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -554,13 +554,6 @@ void FrameView::updateCompositingLayers()
RenderView* view = m_frame->contentRenderer();
if (!view)
return;
-#if ENABLE(ANDROID_OVERFLOW_SCROLL)
- // Enter compositing mode for child frames that have layout dimensions. The
- // decision to enable compositing for the RenderView will be done in the
- // compositor.
- if (m_frame->ownerRenderer() && (layoutWidth() | layoutHeight()))
- enterCompositingMode();
-#endif
// This call will make sure the cached hasAcceleratedCompositing is updated from the pref
view->compositor()->cacheAcceleratedCompositingFlags();
diff --git a/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp b/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
index c0ad248..0fdbc21 100644
--- a/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
+++ b/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
@@ -367,7 +367,8 @@ void GraphicsLayerAndroid::setDrawsContent(bool drawsContent)
m_foregroundClipLayer->addChild(m_foregroundLayer);
m_contentLayer->addChild(m_foregroundClipLayer);
- } else if (layer->isRootLayer() &&
+ } else if (false /* FIXME: disable until navigation is fixed */ &&
+ layer->isRootLayer() &&
layer->renderer()->frame()->ownerRenderer()) {
// Replace the content layer with a scrollable layer.
LayerAndroid* layer = new ScrollableLayerAndroid(*m_contentLayer);
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index 00e596b..ce80e5a 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -1178,20 +1178,9 @@ bool RenderLayerCompositor::requiresCompositingForMobileSites(const RenderLayer*
return true;
HTMLFrameOwnerElement* ownerElement = enclosingIFrameElement();
RenderObject* renderer = ownerElement ? ownerElement->renderer() : 0;
- if (layer->isRootLayer() && renderer && renderer->isRenderIFrame()) {
- if (layer->renderer()->frame()) {
- FrameView* view = layer->renderer()->frame()->view();
- if (view) {
- // Enable compositing if the frame can scroll and the contents
- // are larger than the layout dimensions.
- ScrollbarMode h,v;
- view->scrollbarModes(h, v);
- if ((h != ScrollbarAlwaysOff && view->layoutWidth() < view->contentsWidth()) ||
- (v != ScrollbarAlwaysOff && view->layoutHeight() < view->contentsHeight()))
- return true;
- }
- }
- }
+ // FIXME: Disabled for now until navigation is fixed.
+ if (false && layer->isRootLayer() && renderer && renderer->isRenderIFrame())
+ return true;
#endif
#if ENABLE(COMPOSITED_FIXED_ELEMENTS)
// First, check if we are in an iframe, and if so bail out
diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp
index 52ee72c..cbc580d 100644
--- a/WebKit/android/nav/CacheBuilder.cpp
+++ b/WebKit/android/nav/CacheBuilder.cpp
@@ -55,7 +55,6 @@
#include "RenderListBox.h"
#include "RenderSkinCombo.h"
#include "RenderTextControl.h"
-#include "RenderView.h"
#include "RenderWidget.h"
#include "SkCanvas.h"
#include "SkPoint.h"
@@ -95,9 +94,7 @@ Frame* CacheBuilder::FrameAnd(const CacheBuilder* cacheBuilder) {
}
CacheBuilder::LayerTracker::~LayerTracker() {
- // Check for a stacking context to prevent a crash in layers without a
- // parent.
- if (mRenderLayer && mRenderLayer->stackingContext())
+ if (mRenderLayer)
// Restore the scroll position of the layer. Does not affect layers
// without overflow scroll as the layer will not be scrolled.
mRenderLayer->scrollToOffset(mScroll.x(), mScroll.y(), false, false);
@@ -1026,13 +1023,6 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
cachedRoot->setFocusBounds(focused->getRect());
int globalOffsetX, globalOffsetY;
GetGlobalOffset(frame, &globalOffsetX, &globalOffsetY);
-#if USE(ACCELERATED_COMPOSITING)
- // The frame itself might be composited so we need to track the layer. Do
- // not track the base frame's layer as the main content is draw as part of
- // BaseLayerAndroid's picture.
- if (frame != root && frame->contentRenderer()->usesCompositing() && node->lastChild())
- TrackLayer(layerTracker, frame->contentRenderer(), node->lastChild(), globalOffsetX, globalOffsetY);
-#endif
while (walk.mMore || (node = node->traverseNextNode()) != NULL) {
#if DUMP_NAV_CACHE
nodeIndex++;
@@ -1115,8 +1105,37 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
#if USE(ACCELERATED_COMPOSITING)
// If this renderer has its own layer and the layer is composited,
// start tracking it.
- if (lastChild && nodeRenderer->hasLayer() && toRenderBox(nodeRenderer)->layer()->backing())
- TrackLayer(layerTracker, nodeRenderer, lastChild, globalOffsetX, globalOffsetY);
+ if (lastChild && nodeRenderer->hasLayer() && toRenderBox(nodeRenderer)->layer()->backing()) {
+ TrackLayer(layerTracker, nodeRenderer, lastChild,
+ globalOffsetX, globalOffsetY);
+ size_t size = tracker.size();
+ LayerAndroid* layer = layerTracker.last().mLayer;
+ if (layer) {
+ int id = layer->uniqueId();
+ const RenderLayer* renderLayer =
+ layerTracker.last().mRenderLayer;
+ // Global location
+ IntPoint loc = renderLayer->absoluteBoundingBox().location();
+ loc.move(globalOffsetX, globalOffsetY);
+ // if this is a child of a CachedNode, add a layer
+ size_t limit = cachedFrame->layerCount() == 0 ? 0 :
+ cachedFrame->lastLayer()->cachedNodeIndex();
+ for (size_t index = 1; index < tracker.size(); index++) {
+ const FocusTracker& cursorNode = tracker.at(index);
+ size_t index = cursorNode.mCachedNodeIndex;
+ if (index <= limit) { // already added?
+ DBG_NAV_LOGD("index=%d limit=%d id=%d", index,
+ limit, id);
+ continue;
+ }
+ DBG_NAV_LOGD("call add layer %d", id);
+ CachedNode* trackedNode = cachedFrame->getIndex(index);
+ trackedNode->setIsInLayer(true);
+ trackedNode->setIsUnclipped(true);
+ AddLayer(cachedFrame, index, loc, id);
+ }
+ }
+ }
#endif
}
bool more = walk.mMore;
@@ -2917,9 +2936,7 @@ void CacheBuilder::TrackLayer(WTF::Vector<LayerTracker>& layerTracker,
aLayer = aLayer->getChild(0)->getChild(0);
if (!aLayer)
return;
- // Prevent a crash when scrolling a layer that does not have a parent.
- if (layer->stackingContext())
- layer->scrollToOffset(0, 0, false, false);
+ layer->scrollToOffset(0, 0, false, false);
#endif
layerTracker.grow(layerTracker.size() + 1);
LayerTracker& indexTracker = layerTracker.last();