diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/aura/DEPS | 1 | ||||
-rw-r--r-- | ui/aura/aura.gyp | 5 | ||||
-rw-r--r-- | ui/aura/root_window_host_ozone.cc | 8 | ||||
-rw-r--r-- | ui/gfx/ozone/surface_factory_ozone.cc | 15 | ||||
-rw-r--r-- | ui/gl/DEPS | 1 | ||||
-rw-r--r-- | ui/gl/gl.gyp | 5 | ||||
-rw-r--r-- | ui/gl/gl_implementation_ozone.cc | 2 | ||||
-rw-r--r-- | ui/ozone/DEPS | 4 | ||||
-rw-r--r-- | ui/ozone/OWNERS | 1 | ||||
-rw-r--r-- | ui/ozone/ozone.gyp | 50 | ||||
-rw-r--r-- | ui/ozone/ozone_export.h | 29 | ||||
-rw-r--r-- | ui/ozone/ozone_platform.cc | 33 | ||||
-rw-r--r-- | ui/ozone/ozone_platform.h | 55 | ||||
-rw-r--r-- | ui/ozone/ozone_switches.cc | 12 | ||||
-rw-r--r-- | ui/ozone/ozone_switches.h | 17 | ||||
-rw-r--r-- | ui/ozone/platform/dri/ozone_platform_dri.cc | 25 | ||||
-rw-r--r-- | ui/ozone/platform/dri/ozone_platform_dri.h | 35 | ||||
-rw-r--r-- | ui/ozone/platform/test/ozone_platform_test.cc | 35 | ||||
-rw-r--r-- | ui/ozone/platform/test/ozone_platform_test.h | 35 |
19 files changed, 350 insertions, 18 deletions
diff --git a/ui/aura/DEPS b/ui/aura/DEPS index a5cb260..c252218 100644 --- a/ui/aura/DEPS +++ b/ui/aura/DEPS @@ -9,5 +9,6 @@ include_rules = [ "+ui/gfx", "+ui/metro_viewer", # TODO(beng): investigate moving remote_root_window_host # to ui/metro_viewer. + "+ui/ozone", ] diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp index 70334fe..e9d2733 100644 --- a/ui/aura/aura.gyp +++ b/ui/aura/aura.gyp @@ -125,6 +125,11 @@ 'input_state_lookup.cc', ], }], + ['use_ozone==1', { + 'dependencies': [ + '../ozone/ozone.gyp:ozone', + ], + }], ], }, { diff --git a/ui/aura/root_window_host_ozone.cc b/ui/aura/root_window_host_ozone.cc index dbdd762..66cfdd5 100644 --- a/ui/aura/root_window_host_ozone.cc +++ b/ui/aura/root_window_host_ozone.cc @@ -6,14 +6,14 @@ #include "ui/aura/root_window.h" #include "ui/gfx/ozone/surface_factory_ozone.h" +#include "ui/ozone/ozone_platform.h" namespace aura { RootWindowHostOzone::RootWindowHostOzone(const gfx::Rect& bounds) - : delegate_(NULL), - widget_(0), - bounds_(bounds), - factory_(ui::EventFactoryOzone::GetInstance()) { + : delegate_(NULL), widget_(0), bounds_(bounds) { + ui::OzonePlatform::Initialize(); + factory_.reset(ui::EventFactoryOzone::GetInstance()); factory_->StartProcessingEvents(); gfx::SurfaceFactoryOzone* surface_factory = gfx::SurfaceFactoryOzone::GetInstance(); diff --git a/ui/gfx/ozone/surface_factory_ozone.cc b/ui/gfx/ozone/surface_factory_ozone.cc index 5ba8de0..a43c025 100644 --- a/ui/gfx/ozone/surface_factory_ozone.cc +++ b/ui/gfx/ozone/surface_factory_ozone.cc @@ -50,20 +50,7 @@ SurfaceFactoryOzone::~SurfaceFactoryOzone() { } SurfaceFactoryOzone* SurfaceFactoryOzone::GetInstance() { - if (!impl_) { - const char kOzoneFileSurface[] = "ozone-dump-file"; - CommandLine* cmd = CommandLine::ForCurrentProcess(); - if (cmd->HasSwitch(kOzoneFileSurface)) { - base::FilePath location = cmd->GetSwitchValuePath(kOzoneFileSurface); - if (location.empty()) - location = base::FilePath("/dev/null"); - impl_ = new FileSurfaceFactoryOzone(location); - } else { - LOG(WARNING) << "No SurfaceFactoryOzone implementation set. Using default" - " gfx::SoftwareSurfaceFactoryOzone."; - impl_ = new SoftwareSurfaceFactoryOzone(); - } - } + CHECK(impl_) << "No SurfaceFactoryOzone implementation set."; return impl_; } @@ -3,4 +3,5 @@ include_rules = [ "+third_party/mesa/src/include", "+third_party/skia", "+ui/gfx", + "+ui/ozone", ] diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp index 95db809..1b58ef9 100644 --- a/ui/gl/gl.gyp +++ b/ui/gl/gl.gyp @@ -282,6 +282,11 @@ ['OS!="android"', { 'sources/': [ ['exclude', '^android/'] ], }], + ['use_ozone==1', { + 'dependencies': [ + '../ozone/ozone.gyp:ozone', + ], + }], ], }, { diff --git a/ui/gl/gl_implementation_ozone.cc b/ui/gl/gl_implementation_ozone.cc index 2ca30a4..10ab44d 100644 --- a/ui/gl/gl_implementation_ozone.cc +++ b/ui/gl/gl_implementation_ozone.cc @@ -10,6 +10,7 @@ #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_implementation_linux.h" #include "ui/gl/gl_osmesa_api_implementation.h" +#include "ui/ozone/ozone_platform.h" namespace gfx { @@ -42,6 +43,7 @@ bool InitializeGLBindings(GLImplementation implementation) { case kGLImplementationOSMesaGL: return InitializeGLBindingsOSMesaGL(); case kGLImplementationEGLGLES2: + ui::OzonePlatform::Initialize(); if (!gfx::SurfaceFactoryOzone::GetInstance()->LoadEGLGLES2Bindings( base::Bind(&AddGLNativeLibrary), base::Bind(&SetGLGetProcAddressProc))) diff --git a/ui/ozone/DEPS b/ui/ozone/DEPS new file mode 100644 index 0000000..8cb61f5 --- /dev/null +++ b/ui/ozone/DEPS @@ -0,0 +1,4 @@ +include_rules = [ + "+ui/events", + "+ui/gfx", +] diff --git a/ui/ozone/OWNERS b/ui/ozone/OWNERS new file mode 100644 index 0000000..77f21b5 --- /dev/null +++ b/ui/ozone/OWNERS @@ -0,0 +1 @@ +rjkroege@chromium.org diff --git a/ui/ozone/ozone.gyp b/ui/ozone/ozone.gyp new file mode 100644 index 0000000..32008b7 --- /dev/null +++ b/ui/ozone/ozone.gyp @@ -0,0 +1,50 @@ +# 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. + +{ + 'variables': { + 'chromium_code': 1, + 'external_ozone_platform_files': [], + 'external_ozone_platform_deps': [], + }, + 'targets': [ + { + 'target_name': 'ozone', + 'type': '<(component)', + 'dependencies': [ + '<(DEPTH)/base/base.gyp:base', + '<(DEPTH)/ui/gfx/gfx.gyp:gfx', + '<(DEPTH)/ui/events/events.gyp:events', + '<(DEPTH)/skia/skia.gyp:skia', + '<@(external_ozone_platform_deps)', + ], + 'defines': [ + 'OZONE_IMPLEMENTATION', + ], + 'sources': [ + 'ozone_platform.cc', + 'ozone_platform.h', + 'ozone_switches.cc', + 'ozone_switches.h', + 'platform/dri/ozone_platform_dri.cc', + 'platform/dri/ozone_platform_dri.h', + 'platform/test/ozone_platform_test.cc', + 'platform/test/ozone_platform_test.h', + '<@(external_ozone_platform_files)', + ], + 'conditions': [ + ['ozone_platform != "dri"', { + 'sources/': [ + ['exclude', '^platform/dri/'], + ] + }], + ['ozone_platform != "test"', { + 'sources/': [ + ['exclude', '^platform/test/'], + ] + }], + ] + }, + ], +} diff --git a/ui/ozone/ozone_export.h b/ui/ozone/ozone_export.h new file mode 100644 index 0000000..cc587a5 --- /dev/null +++ b/ui/ozone/ozone_export.h @@ -0,0 +1,29 @@ +// 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_EXPORT_H_ +#define UI_OZONE_OZONE_EXPORT_H_ + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(OZONE_IMPLEMENTATION) +#define OZONE_EXPORT __declspec(dllexport) +#else +#define OZONE_EXPORT __declspec(dllimport) +#endif // defined(OZONE_IMPLEMENTATION) + +#else // defined(WIN32) +#if defined(OZONE_IMPLEMENTATION) +#define OZONE_EXPORT __attribute__((visibility("default"))) +#else +#define OZONE_EXPORT +#endif +#endif + +#else // defined(COMPONENT_BUILD) +#define OZONE_EXPORT +#endif + +#endif // UI_OZONE_OZONE_EXPORT_H_ diff --git a/ui/ozone/ozone_platform.cc b/ui/ozone/ozone_platform.cc new file mode 100644 index 0000000..9715e13 --- /dev/null +++ b/ui/ozone/ozone_platform.cc @@ -0,0 +1,33 @@ +// 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. + +#include "base/command_line.h" +#include "base/logging.h" +#include "ui/ozone/ozone_platform.h" + +namespace ui { + +OzonePlatform::OzonePlatform() {} + +OzonePlatform::~OzonePlatform() { + gfx::SurfaceFactoryOzone::SetInstance(NULL); + ui::EventFactoryOzone::SetInstance(NULL); +} + +// static +void OzonePlatform::Initialize() { + if (instance_) + return; + + instance_ = CreateDefaultOzonePlatform(); + + // Inject ozone interfaces. + gfx::SurfaceFactoryOzone::SetInstance(instance_->GetSurfaceFactoryOzone()); + ui::EventFactoryOzone::SetInstance(instance_->GetEventFactoryOzone()); +} + +// static +OzonePlatform* OzonePlatform::instance_; + +} // namespace ui 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_ diff --git a/ui/ozone/ozone_switches.cc b/ui/ozone/ozone_switches.cc new file mode 100644 index 0000000..bd30dee --- /dev/null +++ b/ui/ozone/ozone_switches.cc @@ -0,0 +1,12 @@ +// 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. + +#include "ui/ozone/ozone_switches.h" + +namespace switches { + +// Specify location for image dumps. +const char kOzoneDumpFile[] = "ozone-dump-file"; + +} // namespace switches diff --git a/ui/ozone/ozone_switches.h b/ui/ozone/ozone_switches.h new file mode 100644 index 0000000..7aa18af --- /dev/null +++ b/ui/ozone/ozone_switches.h @@ -0,0 +1,17 @@ +// 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_SWITCHES_H_ +#define UI_OZONE_OZONE_SWITCHES_H_ + +#include "base/compiler_specific.h" +#include "ui/ozone/ozone_export.h" + +namespace switches { + +OZONE_EXPORT extern const char kOzoneDumpFile[]; + +} // namespace switches + +#endif // UI_OZONE_OZONE_SWITCHES_H_ diff --git a/ui/ozone/platform/dri/ozone_platform_dri.cc b/ui/ozone/platform/dri/ozone_platform_dri.cc new file mode 100644 index 0000000..3d248b6 --- /dev/null +++ b/ui/ozone/platform/dri/ozone_platform_dri.cc @@ -0,0 +1,25 @@ +// 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. + +#include "ui/ozone/platform/dri/ozone_platform_dri.h" + +#include "ui/ozone/ozone_platform.h" + +namespace ui { + +OzonePlatformDri::OzonePlatformDri() {} + +OzonePlatformDri::~OzonePlatformDri() {} + +gfx::SurfaceFactoryOzone* OzonePlatformDri::GetSurfaceFactoryOzone() { + return &surface_factory_ozone_; +} + +ui::EventFactoryOzone* OzonePlatformDri::GetEventFactoryOzone() { + return &event_factory_ozone_; +} + +OzonePlatform* CreateDefaultOzonePlatform() { return new OzonePlatformDri; } + +} // namespace ui diff --git a/ui/ozone/platform/dri/ozone_platform_dri.h b/ui/ozone/platform/dri/ozone_platform_dri.h new file mode 100644 index 0000000..9c040e9 --- /dev/null +++ b/ui/ozone/platform/dri/ozone_platform_dri.h @@ -0,0 +1,35 @@ +// 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_PLATFORM_DRI_OZONE_PLATFORM_DRI_H_ +#define UI_OZONE_PLATFORM_DRI_OZONE_PLATFORM_DRI_H_ + +#include "ui/events/ozone/evdev/event_factory.h" +#include "ui/gfx/ozone/impl/software_surface_factory_ozone.h" +#include "ui/ozone/ozone_platform.h" + +namespace ui { + +// OzonePlatform for Linux DRI (Direct Rendering Infrastructure) +// +// This platform is Linux without any display server (no X, wayland, or +// anything). This means chrome alone owns the display and input devices. +class OzonePlatformDri : public OzonePlatform { + public: + OzonePlatformDri(); + virtual ~OzonePlatformDri(); + + virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE; + virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE; + + private: + gfx::SoftwareSurfaceFactoryOzone surface_factory_ozone_; + ui::EventFactoryEvdev event_factory_ozone_; + + DISALLOW_COPY_AND_ASSIGN(OzonePlatformDri); +}; + +} // namespace ui + +#endif // UI_OZONE_PLATFORM_DRI_OZONE_PLATFORM_DRI_H_ diff --git a/ui/ozone/platform/test/ozone_platform_test.cc b/ui/ozone/platform/test/ozone_platform_test.cc new file mode 100644 index 0000000..6fc9beb --- /dev/null +++ b/ui/ozone/platform/test/ozone_platform_test.cc @@ -0,0 +1,35 @@ +// 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. + +#include "ui/ozone/platform/test/ozone_platform_test.h" + +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "ui/ozone/ozone_platform.h" +#include "ui/ozone/ozone_switches.h" + +namespace ui { + +OzonePlatformTest::OzonePlatformTest(const base::FilePath& dump_file) + : surface_factory_ozone_(dump_file) {} + +OzonePlatformTest::~OzonePlatformTest() {} + +gfx::SurfaceFactoryOzone* OzonePlatformTest::GetSurfaceFactoryOzone() { + return &surface_factory_ozone_; +} + +ui::EventFactoryOzone* OzonePlatformTest::GetEventFactoryOzone() { + return &event_factory_ozone_; +} + +OzonePlatform* CreateDefaultOzonePlatform() { + CommandLine* cmd = CommandLine::ForCurrentProcess(); + base::FilePath location = base::FilePath("/dev/null"); + if (cmd->HasSwitch(switches::kOzoneDumpFile)) + location = cmd->GetSwitchValuePath(switches::kOzoneDumpFile); + return new OzonePlatformTest(location); +} + +} // namespace ui diff --git a/ui/ozone/platform/test/ozone_platform_test.h b/ui/ozone/platform/test/ozone_platform_test.h new file mode 100644 index 0000000..9218312 --- /dev/null +++ b/ui/ozone/platform/test/ozone_platform_test.h @@ -0,0 +1,35 @@ +// 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_PLATFORM_TEST_OZONE_PLATFORM_TEST_H_ +#define UI_OZONE_PLATFORM_TEST_OZONE_PLATFORM_TEST_H_ + +#include "base/files/file_path.h" +#include "ui/events/ozone/evdev/event_factory.h" +#include "ui/gfx/ozone/impl/file_surface_factory_ozone.h" +#include "ui/ozone/ozone_platform.h" + +namespace ui { + +// OzonePlatform for testing +// +// This platform dumps images to a file for testing purposes. +class OzonePlatformTest : public OzonePlatform { + public: + OzonePlatformTest(const base::FilePath& dump_file); + virtual ~OzonePlatformTest(); + + virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE; + virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE; + + private: + gfx::FileSurfaceFactoryOzone surface_factory_ozone_; + ui::EventFactoryEvdev event_factory_ozone_; + + DISALLOW_COPY_AND_ASSIGN(OzonePlatformTest); +}; + +} // namespace ui + +#endif // UI_OZONE_PLATFORM_TEST_OZONE_PLATFORM_TEST_H_ |