1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 30f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// found in the LICENSE file. 40f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/command_line.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/debug/trace_event.h" 70f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/logging.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/device_data_manager.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/ozone/platform_object.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/ozone/platform_selection.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/ozone_platform.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/ozone_switches.h" 130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)namespace ui { 150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)namespace { 170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool g_platform_initialized_ui = false; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool g_platform_initialized_gpu = false; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OzonePlatform::OzonePlatform() { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(!instance_) << "There should only be a single OzonePlatform."; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) instance_ = this; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g_platform_initialized_ui = false; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g_platform_initialized_gpu = false; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)OzonePlatform::~OzonePlatform() { 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_EQ(instance_, this); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) instance_ = NULL; 330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// static 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OzonePlatform::InitializeForUI() { 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateInstance(); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (g_platform_initialized_ui) 390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g_platform_initialized_ui = true; 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) instance_->InitializeUI(); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This is deliberately created after initializing so that the platform can 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // create its own version of DDM. 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DeviceDataManager::CreateInstance(); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OzonePlatform::InitializeForGPU() { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateInstance(); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (g_platform_initialized_gpu) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g_platform_initialized_gpu = true; 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) instance_->InitializeGPU(); 540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// static 57a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochOzonePlatform* OzonePlatform::GetInstance() { 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(instance_) << "OzonePlatform is not initialized"; 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return instance_; 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// static 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OzonePlatform::CreateInstance() { 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!instance_) { 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TRACE_EVENT1("ozone", 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "OzonePlatform::Initialize", 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "platform", 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetOzonePlatformName()); 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<OzonePlatform> platform = 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PlatformObject<OzonePlatform>::Create(); 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // TODO(spang): Currently need to leak this object. 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) OzonePlatform* pl = platform.release(); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_EQ(instance_, pl); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)OzonePlatform* OzonePlatform::instance_; 800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} // namespace ui 82