summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer
diff options
context:
space:
mode:
authorsievers <sievers@chromium.org>2014-09-15 19:23:50 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-16 02:27:03 +0000
commitb46831d14f773db39a3e90dc01281bff3c269649 (patch)
tree6ac11c53dff7dc9ffa47b27aa313c027cc9bc005 /gpu/command_buffer
parent87c58249f011d9d18a04cc135ba4bc7c460405ac (diff)
downloadchromium_src-b46831d14f773db39a3e90dc01281bff3c269649.zip
chromium_src-b46831d14f773db39a3e90dc01281bff3c269649.tar.gz
chromium_src-b46831d14f773db39a3e90dc01281bff3c269649.tar.bz2
android: Disable transfer thread on Adreno 420
BUG=407184,386735 Review URL: https://codereview.chromium.org/564373006 Cr-Commit-Position: refs/heads/master@{#294983}
Diffstat (limited to 'gpu/command_buffer')
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_android.cc70
1 files changed, 47 insertions, 23 deletions
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
index ba1ad2e..eadc34f 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
@@ -16,26 +16,49 @@
namespace gpu {
namespace {
-bool IsBroadcom() {
- const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
- if (vendor)
- return std::string(vendor).find("Broadcom") != std::string::npos;
- return false;
+enum GpuType {
+ GPU_BROADCOM,
+ GPU_IMAGINATION,
+ GPU_NVIDIA_ES31,
+ GPU_ADRENO_420,
+ GPU_OTHER,
+};
+
+std::string MakeString(const char* s) {
+ return std::string(s ? s : "");
}
-bool IsImagination() {
- const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
- if (vendor)
- return std::string(vendor).find("Imagination") != std::string::npos;
- return false;
+GpuType GetGpuType() {
+ const std::string vendor = MakeString(
+ reinterpret_cast<const char*>(glGetString(GL_VENDOR)));
+ const std::string renderer = MakeString(
+ reinterpret_cast<const char*>(glGetString(GL_RENDERER)));
+ const std::string version = MakeString(
+ reinterpret_cast<const char*>(glGetString(GL_VERSION)));
+
+ if (vendor.find("Broadcom") != std::string::npos)
+ return GPU_BROADCOM;
+
+ if (vendor.find("Imagination") != std::string::npos)
+ return GPU_IMAGINATION;
+
+ if (vendor.find("NVIDIA") != std::string::npos &&
+ version.find("OpenGL ES 3.1") != std::string::npos) {
+ return GPU_NVIDIA_ES31;
+ }
+
+ if (vendor.find("Qualcomm") != std::string::npos &&
+ renderer.find("Adreno (TM) 420") != std::string::npos) {
+ return GPU_ADRENO_420;
+ }
+
+ return GPU_OTHER;
}
-bool IsNvidia31() {
- const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
- const char* version = reinterpret_cast<const char*>(glGetString(GL_VERSION));
- return vendor && version &&
- std::string(vendor).find("NVIDIA") != std::string::npos &&
- std::string(version).find("OpenGL ES 3.1") != std::string::npos;
+bool AllowTransferThreadForGpu() {
+ GpuType gpu = GetGpuType();
+ return gpu != GPU_BROADCOM && gpu != GPU_IMAGINATION &&
+ gpu != GPU_NVIDIA_ES31 && gpu != GPU_ADRENO_420;
}
}
@@ -51,24 +74,25 @@ bool IsNvidia31() {
// resolution of crbug.com/271929
AsyncPixelTransferManager* AsyncPixelTransferManager::Create(
gfx::GLContext* context) {
- TRACE_EVENT0("gpu", "AsyncPixelTransferManager::Create");
+ DCHECK(context->IsCurrent(NULL));
switch (gfx::GetGLImplementation()) {
case gfx::kGLImplementationEGLGLES2:
DCHECK(context);
- if (context->HasExtension("EGL_KHR_fence_sync") &&
+ if (!base::SysInfo::IsLowEndDevice() &&
+ context->HasExtension("EGL_KHR_fence_sync") &&
context->HasExtension("EGL_KHR_image") &&
context->HasExtension("EGL_KHR_image_base") &&
context->HasExtension("EGL_KHR_gl_texture_2D_image") &&
context->HasExtension("GL_OES_EGL_image") &&
- !IsBroadcom() &&
- !IsImagination() &&
- !IsNvidia31() &&
- !base::SysInfo::IsLowEndDevice()) {
+ AllowTransferThreadForGpu()) {
+ TRACE_EVENT0("gpu", "AsyncPixelTransferManager_CreateWithThread");
return new AsyncPixelTransferManagerEGL;
}
return new AsyncPixelTransferManagerIdle;
- case gfx::kGLImplementationOSMesaGL:
+ case gfx::kGLImplementationOSMesaGL: {
+ TRACE_EVENT0("gpu", "AsyncPixelTransferManager_CreateIdle");
return new AsyncPixelTransferManagerIdle;
+ }
case gfx::kGLImplementationMockGL:
return new AsyncPixelTransferManagerStub;
default: