1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
6
7#include "base/command_line.h"
8#include "base/debug/trace_event.h"
9#include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
10#include "gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h"
11#include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
12#include "gpu/command_buffer/service/gpu_switches.h"
13#include "ui/gl/gl_implementation.h"
14
15namespace gpu {
16
17AsyncPixelTransferManager* AsyncPixelTransferManager::Create(
18    gfx::GLContext* context) {
19  TRACE_EVENT0("gpu", "AsyncPixelTransferManager::Create");
20  if (CommandLine::ForCurrentProcess()->HasSwitch(
21          switches::kEnableShareGroupAsyncTextureUpload)) {
22    DCHECK(context);
23    return static_cast<AsyncPixelTransferManager*> (
24        new AsyncPixelTransferManagerShareGroup(context));
25  }
26
27  switch (gfx::GetGLImplementation()) {
28    case gfx::kGLImplementationOSMesaGL:
29    case gfx::kGLImplementationDesktopGL:
30    case gfx::kGLImplementationEGLGLES2:
31      return new AsyncPixelTransferManagerIdle;
32    case gfx::kGLImplementationMockGL:
33      return new AsyncPixelTransferManagerStub;
34    default:
35      NOTREACHED();
36      return NULL;
37  }
38}
39
40}  // namespace gpu
41