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 "base/command_line.h" 6 #include "base/debug/trace_event.h" 7 #include "base/logging.h" 8 #include "ui/events/device_data_manager.h" 9 #include "ui/ozone/platform_object.h" 10 #include "ui/ozone/platform_selection.h" 11 #include "ui/ozone/public/ozone_platform.h" 12 #include "ui/ozone/public/ozone_switches.h" 13 14 namespace ui { 15 16 namespace { 17 18 bool g_platform_initialized_ui = false; 19 bool g_platform_initialized_gpu = false; 20 21 } 22 23 OzonePlatform::OzonePlatform() { 24 DCHECK(!instance_) << "There should only be a single OzonePlatform."; 25 instance_ = this; 26 g_platform_initialized_ui = false; 27 g_platform_initialized_gpu = false; 28 } 29 30 OzonePlatform::~OzonePlatform() { 31 DCHECK_EQ(instance_, this); 32 instance_ = NULL; 33 } 34 35 // static 36 void OzonePlatform::InitializeForUI() { 37 CreateInstance(); 38 if (g_platform_initialized_ui) 39 return; 40 g_platform_initialized_ui = true; 41 instance_->InitializeUI(); 42 // This is deliberately created after initializing so that the platform can 43 // create its own version of DDM. 44 DeviceDataManager::CreateInstance(); 45 } 46 47 // static 48 void OzonePlatform::InitializeForGPU() { 49 CreateInstance(); 50 if (g_platform_initialized_gpu) 51 return; 52 g_platform_initialized_gpu = true; 53 instance_->InitializeGPU(); 54 } 55 56 // static 57 OzonePlatform* OzonePlatform::GetInstance() { 58 DCHECK(instance_) << "OzonePlatform is not initialized"; 59 return instance_; 60 } 61 62 // static 63 void OzonePlatform::CreateInstance() { 64 if (!instance_) { 65 TRACE_EVENT1("ozone", 66 "OzonePlatform::Initialize", 67 "platform", 68 GetOzonePlatformName()); 69 scoped_ptr<OzonePlatform> platform = 70 PlatformObject<OzonePlatform>::Create(); 71 72 // TODO(spang): Currently need to leak this object. 73 OzonePlatform* pl = platform.release(); 74 DCHECK_EQ(instance_, pl); 75 } 76 } 77 78 // static 79 OzonePlatform* OzonePlatform::instance_; 80 81 } // namespace ui 82