// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VIZ_DEMO_CLIENT_DEMO_CLIENT_H_ #define COMPONENTS_VIZ_DEMO_CLIENT_DEMO_CLIENT_H_ #include <map> #include <vector> #include "base/synchronization/lock.h" #include "base/threading/thread.h" #include "components/viz/common/frame_timing_details_map.h" #include "components/viz/common/quads/compositor_frame_metadata.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom.h" namespace viz { class CompositorFrame; } namespace demo { // DemoClient is responsible for communicating with the display-compositor. It // sends messages to the service over the mojom.CompositorFrameSink interface, // and receives messages through the mojom.CompositorFrameSinkClient interface. // // The client needs to have an identifier, FrameSinkId, which doesn't change // during the lifetime of the client. The embedder of the client needs to know // about this FrameSinkId. The 'host', when it itself is not the embedder, also // needs to know about this FrameSinkId, so that it can set up the // frame-hierarchy correctly in the service. // // The client also needs to have a LocalSurfaceId, which represents an embedding // of the client in a particular state. If, for example, the size of the client // changes (or other attributes, like device scale factor), then a new // LocalSurfaceId needs to be allocated. The LocalSurfaceId is used to submit // the CompositorFrame. Both the embedder and the embedded clients need to know // the LocalSurfaceId. It is possible for both the embedder and the embedded // client to generate new LocalSurfaceId (typically using a // ParentLocalSurfaceIdAllocator and ChildLocalSurfaceIdAllocator respectively). // In this demo, only the embedder allocates the LocalSurfaceId. class DemoClient : public viz::mojom::CompositorFrameSinkClient { … }; } // namespace demo #endif // COMPONENTS_VIZ_DEMO_CLIENT_DEMO_CLIENT_H_