diff options
author | John Reck <jreck@google.com> | 2012-05-08 16:28:15 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2012-05-08 16:44:20 -0700 |
commit | 35caaaf726b8b17cec92747a1fe42dba44d6b775 (patch) | |
tree | db677de6efc417f232ff8ca6f4c60049f08fec50 /Source/WebKit/android | |
parent | 828c3a7d6b11b21de7ddfbe200eb62b3a0ef0c41 (diff) | |
download | external_webkit-35caaaf726b8b17cec92747a1fe42dba44d6b775.zip external_webkit-35caaaf726b8b17cec92747a1fe42dba44d6b775.tar.gz external_webkit-35caaaf726b8b17cec92747a1fe42dba44d6b775.tar.bz2 |
Disable prerenders if we aren't focused
Bug: 6448418
Change-Id: I624d78a2b674cbd91ebe70008c70967101fbb12a
Diffstat (limited to 'Source/WebKit/android')
-rw-r--r-- | Source/WebKit/android/jni/WebViewCore.cpp | 21 | ||||
-rw-r--r-- | Source/WebKit/android/jni/WebViewCore.h | 8 | ||||
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 14 |
3 files changed, 41 insertions, 2 deletions
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp index dddae43..5c7012f 100644 --- a/Source/WebKit/android/jni/WebViewCore.cpp +++ b/Source/WebKit/android/jni/WebViewCore.cpp @@ -444,6 +444,7 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m , m_forwardingTouchEvents(false) #endif , m_webRequestContext(0) + , m_prerenderEnabled(false) { ALOG_ASSERT(m_mainFrame, "Uh oh, somehow a frameview was made without an initial frame!"); @@ -739,10 +740,30 @@ void WebViewCore::paintContents(WebCore::GraphicsContext* gc, WebCore::IntRect& view->platformWidget()->draw(gc, drawArea); } +void WebViewCore::setPrerenderingEnabled(bool enable) +{ + MutexLocker locker(m_prerenderLock); + m_prerenderEnabled = enable; +} + +bool WebViewCore::prerenderingEnabled() +{ + MutexLocker locker(m_prerenderLock); + return m_prerenderEnabled; +} + SkCanvas* WebViewCore::createPrerenderCanvas(PrerenderedInval* prerendered) { + // Has WebView disabled prerenders (not attached, etc...)? + if (!prerenderingEnabled()) + return 0; + // Does this WebView have focus? + if (!m_mainFrame->page()->focusController()->isActive()) + return 0; + // Are we scrolling? if (currentTimeMS() - m_scrollSetTime < PRERENDER_AFTER_SCROLL_DELAY) return 0; + // Do we have anything to render? if (prerendered->area.isEmpty()) return 0; FloatRect scaleTemp(m_scrollOffsetX, m_scrollOffsetY, m_screenWidth, m_screenHeight); diff --git a/Source/WebKit/android/jni/WebViewCore.h b/Source/WebKit/android/jni/WebViewCore.h index 4603cb8..c8b10d8 100644 --- a/Source/WebKit/android/jni/WebViewCore.h +++ b/Source/WebKit/android/jni/WebViewCore.h @@ -50,6 +50,7 @@ #include <androidfw/KeycodeLabels.h> #include <ui/PixelFormat.h> #include <utils/threads.h> +#include <wtf/Threading.h> namespace WebCore { class Color; @@ -605,6 +606,8 @@ namespace android { int m_lastGeneration; // last action using up to date cache // end of shared members + void setPrerenderingEnabled(bool enable); + // internal functions private: enum InputType { @@ -740,6 +743,8 @@ namespace android { // called from destructor, to remove this from a global list static void removeInstance(WebViewCore*); + bool prerenderingEnabled(); + friend class ListBoxReply; struct JavaGlue; struct JavaGlue* m_javaGlue; @@ -792,6 +797,9 @@ namespace android { #endif scoped_refptr<WebRequestContext> m_webRequestContext; + + WTF::Mutex m_prerenderLock; + bool m_prerenderEnabled; }; } // namespace android diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp index 3822239..1e84a12 100644 --- a/Source/WebKit/android/nav/WebView.cpp +++ b/Source/WebKit/android/nav/WebView.cpp @@ -259,6 +259,9 @@ int drawGL(WebCore::IntRect& invScreenRect, WebCore::IntRect* invalRect, if (!m_baseLayer) return 0; + if (m_viewImpl) + m_viewImpl->setPrerenderingEnabled(!m_isDrawingPaused); + if (!m_glWebViewState) { TilesManager::instance()->setHighEndGfx(m_isHighEndGfx); m_glWebViewState = new GLWebViewState(); @@ -648,8 +651,15 @@ int setHwAccelerated(bool hwAccelerated) { return 0; } - bool m_isDrawingPaused; +void setDrawingPaused(bool isPaused) +{ + m_isDrawingPaused = isPaused; + if (m_viewImpl) + m_viewImpl->setPrerenderingEnabled(!isPaused); +} + private: // local state for WebView + bool m_isDrawingPaused; // private to getFrameCache(); other functions operate in a different thread WebViewCore* m_viewImpl; int m_generation; // associate unique ID with sent kit focus to match with ui @@ -1167,7 +1177,7 @@ static int nativeGetBackgroundColor(JNIEnv* env, jobject obj, jint nativeView) static void nativeSetPauseDrawing(JNIEnv *env, jobject obj, jint nativeView, jboolean pause) { - reinterpret_cast<WebView*>(nativeView)->m_isDrawingPaused = pause; + reinterpret_cast<WebView*>(nativeView)->setDrawingPaused(pause); } static void nativeSetTextSelection(JNIEnv *env, jobject obj, jint nativeView, |