15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// found in the LICENSE file.
4558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/compositor/image_transport_factory.h"
6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/command_line.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/compositor/gpu_process_transport_factory.h"
9c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "ui/compositor/compositor.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/compositor/compositor_switches.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
12c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace content {
14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
15558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace {
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)ImageTransportFactory* g_factory = NULL;
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool g_initialized_for_unit_tests = false;
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static gfx::DisableNullDrawGLBindings* g_disable_null_draw = NULL;
190de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)
200de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)void SetFactory(ImageTransportFactory* factory) {
210de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  g_factory = factory;
220de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)}
230de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)
24c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch}
25c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// static
27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid ImageTransportFactory::Initialize() {
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(!g_factory || g_initialized_for_unit_tests);
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (g_initialized_for_unit_tests)
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return;
310de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  SetFactory(new GpuProcessTransportFactory);
32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void ImageTransportFactory::InitializeForUnitTests(
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    scoped_ptr<ImageTransportFactory> factory) {
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(!g_factory);
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(!g_initialized_for_unit_tests);
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  g_initialized_for_unit_tests = true;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::CommandLine* command_line =
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::CommandLine::ForCurrentProcess();
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (command_line->HasSwitch(switches::kEnablePixelOutputInTests))
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    g_disable_null_draw = new gfx::DisableNullDrawGLBindings;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetFactory(factory.release());
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// static
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid ImageTransportFactory::Terminate() {
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  delete g_factory;
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  g_factory = NULL;
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  delete g_disable_null_draw;
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  g_disable_null_draw = NULL;
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  g_initialized_for_unit_tests = false;
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// static
58558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochImageTransportFactory* ImageTransportFactory::GetInstance() {
59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  return g_factory;
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}  // namespace content
63