summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-15 05:28:41 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-15 05:28:41 +0000
commit2df8d41bb322115273dfa77665d9be64c277352b (patch)
treea8167decab2cd2f9bd30eff578244823605954b6
parentb7e33eeb41580ed766b87151cae092a2e5389711 (diff)
downloadchromium_src-2df8d41bb322115273dfa77665d9be64c277352b.zip
chromium_src-2df8d41bb322115273dfa77665d9be64c277352b.tar.gz
chromium_src-2df8d41bb322115273dfa77665d9be64c277352b.tar.bz2
gpu: Add extension check when initializing MailboxSync
And do not enable accelerated canvas in webview if extensions are missing. BUG=332146 Review URL: https://codereview.chromium.org/196653019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257295 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--android_webview/browser/aw_browser_main_parts.cc8
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc3
-rw-r--r--gpu/command_buffer/service/mailbox_synchronizer.cc24
-rw-r--r--gpu/command_buffer/service/texture_definition.cc9
-rwxr-xr-xui/gl/generate_bindings.py3
5 files changed, 38 insertions, 9 deletions
diff --git a/android_webview/browser/aw_browser_main_parts.cc b/android_webview/browser/aw_browser_main_parts.cc
index c018d1e..653f8c5 100644
--- a/android_webview/browser/aw_browser_main_parts.cc
+++ b/android_webview/browser/aw_browser_main_parts.cc
@@ -8,12 +8,15 @@
#include "android_webview/browser/aw_result_codes.h"
#include "base/android/build_info.h"
#include "base/android/memory_pressure_listener_android.h"
+#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/content_client.h"
+#include "content/public/common/content_switches.h"
#include "content/public/common/result_codes.h"
#include "content/public/common/url_utils.h"
+#include "gpu/command_buffer/service/mailbox_synchronizer.h"
#include "net/android/network_change_notifier_factory_android.h"
#include "net/base/network_change_notifier.h"
#include "ui/base/l10n/l10n_util_android.h"
@@ -59,6 +62,11 @@ int AwBrowserMainParts::PreCreateThreads() {
}
void AwBrowserMainParts::PreMainMessageLoopRun() {
+ if (!gpu::gles2::MailboxSynchronizer::Initialize()) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableAccelerated2dCanvas);
+ }
+
browser_context_->PreMainMessageLoopRun();
// This is needed for WebView Classic backwards compatibility
// See crbug.com/298495
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc
index 34097b0..c11f7a0 100644
--- a/android_webview/lib/main/aw_main_delegate.cc
+++ b/android_webview/lib/main/aw_main_delegate.cc
@@ -25,7 +25,6 @@
#include "content/public/common/content_switches.h"
#include "gpu/command_buffer/client/gl_in_process_context.h"
#include "gpu/command_buffer/service/in_process_command_buffer.h"
-#include "gpu/command_buffer/service/mailbox_synchronizer.h"
#include "media/base/media_switches.h"
#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h"
@@ -67,8 +66,6 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) {
cl->AppendSwitch(switches::kDisableExperimentalWebGL);
cl->AppendSwitch(switches::kDisableSharedWorkers);
- if (!gpu::gles2::MailboxSynchronizer::Initialize())
- cl->AppendSwitch(switches::kDisableAccelerated2dCanvas);
// File system API not supported (requires some new API; internal bug 6930981)
cl->AppendSwitch(switches::kDisableFileSystem);
diff --git a/gpu/command_buffer/service/mailbox_synchronizer.cc b/gpu/command_buffer/service/mailbox_synchronizer.cc
index 09a3f1d..0503fb1 100644
--- a/gpu/command_buffer/service/mailbox_synchronizer.cc
+++ b/gpu/command_buffer/service/mailbox_synchronizer.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/texture_manager.h"
+#include "ui/gl/gl_implementation.h"
namespace gpu {
namespace gles2 {
@@ -20,6 +21,29 @@ MailboxSynchronizer* g_instance = NULL;
// static
bool MailboxSynchronizer::Initialize() {
DCHECK(!g_instance);
+ DCHECK(gfx::GetGLImplementation() != gfx::kGLImplementationNone)
+ << "GL bindings not initialized";
+ switch (gfx::GetGLImplementation()) {
+ case gfx::kGLImplementationMockGL:
+ break;
+ case gfx::kGLImplementationEGLGLES2:
+#if !defined(OS_MACOSX)
+ {
+ if (!gfx::g_driver_egl.ext.b_EGL_KHR_image_base ||
+ !gfx::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image ||
+ !gfx::g_driver_gl.ext.b_GL_OES_EGL_image ||
+ !gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync) {
+ LOG(WARNING) << "MailboxSync not supported due to missing EGL "
+ "image/fence support";
+ return false;
+ }
+ }
+ break;
+#endif
+ default:
+ NOTREACHED();
+ return false;
+ }
g_instance = new MailboxSynchronizer;
return true;
}
diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc
index 686ece7..462131f 100644
--- a/gpu/command_buffer/service/texture_definition.cc
+++ b/gpu/command_buffer/service/texture_definition.cc
@@ -120,11 +120,10 @@ scoped_refptr<NativeImageBufferEGL> NativeImageBufferEGL::Create(
DCHECK_NE(EGL_NO_DISPLAY, egl_display);
DCHECK(glIsTexture(texture_id));
- // TODO: Need to generate and check EGL_KHR_gl_texture_2D_image
- if (!gfx::g_driver_egl.ext.b_EGL_KHR_image_base ||
- !gfx::g_driver_gl.ext.b_GL_OES_EGL_image) {
- return NULL;
- }
+ DCHECK(gfx::g_driver_egl.ext.b_EGL_KHR_image_base &&
+ gfx::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image &&
+ gfx::g_driver_gl.ext.b_GL_OES_EGL_image &&
+ gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync);
const EGLint egl_attrib_list[] = {
EGL_GL_TEXTURE_LEVEL_KHR, 0, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index 8b41bf2..6bf14dd 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -906,7 +906,8 @@ EGL_FUNCTIONS = [
'EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value', },
{ 'return_type': 'EGLImageKHR',
'versions': [{ 'name': 'eglCreateImageKHR',
- 'extensions': ['EGL_KHR_image_base'] }],
+ 'extensions':
+ ['EGL_KHR_image_base', 'EGL_KHR_gl_texture_2D_image'] }],
'arguments':
'EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, '
'const EGLint* attrib_list' },