| 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: {
|
|
|