Project: chromium Issues People Development process History Sign in
New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Issue 610937 Introduce DisplayCompositor mojo interface
Starred by 3 users Project Member Reported by fsam...@chromium.org, May 11 2016 Back to list
Status: Fixed
Owner:
Closed: Dec 1
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 3
Type: Bug
mus

Blocking:
issue 611505



Sign in to add a comment
We should define a mojo interface to the display compositor for Mus-WS and possibly also Chrome. 

It is the thing by which you request new CompositorFrameSinks. A mus::Window can own more than one CompositorFrameSink.

We may wish pass input events to the DisplayCompositor as well.

We need to be able to pass the AcceleratedWidget to the DisplayCompositor. Given a DisplayCompositor is associated with a single AcceleratedWidget. We may want a DisplayCompositor per physical display?

A DisplayCompositorClient may receive responses to hit tests?

Once this interface is well defined, this should be the only means by which consumers of DisplayCompositor communicate to DisplayCompositor. All other details should be private as they may or may not be in process.


 
In some ways, this is about reintroducing the "Surfaces service". See the following CLs for reference:

https://codereview.chromium.org/1245683004/
https://codereview.chromium.org/1281663002/

Comment 2 by danakj@chromium.org, May 11 2016
> We may want a DisplayCompositor per physical display? 

That is true on ChromeOS/Ash today. Per-window on desktop. Probably per-window in mus+ash?
Cc: sky@chromium.org
+sky@

In Mus+Ash it's per physical display. On other platforms, it can be per window. Those details are up to the DisplayCompositor embedder.

I started thinking about this in this patch:

https://codereview.chromium.org/1976663003/

interface DisplayCompositorFactory {
  CreateDisplayCompositor(AcceleratedWidget widget,
                          DisplayCompositor& display_compositor_request,
                          DisplayCompositorClient client);
};

interface DisplayCompositor {
  RequestCopyOfOutput(CopyOutputRequest request) => (CopyOutputReply reply);
  RequestCompositorFrameSink(CompositorFrameSinkId,
                             CompositorFrameSink& cfs,
                             CompositorFrameSinkClient client);
};

struct CompositorFrameSinkId {
  int32 namespace;
  int32 id;
};

// This is roughly equivalent to a SurfaceFactory + Surface
interface CompositorFrameSink {
  SubmitCompositorFrame(CompositorFrame frame) => ();
  GetId() => (int32 namespace, int32 id);
};

interface CompositorFrameSinkClient {
  ReturnResources(ReturnedResourceArray resources);

  WillDrawSurface(mojom::Rect damage_rect);

  SetBeginFrameSource(BeginFrameSource begin_frame_source);
};
Project Member Comment 4 by bugdroid1@chromium.org, May 14 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4ae9b136bbf91f081db79870a0ceee7d88b78464

commit 4ae9b136bbf91f081db79870a0ceee7d88b78464
Author: fsamuel <fsamuel@chromium.org>
Date: Sat May 14 03:00:07 2016

Pull parts of TopLevelDisplayClient into DisplayCompositor

This CL starts to expose the beginnings of the API DisplayCompositor
should have:

SubmitCompositorFrame
RequestCopyOfOutput

TODO:

Hittest

TopLevelDisplayClient becomes a very thin implementation of
cc::DisplayClient and starts to resemble OnscreenDisplayClient.

BUG= 610937 ,  610935 

