1// Copyright 2014 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 "content/browser/compositor/image_transport_factory.h"
6
7#include "base/command_line.h"
8#include "content/browser/compositor/gpu_process_transport_factory.h"
9#include "ui/compositor/compositor.h"
10#include "ui/compositor/compositor_switches.h"
11#include "ui/gl/gl_implementation.h"
12
13namespace content {
14
15namespace {
16ImageTransportFactory* g_factory = NULL;
17bool g_initialized_for_unit_tests = false;
18static gfx::DisableNullDrawGLBindings* g_disable_null_draw = NULL;
19
20void SetFactory(ImageTransportFactory* factory) {
21  g_factory = factory;
22}
23
24}
25
26// static
27void ImageTransportFactory::Initialize() {
28  DCHECK(!g_factory || g_initialized_for_unit_tests);
29  if (g_initialized_for_unit_tests)
30    return;
31  SetFactory(new GpuProcessTransportFactory);
32}
33
34void ImageTransportFactory::InitializeForUnitTests(
35    scoped_ptr<ImageTransportFactory> factory) {
36  DCHECK(!g_factory);
37  DCHECK(!g_initialized_for_unit_tests);
38  g_initialized_for_unit_tests = true;
39
40  const base::CommandLine* command_line =
41      base::CommandLine::ForCurrentProcess();
42  if (command_line->HasSwitch(switches::kEnablePixelOutputInTests))
43    g_disable_null_draw = new gfx::DisableNullDrawGLBindings;
44
45  SetFactory(factory.release());
46}
47
48// static
49void ImageTransportFactory::Terminate() {
50  delete g_factory;
51  g_factory = NULL;
52  delete g_disable_null_draw;
53  g_disable_null_draw = NULL;
54  g_initialized_for_unit_tests = false;
55}
56
57// static
58ImageTransportFactory* ImageTransportFactory::GetInstance() {
59  return g_factory;
60}
61
62}  // namespace content
63