OSDN Git Service

Do not merge: Cherry-pick fix to framerate cap
authorDerek Sollenberger <djsollen@google.com>
Tue, 1 Mar 2011 14:23:53 +0000 (09:23 -0500)
committerBart Sears <bsears@google.com>
Tue, 1 Mar 2011 20:43:08 +0000 (12:43 -0800)
Bug: 3471680

Fix framerate cap when multiple webviews exist.

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: I359a79f5981bc29d57ce4b94eb00a5c9aee754d0

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

index 57d4c66..0e7f559 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();
@@ -298,19 +299,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 4b71d86..9940631 100644 (file)
@@ -252,6 +252,7 @@ private:
     IntRect m_invalidateRect;
 
     SkColor m_backgroundColor;
+    double m_prevDrawTime;
 };
 
 } // namespace WebCore