| Index: services/fake_surfaces/fake_surfaces_service_application.cc
|
| diff --git a/services/fake_surfaces/fake_surfaces_service_application.cc b/services/fake_surfaces/fake_surfaces_service_application.cc
|
| index 7e0a316eaac9c727309780eb69dbdcc7a5ff6a39..f78bca4d8245cf0a0d054f24befbae278c6be036 100644
|
| --- a/services/fake_surfaces/fake_surfaces_service_application.cc
|
| +++ b/services/fake_surfaces/fake_surfaces_service_application.cc
|
| @@ -10,24 +10,85 @@
|
| #include "mojo/public/cpp/bindings/strong_binding.h"
|
| #include "mojo/services/surfaces/public/interfaces/surfaces.mojom.h"
|
|
|
| +using mojo::ApplicationConnection;
|
| +using mojo::Display;
|
| +using mojo::DisplayFactory;
|
| using mojo::InterfaceRequest;
|
| +using mojo::ResourceReturnerPtr;
|
| +using mojo::StrongBinding;
|
| +using mojo::Surface;
|
|
|
| namespace fake_surfaces {
|
|
|
| -class FakeSurfaceImpl : public mojo::Surface {
|
| +namespace {
|
| +void ReturnAll(const mojo::Array<mojo::TransferableResourcePtr>& resources,
|
| + mojo::ResourceReturner* returner) {
|
| + mojo::Array<mojo::ReturnedResourcePtr> returned;
|
| + returned.resize(resources.size());
|
| + for (size_t i = 0; i < resources.size(); ++i) {
|
| + auto ret = mojo::ReturnedResource::New();
|
| + ret->id = resources[i]->id;
|
| + ret->sync_point = 0u;
|
| + ret->count = 1;
|
| + ret->lost = false;
|
| + returned[i] = ret.Pass();
|
| + }
|
| + returner->ReturnResources(returned.Pass());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class FakeDisplayImpl : public Display {
|
| + public:
|
| + FakeDisplayImpl(ResourceReturnerPtr returner,
|
| + InterfaceRequest<Display> request)
|
| + : returner_(returner.Pass()), binding_(this, request.Pass()) {}
|
| + ~FakeDisplayImpl() override {}
|
| +
|
| + private:
|
| + // Display implementation
|
| + void SubmitFrame(mojo::FramePtr frame,
|
| + const SubmitFrameCallback& callback) override {
|
| + callback.Run();
|
| + if (frame->resources.size() == 0u || !returner_)
|
| + return;
|
| + ReturnAll(frame->resources, returner_.get());
|
| + }
|
| +
|
| + ResourceReturnerPtr returner_;
|
| + StrongBinding<Display> binding_;
|
| +};
|
| +
|
| +class FakeDisplayFactoryImpl : public DisplayFactory {
|
| + public:
|
| + explicit FakeDisplayFactoryImpl(InterfaceRequest<DisplayFactory> request)
|
| + : binding_(this, request.Pass()) {}
|
| + ~FakeDisplayFactoryImpl() override {}
|
| +
|
| + private:
|
| + // DisplayFactory implementation.
|
| + void Create(mojo::ContextProviderPtr context_provider,
|
| + ResourceReturnerPtr returner,
|
| + InterfaceRequest<Display> request) override {
|
| + new FakeDisplayImpl(returner.Pass(), request.Pass());
|
| + }
|
| +
|
| + StrongBinding<DisplayFactory> binding_;
|
| +};
|
| +
|
| +class FakeSurfaceImpl : public Surface {
|
| public:
|
| - FakeSurfaceImpl(uint32_t id_namespace,
|
| - mojo::InterfaceRequest<mojo::Surface> request)
|
| + FakeSurfaceImpl(uint32_t id_namespace, InterfaceRequest<Surface> request)
|
| : id_namespace_(id_namespace), binding_(this, request.Pass()) {}
|
| ~FakeSurfaceImpl() override {}
|
|
|
| - // mojo::Surface implementation.
|
| + // Surface implementation.
|
| void GetIdNamespace(
|
| const Surface::GetIdNamespaceCallback& callback) override {
|
| callback.Run(id_namespace_);
|
| }
|
|
|
| - void SetResourceReturner(mojo::ResourceReturnerPtr returner) override {
|
| + void SetResourceReturner(ResourceReturnerPtr returner) override {
|
| returner_ = returner.Pass();
|
| }
|
|
|
| @@ -35,36 +96,19 @@ class FakeSurfaceImpl : public mojo::Surface {
|
|
|
| void SubmitFrame(uint32_t local_id,
|
| mojo::FramePtr frame,
|
| - const mojo::Closure& callback) override {
|
| + const SubmitFrameCallback& callback) override {
|
| callback.Run();
|
| if (frame->resources.size() == 0u || !returner_)
|
| return;
|
| - mojo::Array<mojo::ReturnedResourcePtr> returned;
|
| - returned.resize(frame->resources.size());
|
| - for (size_t i = 0; i < frame->resources.size(); ++i) {
|
| - auto ret = mojo::ReturnedResource::New();
|
| - ret->id = frame->resources[i]->id;
|
| - ret->sync_point = 0u;
|
| - ret->count = 1;
|
| - ret->lost = false;
|
| - returned[i] = ret.Pass();
|
| - }
|
| - returner_->ReturnResources(returned.Pass());
|
| + ReturnAll(frame->resources, returner_.get());
|
| }
|
|
|
| void DestroySurface(uint32_t local_id) override {}
|
|
|
| - void CreateGLES2BoundSurface(
|
| - mojo::CommandBufferPtr gles2_client,
|
| - uint32_t local_id,
|
| - mojo::SizePtr size,
|
| - mojo::InterfaceRequest<mojo::ViewportParameterListener> listener_request)
|
| - override {}
|
| -
|
| private:
|
| const uint32_t id_namespace_;
|
| - mojo::ResourceReturnerPtr returner_;
|
| - mojo::StrongBinding<mojo::Surface> binding_;
|
| + ResourceReturnerPtr returner_;
|
| + StrongBinding<Surface> binding_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(FakeSurfaceImpl);
|
| };
|
| @@ -81,14 +125,20 @@ void FakeSurfacesServiceApplication::Initialize(mojo::ApplicationImpl* app) {
|
| }
|
|
|
| bool FakeSurfacesServiceApplication::ConfigureIncomingConnection(
|
| - mojo::ApplicationConnection* connection) {
|
| - connection->AddService(this);
|
| + ApplicationConnection* connection) {
|
| + connection->AddService<DisplayFactory>(this);
|
| + connection->AddService<Surface>(this);
|
| return true;
|
| }
|
|
|
| void FakeSurfacesServiceApplication::Create(
|
| - mojo::ApplicationConnection* connection,
|
| - InterfaceRequest<mojo::Surface> request) {
|
| + ApplicationConnection* connection,
|
| + InterfaceRequest<DisplayFactory> request) {
|
| + new FakeDisplayFactoryImpl(request.Pass());
|
| +}
|
| +
|
| +void FakeSurfacesServiceApplication::Create(ApplicationConnection* connection,
|
| + InterfaceRequest<Surface> request) {
|
| new FakeSurfaceImpl(next_id_namespace_++, request.Pass());
|
| }
|
|
|
|
|