Review-Url: https://codereview.chromium.org/1976663003
Cr-Commit-Position: refs/heads/master@{#393731}

[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/surfaces/BUILD.gn
[add] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/surfaces/display_compositor.cc
[add] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/surfaces/display_compositor.h
[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/surfaces/top_level_display_client.cc
[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/surfaces/top_level_display_client.h
[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/ws/platform_display.cc
[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/ws/platform_display.h
[modify] https://crrev.com/4ae9b136bbf91f081db79870a0ceee7d88b78464/components/mus/ws/server_window_surface_manager.cc

The suggested interface above doesn't quite make sense because surface IDs consist of two components a namespace corresponding to a process, and locally-generated surface ID on resize/device scale factor change etc. To deal with this, I think it might make sense to introduce a "CompositorFrameSinkFactory" interface corresponding to a namespace. 

We also need to add a permission API indicating whether one namespace can embed another.

interface DisplayCompositor {
  RequestCopyOfOutput(CopyOutputRequest request) => (CopyOutputReply reply);
  RequestCompositorFrameSinkFactory(int namespace,
                                    CompositorFrameSinkFactory& cfs,
                                    CompositorFrameSinkFactoryClient client);
  AddPermittedComposition(int parent_namespace, int child_namespace);
  RemovePermittedCompositon(int parent_namespace, int child_namespace);
};

// This is roughly equivalent to a SurfaceFactory for a single namespace.
interface CompositorFrameSinkFactory {
  RequestCompositorFrameSink(int namespace,
                             CompositorFrameSink& cfs,
                             CompositorFrameSinkClient client);
};

interface CompositorFrameSinkFactoryClient {
  ReturnResources(ReturnedResourceArray resources);

  WillDrawSurface(mojom::Rect damage_rect);

  SetBeginFrameSource(BeginFrameSource begin_frame_source);
};

interface CompositorFrameSinkClient {
  // It's not clear to me what this interface does if anything. It seems like 
  // it should replace OutputSurfaceClient?
};
Responding to myself, maybe this:

interface CompositorFrameSinkFactoryClient {
  SetBeginFrameSource(BeginFrameSource begin_frame_source);
};

interface CompositorFrameSinkClient {
  ReturnResources(ReturnedResourceArray resources);

  WillDrawSurface(mojom::Rect damage_rect);
};

Also note, in order to avoid renderers guessing namespaces and doing all kinds of badness, namespaces should be virtualized (each namespace should have a process-local mapping).
This should say:

// This is roughly equivalent to a SurfaceFactory for a single namespace.
interface CompositorFrameSinkFactory {
  RequestCompositorFrameSink(int id /* not namespace */,
                             CompositorFrameSink& cfs,
                             CompositorFrameSinkClient client);
};

Blocking: 611505
Labels: -mustash1 -mustash tadpole
WIP CL: https://codereview.chromium.org/1989693002/

As a first cut I won't deal with hit testing. I'm deleting surface hit testing code in mus, producing a new Display Compositor mojo interface, then once the mus-ws/mus-gpu split is done, we can revisit surface hittesting for OOPIFs.
Project Member Comment 10 by bugdroid1@chromium.org, May 18 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/20e7eba1ee42433ef5e068e58625230ec3d5f1ed

commit 20e7eba1ee42433ef5e068e58625230ec3d5f1ed
Author: fsamuel <fsamuel@chromium.org>
Date: Wed May 18 15:59:43 2016

Delete mus surfaces hit testing

There's a ton of cc plumbing through the window server to
support surfaces hittesting. This code exists to support
out of process iframes but has been disabled for while.
With the mus-ws / mus-gpu split, this code will change
radically anyway. To avoid refactoring dead code, I'm
deleting it first, and we may reintroduce it in mus-gpu in
the future in some new and improved form.

BUG=612636, 610937 

Review-Url: https://codereview.chromium.org/1987133002
Cr-Commit-Position: refs/heads/master@{#394432}

[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/surfaces/surfaces_state.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/surfaces/surfaces_state.h
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/display.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/display.h
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/event_dispatcher.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/event_dispatcher.h
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/platform_display.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/platform_display_delegate.h
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/window_finder.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/window_finder.h
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/window_finder_unittest.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/window_manager_state.cc
[modify] https://crrev.com/20e7eba1ee42433ef5e068e58625230ec3d5f1ed/components/mus/ws/window_manager_state.h

Project Member Comment 11 by bugdroid1@chromium.org, May 27 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7c7022d40aae6dcb714b2453b349068f4ccced5d

commit 7c7022d40aae6dcb714b2453b349068f4ccced5d
Author: fsamuel <fsamuel@chromium.org>
Date: Fri May 27 02:44:15 2016

Introduce DisplayCompositor Mojo API for Mus

This CL introduces the following Mojo interfaces:

1. DisplayCompositor: represents a connection to the DisplayCompositor
    service in Mus-Gpu.
2. Display: represents a compositor for a single physical display.
3. CompositorFrameSinkFactory per display client process.
4. CompositorFrameSink: per client.
5. CompositorFrameSinkClient: events from the display compositor
pertaining to a specific client.

This CL only provides skeleton implementations for
CompositorFrameSink and CompositorFrameSinkFactory. Other
interfaces and integration in Mus will follow.

BUG= 610937 
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_optional_gpu_tests_rel;tryserver.chromium.mac:mac_optional_gpu_tests_rel;tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/1989693002
Cr-Commit-Position: refs/heads/master@{#396364}

[modify] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/public/interfaces/BUILD.gn
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/public/interfaces/gpu/BUILD.gn
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/public/interfaces/gpu/display_compositor.mojom
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/public/interfaces/gpu/display_compositor_host.mojom
[modify] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/BUILD.gn
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/compositor_frame_sink_delegate.h
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/compositor_frame_sink_factory_impl.cc
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/compositor_frame_sink_factory_impl.h
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/compositor_frame_sink_impl.cc
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/compositor_frame_sink_impl.h
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/display_compositor_impl.cc
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/display_compositor_impl.h
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/display_impl.cc
[add] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/components/mus/surfaces/display_impl.h
[modify] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/gpu/ipc/common/mailbox_holder.typemap
[modify] https://crrev.com/7c7022d40aae6dcb714b2453b349068f4ccced5d/gpu/ipc/common/sync_token.typemap

Project Member Comment 12 by bugdroid1@chromium.org, May 27 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/87f508cf06f5c17fccc555cf18b2537b6835ff3b

commit 87f508cf06f5c17fccc555cf18b2537b6835ff3b
Author: fsamuel <fsamuel@chromium.org>
Date: Fri May 27 18:00:20 2016

Move display_compositor impls to components/mus/gpu

Moving code that will live in mus-gpu to components/mus/gpu.

BUG= 610937 

Review-Url: https://codereview.chromium.org/2021473002
Cr-Commit-Position: refs/heads/master@{#396507}

[modify] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/BUILD.gn
[add] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/BUILD.gn
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/compositor_frame_sink_delegate.h
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/compositor_frame_sink_factory_impl.cc
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/compositor_frame_sink_factory_impl.h
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/compositor_frame_sink_impl.cc
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/compositor_frame_sink_impl.h
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/display_compositor_impl.cc
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/display_compositor_impl.h
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/display_impl.cc
[rename] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/gpu/display_compositor/display_impl.h
[modify] https://crrev.com/87f508cf06f5c17fccc555cf18b2537b6835ff3b/components/mus/surfaces/BUILD.gn

Components: Internals>MUS
Labels: Proj-Mustash
Owner: fsam...@chromium.org
Status: Started
Project Member Comment 15 by bugdroid1@chromium.org, Nov 22 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4af1869e97cdf585994c422c22423f6d6fcf68ce

commit 4af1869e97cdf585994c422c22423f6d6fcf68ce
Author: fsamuel <fsamuel@chromium.org>
Date: Tue Nov 22 21:41:34 2016

Introduce Display Compositor mojo interface. Use InProcessContextProvider.

This CL makes a number of changes. I think it's easier to put it all together in a single
CL and easier to review. Here are the notable changes:

1. A new DisplayCompositor mojo interface has been introduced to create
CompositorFrameSinks and to update surface references.

2. Mus-WS code no longer knows about GpuCompositorFrameSink, instead
requesting a CompositorFrameSink from Mus-GPU (still in the same process for now).

3. Mus-WS no longer creates an internal GPU channel as display compositor code is
no longer accessed directly by Mus-WS.

4. Root windows with valid AcceleratedWidgets now create
InProcessContextProviders instead of SurfacesContextProviders (which use a
GpuChannelHost).

5. DirectOutputSurface, and DirectOutputSurfaceOzone no longer use SurfacesContextProvider.

6. SurfacesContextProvider has been deleted.

7. MusGpuCompositorFrameSink moves out of window server code as it's only used
internally by the display compositor.

BUG= 610937 ,  661278 

Review-Url: https://codereview.chromium.org/2481263002
Cr-Commit-Position: refs/heads/master@{#433990}

[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/cc/ipc/BUILD.gn
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/cc/ipc/display_compositor.mojom
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/cc/output/in_process_context_provider.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/gpu/ipc/gpu_in_process_thread_service.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/gpu/BUILD.gn
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/gpu/DEPS
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/gpu/gpu_service_internal.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/gpu/gpu_service_internal.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/gpu/interfaces/gpu_service_internal.mojom
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/manifest.json
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/BUILD.gn
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/direct_output_surface.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/direct_output_surface.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/direct_output_surface_ozone.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/direct_output_surface_ozone.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/display_compositor.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/display_compositor.h
[rename] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/gpu_compositor_frame_sink.cc
[rename] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/gpu_compositor_frame_sink.h
[rename] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/mus_gpu_memory_buffer_manager.cc
[rename] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/surfaces/mus_gpu_memory_buffer_manager.h
[delete] https://crrev.com/2aec8f5226381483e99636f6e8425914ba840538/services/ui/surfaces/surfaces_context_provider.cc
[delete] https://crrev.com/2aec8f5226381483e99636f6e8425914ba840538/services/ui/surfaces/surfaces_context_provider.h
[delete] https://crrev.com/2aec8f5226381483e99636f6e8425914ba840538/services/ui/surfaces/surfaces_context_provider_delegate.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/BUILD.gn
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/frame_generator.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/frame_generator.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/gpu_service_proxy.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/gpu_service_proxy.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/gpu_service_proxy_delegate.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/platform_display.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/platform_display_default.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/platform_display_default.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/server_window.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/server_window.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/server_window_compositor_frame_sink_manager.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/server_window_compositor_frame_sink_manager.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/server_window_delegate.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/test_server_window_delegate.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/test_server_window_delegate.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/test_utils.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/test_utils.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/window_server.cc
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/window_server.h
[modify] https://crrev.com/4af1869e97cdf585994c422c22423f6d6fcf68ce/services/ui/ws/window_tree.cc

I want to land a DisplayCompositorFactory interface before I mark this as fixed. I'd also like to move this code to a place where it's usable by Chrome.
Project Member Comment 17 by bugdroid1@chromium.org, Dec 1
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2a2351a9d9ae6af2c9222217aa21272a17d24cc9

commit 2a2351a9d9ae6af2c9222217aa21272a17d24cc9
Author: fsamuel <fsamuel@chromium.org>
Date: Thu Dec 01 01:08:04 2016

Mus: Implement GpuMain mojo interface

The GpuMain mojo interface is the single primordial mojo interface used
by the window server to start and restart the gpu process in order to
ensure that requesting other sub-interfaces doesn't restart a crashed
GPU process and put it in a bad state.

GpuMain provides factory methods to create two sub-services: the gpu
service and the display compositor service. The gpu service does not
directly know about the display compositor service, and the display
compositor service does not know about the gpu service. GpuMain's
implementation is the glue that puts both together.

BUG= 610937 
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2539893002
Cr-Commit-Position: refs/heads/master@{#435509}

[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/gpu/command_buffer/client/gpu_memory_buffer_manager.h
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/gpu_main.cc
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/gpu_main.h
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/gpu_service_internal.cc
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/gpu_service_internal.h
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/interfaces/BUILD.gn
[add] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/interfaces/gpu_main.mojom
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/gpu/interfaces/gpu_service_internal.mojom
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/surfaces/display_compositor.cc
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/surfaces/display_compositor.h
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/ws/gpu_service_proxy.cc
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/ws/gpu_service_proxy.h
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/ws/window_server.cc
[modify] https://crrev.com/2a2351a9d9ae6af2c9222217aa21272a17d24cc9/services/ui/ws/window_server.h

Blocking: 601863
Status: Fixed
Blocking: -601863
Sign in to add a comment