diff options
author | Chris Craik <ccraik@google.com> | 2011-08-01 13:44:44 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2011-08-02 16:48:44 -0700 |
commit | af33356e96e56310c66b47b6db913e1a61981ca3 (patch) | |
tree | c9f98c22fc76dd567deb3b96726eddf8fa44ef65 /Source/WebCore/platform/graphics/android | |
parent | d4f990572c3485cdc15cff48c3bedc6e7cad809b (diff) | |
download | external_webkit-af33356e96e56310c66b47b6db913e1a61981ca3.zip external_webkit-af33356e96e56310c66b47b6db913e1a61981ca3.tar.gz external_webkit-af33356e96e56310c66b47b6db913e1a61981ca3.tar.bz2 |
Support registering page swap callback, content inval
bug:5062896
Depends on the following frameworks/base change:
https://android-git.corp.google.com/g/#change,124879
a WebView may now register a page swap callback and content invalidate to
benchmark tile rendering performance
Change-Id: I97f6ed05cff12b11266a472163aab1f3b3ddc87e
Diffstat (limited to 'Source/WebCore/platform/graphics/android')
3 files changed, 13 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp index 014fa40..3aa325f 100644 --- a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp @@ -254,6 +254,11 @@ bool BaseLayerAndroid::drawBasePictureInGL(SkRect& viewport, float scale, *pagesSwapped = true; } + // if no longer trailing behind invalidates, unlock (so invalidates can + // go directly to the the TiledPages without deferral) + if (!needsRedraw) + m_glWebViewState->unlockBaseLayerUpdate(); + m_glWebViewState->paintExtras(); return needsRedraw; } diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp index 07dda03..bc582d9 100644 --- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp +++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp @@ -220,6 +220,7 @@ void GLWebViewState::setExtra(BaseLayerAndroid* layer, SkPicture& picture, void GLWebViewState::inval(const IntRect& rect) { if (m_baseLayerUpdate) { + // base layer isn't locked, so go ahead and issue the inval to both tiled pages m_currentPictureCounter++; if (!rect.isEmpty()) { // find which tiles fall within the invalRect and mark them as dirty @@ -234,6 +235,7 @@ void GLWebViewState::inval(const IntRect& rect) rect.x(), rect.y(), rect.width(), rect.height()); } } else { + // base layer is locked, so defer invalidation until unlockBaseLayerUpdate() m_invalidateRegion.op(rect.x(), rect.y(), rect.maxX(), rect.maxY(), SkRegion::kUnion_Op); } TilesManager::instance()->getProfiler()->nextInval(rect, m_currentScale); diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.h b/Source/WebCore/platform/graphics/android/GLWebViewState.h index 4f8d4fe..82b6f12 100644 --- a/Source/WebCore/platform/graphics/android/GLWebViewState.h +++ b/Source/WebCore/platform/graphics/android/GLWebViewState.h @@ -129,6 +129,12 @@ class LayerAndroid; // paint the tile and the second id (B) represents the pictureSet in which the // tile was invalidated by webkit. Thus, if A < B then tile is dirty. // +// Since invalidates can occur faster than a full tiled page update, the tiled +// page is protected by a 'lock' (m_baseLayerUpdate) that is set to true to +// defer updates to the background layer, giving the foreground time to render +// content instead of constantly flushing with invalidates. See +// lockBaseLayerUpdate() & unlockBaseLayerUpdate(). +// // Painting scheduling // ------------------- // |