Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(827)

Unified Diff: gpu/command_buffer/service/async_pixel_transfer_manager_android.cc

Issue 564373006: android: Disable transfer thread on Adreno 420 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clankium
Patch Set: null check Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
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 ba1ad2e41936d65636c4801e5a86c8bf8c9644ff..eadc34f07a196d298f11be321b339b1b4c26dd81 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:
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698