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 14namespace ui { 15 16namespace { 17 18bool g_platform_initialized_ui = false; 19bool g_platform_initialized_gpu = false; 20 21} 22 23OzonePlatform::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 30OzonePlatform::~OzonePlatform() { 31 DCHECK_EQ(instance_, this); 32 instance_ = NULL; 33} 34 35// static 36void 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 48void 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 57OzonePlatform* OzonePlatform::GetInstance() { 58 DCHECK(instance_) << "OzonePlatform is not initialized"; 59 return instance_; 60} 61 62// static 63void 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 79OzonePlatform* OzonePlatform::instance_; 80 81} // namespace ui 82