diff options
author | spang@chromium.org <spang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 18:22:44 +0000 |
---|---|---|
committer | spang@chromium.org <spang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 18:22:44 +0000 |
commit | f93c2c94d7fbe07746cc059d9ac9c27bea6e56fa (patch) | |
tree | fb586fe86db8920318a61db18c7a336aee78886f /ui/ozone/ozone_platform.h | |
parent | 6fa5f6781038c63421b203556fa74efbe78e925f (diff) | |
download | chromium_src-f93c2c94d7fbe07746cc059d9ac9c27bea6e56fa.zip chromium_src-f93c2c94d7fbe07746cc059d9ac9c27bea6e56fa.tar.gz chromium_src-f93c2c94d7fbe07746cc059d9ac9c27bea6e56fa.tar.bz2 |
Implement OzonePlatform
This provides a way to select an ozone implementation to use at build time.
It replaces the previous ad-hoc requirement to inject implementations of
ozone interfaces somewhere during initialization, such as by overriding
ContentMainDelegate::PreSandboxStartup(). That requirement made it
difficult for external ozone implementations to build internal targets such
as content_shell because those targets do not initialize the external ozone
implementation without additional patching. Enabling external ports of
chromium is one of the main goals of ozone.
The OzonePlatform code is located at ui/ozone and depends on code in
ui/gfx and ui/events because it must inject implementations into
those components. The ozone platform is initialized from
ui/aura or ui/gl, as those components need the interfaces provided by ozone
in order to function.
There are two in-tree platforms currently: test (image dump) and dri
(libdrm-based direct rendering). The platform is selected by the setting
ozone_platform gyp variable and defaults to "test".
Review URL: https://codereview.chromium.org/44933002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232170 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/ozone/ozone_platform.h')
-rw-r--r-- | ui/ozone/ozone_platform.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ui/ozone/ozone_platform.h b/ui/ozone/ozone_platform.h new file mode 100644 index 0000000..2426b23 --- /dev/null +++ b/ui/ozone/ozone_platform.h @@ -0,0 +1,55 @@ +// Copyright 2013 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. + +#ifndef UI_OZONE_OZONE_PLATFORM_H_ +#define UI_OZONE_OZONE_PLATFORM_H_ + +#include "base/memory/scoped_ptr.h" +#include "ui/events/ozone/event_factory_ozone.h" +#include "ui/gfx/ozone/surface_factory_ozone.h" +#include "ui/ozone/ozone_export.h" + +namespace ui { + +// Base class for Ozone platform implementations. +// +// Ozone platforms must override this class and implement the virtual +// GetFooFactoryOzone() methods to provide implementations of the +// various ozone interfaces. +// +// The OzonePlatform subclass can own any state needed by the +// implementation that is shared between the various ozone interfaces, +// such as a connection to the windowing system. +// +// A platform is free to use different implementations of each +// interface depending on the context. You can, for example, create +// different objects depending on the underlying hardware, command +// line flags, or whatever is appropriate for the platform. +class OZONE_EXPORT OzonePlatform { + public: + OzonePlatform(); + virtual ~OzonePlatform(); + + // Initialize the platform. Once complete, SurfaceFactoryOzone & + // EventFactoryOzone will be set. + static void Initialize(); + + // Factory getters to override in subclasses. The returned objects will be + // injected into the appropriate layer at startup. Subclasses should not + // inject these objects themselves. Ownership is retained by OzonePlatform. + virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() = 0; + virtual ui::EventFactoryOzone* GetEventFactoryOzone() = 0; + + private: + static OzonePlatform* instance_; + + DISALLOW_COPY_AND_ASSIGN(OzonePlatform); +}; + +// Hook to be provided by the built-in default implementation. +OzonePlatform* CreateDefaultOzonePlatform(); + +} // namespace ui + +#endif // UI_OZONE_OZONE_PLATFORM_H_ |