OSDN Git Service

Merge "synchronize animation starts with webkit" into ics-mr1
authorChris Craik <ccraik@google.com>
Wed, 30 Nov 2011 00:55:45 +0000 (16:55 -0800)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Wed, 30 Nov 2011 00:55:45 +0000 (16:55 -0800)
1  2 
Source/WebCore/platform/graphics/android/GLWebViewState.cpp
Source/WebKit/android/nav/WebView.cpp

@@@ -84,9 -84,9 +84,9 @@@ GLWebViewState::GLWebViewState(
      , m_goingLeft(false)
      , m_expandedTileBoundsX(0)
      , m_expandedTileBoundsY(0)
+     , m_highEndGfx(false)
      , m_scale(1)
      , m_layersRenderingMode(kAllTextures)
-     , m_highEndGfx(false)
  {
      m_viewport.setEmpty();
      m_futureViewportTileBounds.setEmpty();
@@@ -335,6 -335,7 +335,6 @@@ double GLWebViewState::setupDrawing(Int
      int top = viewRect.y();
      int width = viewRect.width();
      int height = viewRect.height();
 -    glViewport(left, top, width, height);
  
      ShaderProgram* shader = TilesManager::instance()->shader();
      if (shader->program() == -1) {
          shader->init();
      }
      shader->setViewRect(viewRect);
 -    shader->setViewport(visibleRect);
 +    shader->setViewport(visibleRect, scale);
      shader->setWebViewRect(webViewRect);
      shader->setTitleBarHeight(titleBarHeight);
      shader->setScreenClip(screenClip);
      shader->resetBlending();
  
 +    shader->calculateAnimationDelta();
 +
 +    glViewport(left + shader->getAnimationDeltaX(),
 +               top - shader->getAnimationDeltaY(),
 +               width, height);
 +
      double currentTime = WTF::currentTime();
  
      setViewport(visibleRect, scale);
@@@ -436,7 -431,8 +436,8 @@@ void GLWebViewState::fullInval(
  
  bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
                              IntRect& webViewRect, int titleBarHeight,
-                             IntRect& clip, float scale, bool* buffersSwappedPtr)
+                             IntRect& clip, float scale,
+                             bool* treesSwappedPtr, bool* newTreeHasAnimPtr)
  {
      m_scale = scale;
      TilesManager::instance()->getProfiler()->nextFrame(viewport.fLeft,
      bool fastSwap = isScrolling() || m_layersRenderingMode == kSingleSurfaceRendering;
      ret |= m_treeManager.drawGL(currentTime, rect, viewport,
                                  scale, fastSwap,
-                                 buffersSwappedPtr, &nbTexturesNeeded);
+                                 treesSwappedPtr, newTreeHasAnimPtr,
+                                 &nbTexturesNeeded);
      if (!ret)
          resetFrameworkInval();
  
@@@ -172,7 -172,7 +172,7 @@@ WebView(JNIEnv* env, jobject javaWebVie
      m_javaGlue.m_viewInvalidateRect = GetJMethod(env, clazz, "viewInvalidate", "(IIII)V");
      m_javaGlue.m_postInvalidateDelayed = GetJMethod(env, clazz,
          "viewInvalidateDelayed", "(JIIII)V");
-     m_javaGlue.m_pageSwapCallback = GetJMethod(env, clazz, "pageSwapCallback", "()V");
+     m_javaGlue.m_pageSwapCallback = GetJMethod(env, clazz, "pageSwapCallback", "(Z)V");
      m_javaGlue.m_inFullScreenMode = GetJMethod(env, clazz, "inFullScreenMode", "()Z");
      m_javaGlue.m_getTextHandleScale = GetJMethod(env, clazz, "getTextHandleScale", "()F");
      env->DeleteLocalRef(clazz);
@@@ -505,17 -505,18 +505,18 @@@ bool drawGL(WebCore::IntRect& viewRect
      // once the correct scale is set
      if (!m_visibleRect.hasValidCoordinates())
          return false;
-     bool pagesSwapped = false;
+     bool treesSwapped = false;
+     bool newTreeHasAnim = false;
      bool ret = m_glWebViewState->drawGL(viewRect, m_visibleRect, invalRect,
                                          webViewRect, titleBarHeight, clip, scale,
-                                         &pagesSwapped);
-     if (m_pageSwapCallbackRegistered && pagesSwapped) {
+                                         &treesSwapped, &newTreeHasAnim);
+     if (treesSwapped && (m_pageSwapCallbackRegistered || newTreeHasAnim)) {
          m_pageSwapCallbackRegistered = false;
          LOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!");
          JNIEnv* env = JSC::Bindings::getJNIEnv();
          AutoJObject javaObject = m_javaGlue.object(env);
          if (javaObject.get()) {
-             env->CallVoidMethod(javaObject.get(), m_javaGlue.m_pageSwapCallback);
+             env->CallVoidMethod(javaObject.get(), m_javaGlue.m_pageSwapCallback, newTreeHasAnim);
              checkException(env);
          }
      }
@@@ -1584,7 -1585,6 +1585,7 @@@ class GLDrawFunctor : Functor 
          WebCore::IntRect clip(info->clipLeft, info->clipTop,
                                info->clipRight - info->clipLeft,
                                info->clipBottom - info->clipTop);
 +        TilesManager::instance()->shader()->setWebViewMatrix(info->transform, info->isLayer);
  
          bool retVal = (*wvInstance.*funcPtr)(localViewRect, &inval, webViewRect,
                  titlebarHeight, clip, scale, extras);