summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 22:50:01 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 22:50:01 +0000
commit56aca707d0ad5ace8c5513dae5e31f964ad8f8be (patch)
tree914281fe049f47c5c3a2abb77d6815d269a13598
parente842c17b0d0aaf1b389f56c7e12c0fff4b3b10bb (diff)
downloadchromium_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.cc2
-rw-r--r--android_webview/common/aw_switches.h4
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java4
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwSettings.java15
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc7
-rw-r--r--android_webview/native/aw_settings.cc10
-rw-r--r--android_webview/native/aw_settings.h2
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_;
};