| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/browser/compositor/image_transport_factory.h" |
| |
| #include "base/command_line.h" |
| #include "content/browser/compositor/gpu_process_transport_factory.h" |
| #include "ui/compositor/compositor.h" |
| #include "ui/compositor/compositor_switches.h" |
| #include "ui/gl/gl_implementation.h" |
| |
| namespace content { |
| |
| namespace { |
| ImageTransportFactory* g_factory = NULL; |
| bool g_initialized_for_unit_tests = false; |
| static gl::DisableNullDrawGLBindings* g_disable_null_draw = NULL; |
| |
| void SetFactory(ImageTransportFactory* factory) { |
| g_factory = factory; |
| } |
| |
| } |
| |
| // static |
| void ImageTransportFactory::Initialize() { |
| DCHECK(!g_factory || g_initialized_for_unit_tests); |
| if (g_initialized_for_unit_tests) |
| return; |
| SetFactory(new GpuProcessTransportFactory); |
| } |
| |
| void ImageTransportFactory::InitializeForUnitTests( |
| std::unique_ptr<ImageTransportFactory> factory) { |
| DCHECK(!g_factory); |
| DCHECK(!g_initialized_for_unit_tests); |
| g_initialized_for_unit_tests = true; |
| |
| const base::CommandLine* command_line = |
| base::CommandLine::ForCurrentProcess(); |
| if (command_line->HasSwitch(switches::kEnablePixelOutputInTests)) |
| g_disable_null_draw = new gl::DisableNullDrawGLBindings; |
| |
| SetFactory(factory.release()); |
| } |
| |
| // static |
| void ImageTransportFactory::Terminate() { |
| delete g_factory; |
| g_factory = NULL; |
| delete g_disable_null_draw; |
| g_disable_null_draw = NULL; |
| g_initialized_for_unit_tests = false; |
| } |
| |
| // static |
| ImageTransportFactory* ImageTransportFactory::GetInstance() { |
| return g_factory; |
| } |
| |
| } // namespace content |