diff options
| author | Nicolas Roard <nicolas@android.com> | 2010-10-04 13:37:38 -0700 |
|---|---|---|
| committer | Nicolas Roard <nicolas@android.com> | 2010-10-13 11:05:25 -0700 |
| commit | a5ffb7c279df240a07658953e1bd5df6d0480cb6 (patch) | |
| tree | 6df2820d0158915b646d9d2fa4969713f1674d8d /WebKit | |
| parent | a8dc96a2bf5512decc072f69093f006739c04fd2 (diff) | |
| download | external_webkit-a5ffb7c279df240a07658953e1bd5df6d0480cb6.zip external_webkit-a5ffb7c279df240a07658953e1bd5df6d0480cb6.tar.gz external_webkit-a5ffb7c279df240a07658953e1bd5df6d0480cb6.tar.bz2 | |
GL rendering (without layers)
This is a two-parts CL, Its counterpart is https://android-git.corp.google.com/g/#change,64863
Change-Id: I40fcf3b7b6d28b887b101219c973070aeefbb777
Diffstat (limited to 'WebKit')
| -rw-r--r-- | WebKit/android/nav/WebView.cpp | 76 |
1 files changed, 72 insertions, 4 deletions
diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index 841434f..4093fa5 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -53,6 +53,7 @@ #ifdef ANDROID_INSTRUMENT #include "TimeCounter.h" #endif +#include "TilesManager.h" #include "WebCoreJni.h" #include "WebRequestContext.h" #include "WebViewCore.h" @@ -384,6 +385,56 @@ void drawCursorPostamble() } } +bool drawGL(WebCore::IntRect& viewRect, float scale, int extras) +{ +#if USE(ACCELERATED_COMPOSITING) + if (!m_baseLayer) + return false; + + m_glWebViewState.resetExtra(false); + CachedRoot* root = getFrameCache(AllowNewer); + if (!root) { + DBG_NAV_LOG("!root"); + if (extras == DrawExtrasCursorRing) + resetCursorRing(); + return false; + } + DrawExtra* extra = 0; + switch (extras) { + case DrawExtrasFind: + extra = &m_findOnPage; + break; + case DrawExtrasSelection: + extra = &m_selectText; + break; + case DrawExtrasCursorRing: + if (drawCursorPreamble(root) && m_ring.setup()) { + if (!m_ring.m_isButton) + extra = &m_ring; + drawCursorPostamble(); + } + break; + default: + ; + } + + unsigned int pic = m_glWebViewState.currentPictureCounter(); + if (extra) { + LayerAndroid* mainPicture = new LayerAndroid(m_navPictureUI); + m_glWebViewState.setExtra(extra, mainPicture); + } else { + m_glWebViewState.resetExtra(true); + } + + SkRect visibleRect; + calcOurContentVisibleRect(&visibleRect); + bool ret = m_baseLayer->drawGL(viewRect, visibleRect, scale); + if (ret || m_glWebViewState.currentPictureCounter() != pic) + return true; +#endif + return false; +} + PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split) { PictureSet* ret = 0; @@ -1207,8 +1258,12 @@ static void copyScrollPositionRecursive(const LayerAndroid* from, } } -void setBaseLayer(BaseLayerAndroid* layer) +void setBaseLayer(BaseLayerAndroid* layer, WebCore::IntRect& rect) { +#if USE(ACCELERATED_COMPOSITING) + m_glWebViewState.setBaseLayer(layer, rect); +#endif + if (layer) { copyScrollPositionRecursive(compositeRoot(), static_cast<LayerAndroid*>(layer->getChild(0))); @@ -1261,6 +1316,9 @@ private: // local state for WebView FindOnPage m_findOnPage; CursorRing m_ring; BaseLayerAndroid* m_baseLayer; +#if USE(ACCELERATED_COMPOSITING) + GLWebViewState m_glWebViewState; +#endif }; // end of WebView class /* @@ -1497,6 +1555,13 @@ static jint nativeDraw(JNIEnv *env, jobject obj, jobject canv, jint color, return reinterpret_cast<jint>(GET_NATIVE_VIEW(env, obj)->draw(canvas, color, extras, split)); } +static bool nativeDrawGL(JNIEnv *env, jobject obj, jobject jrect, + jfloat scale, jint extras) +{ + WebCore::IntRect viewRect = jrect_to_webrect(env, jrect); + return GET_NATIVE_VIEW(env, obj)->drawGL(viewRect, scale, extras); +} + static bool nativeEvaluateLayersAnimations(JNIEnv *env, jobject obj) { #if USE(ACCELERATED_COMPOSITING) @@ -1507,10 +1572,11 @@ static bool nativeEvaluateLayersAnimations(JNIEnv *env, jobject obj) return false; } -static void nativeSetBaseLayer(JNIEnv *env, jobject obj, jint layer) +static void nativeSetBaseLayer(JNIEnv *env, jobject obj, jint layer, jobject jrect) { BaseLayerAndroid* layerImpl = reinterpret_cast<BaseLayerAndroid*>(layer); - GET_NATIVE_VIEW(env, obj)->setBaseLayer(layerImpl); + WebCore::IntRect rect = jrect_to_webrect(env, jrect); + GET_NATIVE_VIEW(env, obj)->setBaseLayer(layerImpl, rect); } static void nativeReplaceBaseContent(JNIEnv *env, jobject obj, jint content) @@ -2165,6 +2231,8 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeDestroy }, { "nativeDraw", "(Landroid/graphics/Canvas;IIZ)I", (void*) nativeDraw }, + { "nativeDrawGL", "(Landroid/graphics/Rect;FI)Z", + (void*) nativeDrawGL }, { "nativeDumpDisplayTree", "(Ljava/lang/String;)V", (void*) nativeDumpDisplayTree }, { "nativeEvaluateLayersAnimations", "()Z", @@ -2257,7 +2325,7 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeSetFindIsUp }, { "nativeSetHeightCanMeasure", "(Z)V", (void*) nativeSetHeightCanMeasure }, - { "nativeSetBaseLayer", "(I)V", + { "nativeSetBaseLayer", "(ILandroid/graphics/Rect;)V", (void*) nativeSetBaseLayer }, { "nativeReplaceBaseContent", "(I)V", (void*) nativeReplaceBaseContent }, |
