diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-15 05:28:41 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-15 05:28:41 +0000 |
commit | 2df8d41bb322115273dfa77665d9be64c277352b (patch) | |
tree | a8167decab2cd2f9bd30eff578244823605954b6 | |
parent | b7e33eeb41580ed766b87151cae092a2e5389711 (diff) | |
download | chromium_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.cc | 8 | ||||
-rw-r--r-- | android_webview/lib/main/aw_main_delegate.cc | 3 | ||||
-rw-r--r-- | gpu/command_buffer/service/mailbox_synchronizer.cc | 24 | ||||
-rw-r--r-- | gpu/command_buffer/service/texture_definition.cc | 9 | ||||
-rwxr-xr-x | ui/gl/generate_bindings.py | 3 |
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' }, |