| Index: examples/surfaces_app/surfaces_app.cc
|
| diff --git a/examples/surfaces_app/surfaces_app.cc b/examples/surfaces_app/surfaces_app.cc
|
| index e232896a6fe5097067df3d8d3f20029fe16ec6eb..0755d2885fd5a775c84169cdb6c48e9253243d01 100644
|
| --- a/examples/surfaces_app/surfaces_app.cc
|
| +++ b/examples/surfaces_app/surfaces_app.cc
|
| @@ -20,36 +20,42 @@
|
| #include "mojo/services/gpu/public/interfaces/command_buffer.mojom.h"
|
| #include "mojo/services/gpu/public/interfaces/gpu.mojom.h"
|
| #include "mojo/services/native_viewport/public/interfaces/native_viewport.mojom.h"
|
| +#include "mojo/services/surfaces/public/interfaces/display.mojom.h"
|
| #include "mojo/services/surfaces/public/interfaces/surfaces.mojom.h"
|
| #include "ui/gfx/rect.h"
|
|
|
| namespace mojo {
|
| namespace examples {
|
|
|
| -static const uint32_t kLocalId = 1u;
|
| -
|
| class SurfacesApp : public ApplicationDelegate {
|
| public:
|
| SurfacesApp() : app_impl_(nullptr), id_namespace_(0u), weak_factory_(this) {}
|
| ~SurfacesApp() override {}
|
|
|
| - void Initialize(ApplicationImpl* app) override { app_impl_ = app; }
|
| -
|
| // ApplicationDelegate implementation
|
| - bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
|
| + void Initialize(ApplicationImpl* app) override {
|
| + app_impl_ = app;
|
| + size_ = gfx::Size(800, 600);
|
| +
|
| + // Connect to the native viewport service and create a viewport.
|
| app_impl_->ConnectToService("mojo:native_viewport_service", &viewport_);
|
| + viewport_->Create(Size::From(size_), [](ViewportMetricsPtr metrics) {});
|
| + viewport_->Show();
|
|
|
| - app_impl_->ConnectToService("mojo:surfaces_service", &surface_);
|
| - surface_->GetIdNamespace(
|
| - base::Bind(&SurfacesApp::SetIdNamespace, base::Unretained(this)));
|
| - embedder_.reset(new Embedder(kLocalId, surface_.get()));
|
| + // Grab a ContextProvider associated with the viewport.
|
| + ContextProviderPtr onscreen_context_provider;
|
| + viewport_->GetContextProvider(GetProxy(&onscreen_context_provider));
|
|
|
| - size_ = gfx::Size(800, 600);
|
| + // Create a surfaces Display bound to the viewport's context provider.
|
| + DisplayFactoryPtr display_factory;
|
| + app_impl_->ConnectToService("mojo:surfaces_service", &display_factory);
|
| + display_factory->Create(onscreen_context_provider.Pass(),
|
| + nullptr, // resource_returner
|
| + GetProxy(&display_));
|
|
|
| - viewport_->Create(Size::From(size_),
|
| - base::Bind(&SurfacesApp::OnCreatedNativeViewport,
|
| - weak_factory_.GetWeakPtr()));
|
| - viewport_->Show();
|
| + // Construct a mojo::examples::Embedder object that will draw to our
|
| + // display.
|
| + embedder_.reset(new Embedder(display_.get()));
|
|
|
| child_size_ = gfx::Size(size_.width() / 3, size_.height() / 2);
|
| app_impl_->ConnectToService("mojo:surfaces_child_app", &child_one_);
|
| @@ -62,9 +68,11 @@ class SurfacesApp : public ApplicationDelegate {
|
| Size::From(child_size_),
|
| base::Bind(&SurfacesApp::ChildTwoProducedFrame,
|
| base::Unretained(this)));
|
| - surface_->CreateSurface(kLocalId);
|
| Draw(10);
|
| - return true;
|
| + }
|
| +
|
| + bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
|
| + return false;
|
| }
|
|
|
| void ChildOneProducedFrame(SurfaceIdPtr id) {
|
| @@ -79,8 +87,10 @@ class SurfacesApp : public ApplicationDelegate {
|
| int bounced_offset = offset;
|
| if (offset > 200)
|
| bounced_offset = 400 - offset;
|
| - embedder_->ProduceFrame(child_one_id_, child_two_id_, child_size_, size_,
|
| - bounced_offset);
|
| + if (!embedder_->frame_pending()) {
|
| + embedder_->ProduceFrame(child_one_id_, child_two_id_, child_size_, size_,
|
| + bounced_offset);
|
| + }
|
| base::MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| base::Bind(
|
| @@ -89,19 +99,10 @@ class SurfacesApp : public ApplicationDelegate {
|
| }
|
|
|
| private:
|
| - void SetIdNamespace(uint32_t id_namespace) {
|
| - auto qualified_id = mojo::SurfaceId::New();
|
| - qualified_id->id_namespace = id_namespace;
|
| - qualified_id->local = kLocalId;
|
| - viewport_->SubmittedFrame(qualified_id.Pass());
|
| - }
|
| - void OnCreatedNativeViewport(uint64_t native_viewport_id,
|
| - mojo::ViewportMetricsPtr metrics) {}
|
|
|
| ApplicationImpl* app_impl_;
|
| - SurfacePtr surface_;
|
| + DisplayPtr display_;
|
| uint32_t id_namespace_;
|
| - SurfaceIdPtr onscreen_id_;
|
| scoped_ptr<Embedder> embedder_;
|
| ChildPtr child_one_;
|
| cc::SurfaceId child_one_id_;
|
|
|