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