1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/ozone/platform/dri/ozone_platform_gbm.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <dlfcn.h> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <gbm.h> 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include <stdlib.h> 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/at_exit.h" 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/command_line.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/events/ozone/device/device_manager.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/events/ozone/evdev/event_factory_evdev.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_cursor.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/ozone/platform/dri/dri_window.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_delegate_manager.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_delegate_proxy.h" 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/ozone/platform/dri/dri_window_manager.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/ozone/platform/dri/dri_wrapper.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/gbm_buffer.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/ozone/platform/dri/gbm_surface.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/ozone/platform/dri/gbm_surface_factory.h" 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/gpu_platform_support_gbm.h" 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/gpu_platform_support_host_gbm.h" 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/ozone/platform/dri/scanout_buffer.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/ozone/platform/dri/screen_manager.h" 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/ozone/platform/dri/virtual_terminal_manager.h" 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/ozone/public/cursor_factory_ozone.h" 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/gpu_platform_support.h" 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/gpu_platform_support_host.h" 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/ozone_platform.h" 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/ozone/public/ozone_switches.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/chromeos/display_message_handler.h" 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h" 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/dri/chromeos/native_display_delegate_proxy.h" 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace ui { 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kDefaultGraphicsCardPath[] = "/dev/dri/card0"; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class GbmBufferGenerator : public ScanoutBufferGenerator { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GbmBufferGenerator(DriWrapper* dri) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : dri_(dri), 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) glapi_lib_(dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL)), 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_(gbm_create_device(dri_->get_fd())) { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!device_) 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOG(FATAL) << "Unable to initialize gbm for " << kDefaultGraphicsCardPath; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~GbmBufferGenerator() { 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gbm_device_destroy(device_); 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (glapi_lib_) 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) dlclose(glapi_lib_); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gbm_device* device() const { return device_; } 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual scoped_refptr<ScanoutBuffer> Create(const gfx::Size& size) OVERRIDE { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return GbmBuffer::CreateBuffer( 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dri_, device_, SurfaceFactoryOzone::RGBA_8888, size, true); 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DriWrapper* dri_; // Not owned. 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // HACK: gbm drivers have broken linkage 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void *glapi_lib_; 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gbm_device* device_; 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GbmBufferGenerator); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OzonePlatformGbm : public OzonePlatform { 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OzonePlatformGbm(bool use_surfaceless) : use_surfaceless_(use_surfaceless) { 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::AtExitManager::RegisterTask( 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&base::DeletePointer<OzonePlatformGbm>, this)); 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~OzonePlatformGbm() {} 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // OzonePlatform: 906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE { 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return surface_factory_ozone_.get(); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE { 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return cursor_factory_ozone_.get(); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual GpuPlatformSupport* GetGpuPlatformSupport() OVERRIDE { 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return gpu_platform_support_.get(); 986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual GpuPlatformSupportHost* GetGpuPlatformSupportHost() OVERRIDE { 1006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return gpu_platform_support_host_.get(); 1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual scoped_ptr<PlatformWindow> CreatePlatformWindow( 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PlatformWindowDelegate* delegate, 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Rect& bounds) OVERRIDE { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindow> platform_window( 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) new DriWindow(delegate, 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bounds, 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindowDelegate>(new DriWindowDelegateProxy( 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->NextAcceleratedWidget(), 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gpu_platform_support_host_.get())), 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event_factory_ozone_.get(), 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_window_delegate_manager_.get(), 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_.get())); 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci platform_window->Initialize(); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return platform_window.PassAs<PlatformWindow>(); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual scoped_ptr<NativeDisplayDelegate> CreateNativeDisplayDelegate() 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OVERRIDE { 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<NativeDisplayDelegate>(new NativeDisplayDelegateProxy( 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gpu_platform_support_host_.get(), device_manager_.get())); 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void InitializeUI() OVERRIDE { 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) vt_manager_.reset(new VirtualTerminalManager()); 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_window_delegate_manager_.reset(new DriWindowDelegateManager()); 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Needed since the browser process creates the accelerated widgets and that 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // happens through SFO. 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch surface_factory_ozone_.reset(new GbmSurfaceFactory(use_surfaceless_)); 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) device_manager_ = CreateDeviceManager(); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gpu_platform_support_host_.reset(new GpuPlatformSupportHostGbm()); 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cursor_factory_ozone_.reset(new BitmapCursorFactoryOzone); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_.reset( 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new DriWindowManager(gpu_platform_support_host_.get())); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event_factory_ozone_.reset(new EventFactoryEvdev(window_manager_->cursor(), 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_manager_.get())); 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void InitializeGPU() OVERRIDE { 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dri_.reset(new DriWrapper(kDefaultGraphicsCardPath)); 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_->Initialize(); 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) buffer_generator_.reset(new GbmBufferGenerator(dri_.get())); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) screen_manager_.reset(new ScreenManager(dri_.get(), 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) buffer_generator_.get())); 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gpu_window_delegate_manager_.reset(new DriWindowDelegateManager()); 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!surface_factory_ozone_) 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch surface_factory_ozone_.reset(new GbmSurfaceFactory(use_surfaceless_)); 1486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch surface_factory_ozone_->InitializeGpu(dri_.get(), 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) buffer_generator_->device(), 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci screen_manager_.get(), 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gpu_window_delegate_manager_.get()); 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gpu_platform_support_.reset( 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) new GpuPlatformSupportGbm(surface_factory_ozone_.get(), 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gpu_window_delegate_manager_.get(), 15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) screen_manager_.get())); 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS) 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gpu_platform_support_->AddHandler(scoped_ptr<GpuPlatformSupport>( 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new DisplayMessageHandler( 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<NativeDisplayDelegateDri>(new NativeDisplayDelegateDri( 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dri_.get(), 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch screen_manager_.get(), 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL))))); 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (surface_factory_ozone_->InitializeHardware() != 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DriSurfaceFactory::INITIALIZED) 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(FATAL) << "failed to initialize display hardware"; 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool use_surfaceless_; 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<VirtualTerminalManager> vt_manager_; 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<DriWrapper> dri_; 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<GbmBufferGenerator> buffer_generator_; 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<ScreenManager> screen_manager_; 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<DeviceManager> device_manager_; 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<GbmSurfaceFactory> surface_factory_ozone_; 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<BitmapCursorFactoryOzone> cursor_factory_ozone_; 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<EventFactoryEvdev> event_factory_ozone_; 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<GpuPlatformSupportGbm> gpu_platform_support_; 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<GpuPlatformSupportHostGbm> gpu_platform_support_host_; 1846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindowDelegateManager> gpu_window_delegate_manager_; 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(dnicoara) Once we have a mock channel for the software path the window 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // can own the delegates on the browser side. Remove this then. 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindowDelegateManager> ui_window_delegate_manager_; 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Browser side object only. 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindowManager> window_manager_; 19203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OzonePlatformGbm); 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 198116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOzonePlatform* CreateOzonePlatformGbm() { 19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CommandLine* cmd = CommandLine::ForCurrentProcess(); 20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return new OzonePlatformGbm(cmd->HasSwitch(switches::kOzoneUseSurfaceless)); 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace ui 204