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 eadc34f07a196d298f11be321b339b1b4c26dd81..66ceca181dada25ff882615bee2f570d97913492 100644 |
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc |
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc |
@@ -4,12 +4,15 @@ |
#include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
+#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
#include "base/sys_info.h" |
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h" |
#include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h" |
#include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" |
#include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h" |
#include "gpu/command_buffer/service/async_pixel_transfer_manager_sync.h" |
+#include "gpu/command_buffer/service/gpu_switches.h" |
#include "ui/gl/gl_context.h" |
#include "ui/gl/gl_implementation.h" |
@@ -61,6 +64,25 @@ bool AllowTransferThreadForGpu() { |
gpu != GPU_NVIDIA_ES31 && gpu != GPU_ADRENO_420; |
} |
+bool IsAsyncEGLUploadsDisabled(gfx::GLContext* context) { |
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
+ if (!command_line.HasSwitch(switches::kDisableAsyncEGLUploadsIfCompressed)) |
+ return false; |
+ |
+ if (context->HasExtension("GL_EXT_texture_compression_s3tc") || |
+ (context->HasExtension("GL_ANGLE_texture_compression_dxt1") && |
+ context->HasExtension("GL_ANGLE_texture_compression_dxt5")) || |
+ context->HasExtension("GL_OES_compressed_ETC1_RGB8_texture") || |
+ context->HasExtension("GL_AMD_compressed_ATC_texture") || |
+ context->HasExtension("GL_ATI_texture_compression_atitc")) { |
+ if (!command_line.HasSwitch( |
+ switches::kEnableAsyncPixelTransferManagerCompressed)) { |
+ return true; |
+ } |
+ } |
+ |
+ return false; |
+} |
} |
// We only used threaded uploads when we can: |
@@ -68,6 +90,7 @@ bool AllowTransferThreadForGpu() { |
// - Bind EGLImages to OpenGL textures (GL_OES_EGL_image) |
// - Use fences (to test for upload completion). |
// - The heap size is large enough. |
+// - No compressed formats are used. |
// TODO(kaanb|epenner): Remove the IsImagination() check pending the |
// resolution of crbug.com/249147 |
// TODO(kaanb|epenner): Remove the IsLowEndDevice() check pending the |
@@ -84,9 +107,14 @@ AsyncPixelTransferManager* AsyncPixelTransferManager::Create( |
context->HasExtension("EGL_KHR_image_base") && |
context->HasExtension("EGL_KHR_gl_texture_2D_image") && |
context->HasExtension("GL_OES_EGL_image") && |
- AllowTransferThreadForGpu()) { |
+ AllowTransferThreadForGpu() && !IsAsyncEGLUploadsDisabled(context)) { |
TRACE_EVENT0("gpu", "AsyncPixelTransferManager_CreateWithThread"); |
- return new AsyncPixelTransferManagerEGL; |
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
+ if (command_line.HasSwitch( |
+ switches::kEnableAsyncPixelTransferManagerCompressed)) |
+ return new AsyncPixelTransferManagerCompressed; |
+ else |
+ return new AsyncPixelTransferManagerEGL; |
} |
return new AsyncPixelTransferManagerIdle; |
case gfx::kGLImplementationOSMesaGL: { |