Index: ui/ozone/public/ozone_client.cc |
diff --git a/ui/ozone/public/ozone_client.cc b/ui/ozone/public/ozone_client.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c6205c22eb42a031a536a82b0b4431c4588c6295 |
--- /dev/null |
+++ b/ui/ozone/public/ozone_client.cc |
@@ -0,0 +1,70 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/command_line.h" |
+#include "base/lazy_instance.h" |
+#include "base/logging.h" |
+#include "base/trace_event/trace_event.h" |
+#include "ui/ozone/platform_object.h" |
+#include "ui/ozone/platform_selection.h" |
+#include "ui/ozone/public/ozone_client.h" |
+#include "ui/ozone/public/ozone_platform.h" |
+#include "ui/ozone/public/ozone_switches.h" |
+ |
+namespace ui { |
+ |
+namespace { |
+ |
+OzoneClient* g_instance = nullptr; |
+ |
+} // namespace |
+ |
+OzoneClient::OzoneClient() { |
+ DCHECK(!g_instance) << "There should only be a single OzoneClient."; |
+ g_instance = this; |
+} |
+ |
+OzoneClient::~OzoneClient() { |
+ DCHECK_EQ(g_instance, this); |
+ g_instance = nullptr; |
+} |
+ |
+// static |
+void OzoneClient::InitializeForUI() { |
+ if (g_instance) |
+ return; |
+ |
+ CreateInstance(); |
+ g_instance->InitializeUI(); |
+} |
+ |
+// static |
+void OzoneClient::InitializeForRenderer() { |
+ if (g_instance) |
+ return; |
+ |
+ CreateInstance(); |
+ g_instance->InitializeRenderer(); |
+} |
+ |
+// static |
+OzoneClient* OzoneClient::GetInstance() { |
+ DCHECK(g_instance) << "OzoneClient is not initialized"; |
+ return g_instance; |
+} |
+ |
+// static |
+void OzoneClient::CreateInstance() { |
+ if (!g_instance) { |
+ TRACE_EVENT1("ozone", "OzoneClient::CreateInstance", "platform", |
+ GetOzonePlatformName()); |
+ scoped_ptr<OzoneClient> platform = PlatformObject<OzoneClient>::Create(); |
+ |
+ // TODO(spang): Currently need to leak this object. |
+ OzoneClient* pl = platform.release(); |
+ DCHECK_EQ(g_instance, pl); |
+ } |
+} |
+ |
+} // namespace ui |