diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 22:50:01 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 22:50:01 +0000 |
commit | 56aca707d0ad5ace8c5513dae5e31f964ad8f8be (patch) | |
tree | 914281fe049f47c5c3a2abb77d6815d269a13598 | |
parent | e842c17b0d0aaf1b389f56c7e12c0fff4b3b10bb (diff) | |
download | chromium_src-56aca707d0ad5ace8c5513dae5e31f964ad8f8be.zip chromium_src-56aca707d0ad5ace8c5513dae5e31f964ad8f8be.tar.gz chromium_src-56aca707d0ad5ace8c5513dae5e31f964ad8f8be.tar.bz2 |
[Android WebView] Turn on accelerated canvas based on View.isHardwareAccelerated
In onAttachedToWindow, check that if the view is hardware accelerated,
then enable hardware accelerated 2d canvas. Similarly disable canvas on
detach.
Note that accelerated 2d canvas is still off by default, but this patch
adds a command line switch to turn it on.
BUG=332273
Review URL: https://codereview.chromium.org/140753006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245648 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | android_webview/common/aw_switches.cc | 2 | ||||
-rw-r--r-- | android_webview/common/aw_switches.h | 4 | ||||
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 4 | ||||
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwSettings.java | 15 | ||||
-rw-r--r-- | android_webview/lib/main/aw_main_delegate.cc | 7 | ||||
-rw-r--r-- | android_webview/native/aw_settings.cc | 10 | ||||
-rw-r--r-- | android_webview/native/aw_settings.h | 2 |
7 files changed, 42 insertions, 2 deletions
diff --git a/android_webview/common/aw_switches.cc b/android_webview/common/aw_switches.cc index 216b4e3..2c78aa4 100644 --- a/android_webview/common/aw_switches.cc +++ b/android_webview/common/aw_switches.cc @@ -14,4 +14,6 @@ const char kTileMemoryMultiplier[] = "tile-memory-multiplier"; const char kNumGrallocBuffersPerWebview[] = "num-gralloc-buffers-per-webview"; +const char kEnableAccelerated2dCanvas[] = "enable-accelerated-2d-canvas"; + } // namespace switches diff --git a/android_webview/common/aw_switches.h b/android_webview/common/aw_switches.h index c718c05..7b31bfd 100644 --- a/android_webview/common/aw_switches.h +++ b/android_webview/common/aw_switches.h @@ -20,6 +20,10 @@ extern const char kTileMemoryMultiplier[]; // Maximum number of gralloc allocations per webview. extern const char kNumGrallocBuffersPerWebview[]; +// Explicitly enable accelerated 2d canvas. +// TODO(boliu): Remove this switch once on by default. +extern const char kEnableAccelerated2dCanvas[]; + } // namespace switches #endif // ANDROID_WEBVIEW_COMMON_AW_SWITCHES_H_ diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 7ede406..9371b09 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -1550,6 +1550,8 @@ public class AwContents { mContentViewCore.onAttachedToWindow(); nativeOnAttachedToWindow(mNativeAwContents, mContainerView.getWidth(), mContainerView.getHeight()); + mSettings.setEnableSupportedHardwareAcceleratedFeatures( + mContainerView.isHardwareAccelerated()); if (mComponentCallbacks != null) return; mComponentCallbacks = new AwComponentCallbacks(); @@ -1568,6 +1570,8 @@ public class AwContents { mContentViewCore.onDetachedFromWindow(); + mSettings.setEnableSupportedHardwareAcceleratedFeatures(false); + if (mComponentCallbacks != null) { mContainerView.getContext().unregisterComponentCallbacks(mComponentCallbacks); mComponentCallbacks = null; diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java index 6ba9ac6..645ec6a 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java @@ -83,6 +83,7 @@ public class AwSettings { private String mDefaultVideoPosterURL; private float mInitialPageScalePercent = 0; private boolean mSpatialNavigationEnabled; // Default depends on device features. + private boolean mEnableSupportedHardwareAcceleratedFeatures = false; private final boolean mSupportLegacyQuirks; @@ -398,6 +399,20 @@ public class AwSettings { return mSpatialNavigationEnabled; } + void setEnableSupportedHardwareAcceleratedFeatures(boolean enable) { + synchronized (mAwSettingsLock) { + if (mEnableSupportedHardwareAcceleratedFeatures != enable) { + mEnableSupportedHardwareAcceleratedFeatures = enable; + mEventHandler.updateWebkitPreferencesLocked(); + } + } + } + + @CalledByNative + private boolean getEnableSupportedHardwareAcceleratedFeaturesLocked() { + return mEnableSupportedHardwareAcceleratedFeatures; + } + /** * See {@link android.webkit.WebSettings#setNeedInitialFocus}. */ diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc index 5b79eb6..a172b86 100644 --- a/android_webview/lib/main/aw_main_delegate.cc +++ b/android_webview/lib/main/aw_main_delegate.cc @@ -8,6 +8,7 @@ #include "android_webview/browser/gpu_memory_buffer_factory_impl.h" #include "android_webview/browser/in_process_view_renderer.h" #include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h" +#include "android_webview/common/aw_switches.h" #include "android_webview/lib/aw_browser_dependency_factory_impl.h" #include "android_webview/native/aw_geolocation_permission_context.h" #include "android_webview/native/aw_quota_manager_bridge_impl.h" @@ -66,8 +67,10 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) { cl->AppendSwitch(switches::kDisableExperimentalWebGL); cl->AppendSwitch(switches::kDisableSharedWorkers); - // Ganesh backed 2D-Canvas is not yet working and causes crashes. - cl->AppendSwitch(switches::kDisableAccelerated2dCanvas); + // Ganesh backed 2D-Canvas integration is being implemented but not ready to + // be turned on by default yet. + if (!cl->HasSwitch(switches::kEnableAccelerated2dCanvas)) + cl->AppendSwitch(switches::kDisableAccelerated2dCanvas); // File system API not supported (requires some new API; internal bug 6930981) cl->AppendSwitch(switches::kDisableFileSystem); diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc index 0a1312d..13c7f08 100644 --- a/android_webview/native/aw_settings.cc +++ b/android_webview/native/aw_settings.cc @@ -8,12 +8,14 @@ #include "android_webview/native/aw_contents.h" #include "base/android/jni_android.h" #include "base/android/jni_string.h" +#include "base/command_line.h" #include "base/supports_user_data.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_client.h" +#include "content/public/common/content_switches.h" #include "jni/AwSettings_jni.h" #include "webkit/common/user_agent/user_agent.h" #include "webkit/common/webpreferences.h" @@ -45,6 +47,9 @@ class AwSettingsUserData : public base::SupportsUserData::Data { AwSettings::AwSettings(JNIEnv* env, jobject obj, jlong web_contents) : WebContentsObserver( reinterpret_cast<content::WebContents*>(web_contents)), + accelerated_2d_canvas_disabled_by_switch_( + CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableAccelerated2dCanvas)), aw_settings_(env, obj) { reinterpret_cast<content::WebContents*>(web_contents)-> SetUserData(kAwSettingsUserDataKey, new AwSettingsUserData(this)); @@ -312,6 +317,11 @@ void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); web_prefs->spatial_navigation_enabled = Java_AwSettings_getSpatialNavigationLocked(env, obj); + + web_prefs->accelerated_2d_canvas_enabled = + !accelerated_2d_canvas_disabled_by_switch_ && + Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked( + env, obj); } static jlong Init(JNIEnv* env, diff --git a/android_webview/native/aw_settings.h b/android_webview/native/aw_settings.h index 12a2c0a..7075c16 100644 --- a/android_webview/native/aw_settings.h +++ b/android_webview/native/aw_settings.h @@ -50,6 +50,8 @@ class AwSettings : public content::WebContentsObserver { virtual void WebContentsDestroyed( content::WebContents* web_contents) OVERRIDE; + bool accelerated_2d_canvas_disabled_by_switch_; + JavaObjectWeakGlobalRef aw_settings_; }; |