OSDN Git Service

Fix framerate cap when multiple webviews exist.
authorDerek Sollenberger <djsollen@google.com>
Tue, 1 Mar 2011 14:23:53 +0000 (09:23 -0500)
committerDerek Sollenberger <djsollen@google.com>
Tue, 1 Mar 2011 14:23:53 +0000 (09:23 -0500)
Each view will now be capped at 60fps. The previous code would
either starve the drawing of additional webviews or would draw
them at a rate of 60fps/N where N is the number of webviews.

Change-Id: I5698d610b17d4c8cfe137c51c2b978dae04ae1cf

WebCore/platform/graphics/android/GLWebViewState.cpp
WebCore/platform/graphics/android/GLWebViewState.h

index 3ca04e9..c65b763 100644 (file)
@@ -71,6 +71,7 @@ GLWebViewState::GLWebViewState(android::Mutex* buttonMutex)
     , m_globalButtonMutex(buttonMutex)
     , m_baseLayerUpdate(true)
     , m_backgroundColor(SK_ColorWHITE)
+    , m_prevDrawTime(0)
 {
     m_viewport.setEmpty();
     m_previousViewport.setEmpty();
@@ -301,19 +302,17 @@ void GLWebViewState::setViewport(SkRect& viewport, float scale)
     m_tiledPageB->updateBaseTileSize();
 }
 
-static double gPrevTime = 0;
-
 bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, float scale, SkColor color)
 {
     glFinish();
 
     double currentTime = WTF::currentTime();
-    double delta = currentTime - gPrevTime;
+    double delta = currentTime - m_prevDrawTime;
 
     if (delta < FRAMERATE_CAP)
         return true;
 
-    gPrevTime = currentTime;
+    m_prevDrawTime = currentTime;
 
     m_baseLayerLock.lock();
     BaseLayerAndroid* baseLayer = m_currentBaseLayer;
index d265b41..e44ec3c 100644 (file)
@@ -252,6 +252,7 @@ private:
     IntRect m_invalidateRect;
 
     SkColor m_backgroundColor;
+    double m_prevDrawTime;
 };
 
 } // namespace WebCore