Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: services/surfaces/surfaces_impl.cc

Issue 940293003: Add a Display and ContextProvider concept to mojom, use to recreate (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « services/surfaces/surfaces_impl.h ('k') | services/surfaces/surfaces_scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/surfaces/surfaces_impl.h" 5 #include "services/surfaces/surfaces_impl.h"
6 6
7 #include "base/trace_event/trace_event.h" 7 #include "base/trace_event/trace_event.h"
8 #include "cc/output/compositor_frame.h" 8 #include "cc/output/compositor_frame.h"
9 #include "cc/resources/returned_resource.h" 9 #include "cc/resources/returned_resource.h"
10 #include "cc/surfaces/display.h"
11 #include "cc/surfaces/surface_id_allocator.h" 10 #include "cc/surfaces/surface_id_allocator.h"
12 #include "mojo/cc/context_provider_mojo.h"
13 #include "mojo/cc/direct_output_surface.h"
14 #include "mojo/converters/geometry/geometry_type_converters.h" 11 #include "mojo/converters/geometry/geometry_type_converters.h"
15 #include "mojo/converters/surfaces/surfaces_type_converters.h" 12 #include "mojo/converters/surfaces/surfaces_type_converters.h"
13 #include "services/surfaces/surfaces_scheduler.h"
16 14
17 using mojo::SurfaceIdPtr; 15 using mojo::SurfaceIdPtr;
18 16
19 namespace surfaces { 17 namespace surfaces {
20 18
21 namespace { 19 namespace {
22 void CallCallback(const mojo::Closure& callback, cc::SurfaceDrawStatus status) { 20 void CallCallback(const mojo::Closure& callback, cc::SurfaceDrawStatus status) {
23 callback.Run(); 21 callback.Run();
24 } 22 }
25 } 23 }
26 24
27 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager, 25 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager,
28 uint32_t id_namespace, 26 uint32_t id_namespace,
29 Client* client, 27 SurfacesScheduler* scheduler,
30 mojo::InterfaceRequest<mojo::Surface> request) 28 mojo::InterfaceRequest<mojo::Surface> request)
31 : SurfacesImpl(manager, id_namespace, client) { 29 : manager_(manager),
32 binding_.Bind(request.Pass()); 30 factory_(manager, this),
33 } 31 id_namespace_(id_namespace),
34 32 scheduler_(scheduler),
35 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager, 33 binding_(this, request.Pass()) {
36 uint32_t id_namespace,
37 Client* client,
38 mojo::SurfacePtr* surface)
39 : SurfacesImpl(manager, id_namespace, client) {
40 binding_.Bind(surface);
41 } 34 }
42 35
43 SurfacesImpl::~SurfacesImpl() { 36 SurfacesImpl::~SurfacesImpl() {
44 client_->OnDisplayBeingDestroyed(display_.get());
45 factory_.DestroyAll(); 37 factory_.DestroyAll();
46 } 38 }
47 39
48 void SurfacesImpl::GetIdNamespace( 40 void SurfacesImpl::GetIdNamespace(
49 const Surface::GetIdNamespaceCallback& callback) { 41 const Surface::GetIdNamespaceCallback& callback) {
50 callback.Run(id_namespace_); 42 callback.Run(id_namespace_);
51 } 43 }
52 44
53 void SurfacesImpl::SetResourceReturner(mojo::ResourceReturnerPtr returner) { 45 void SurfacesImpl::SetResourceReturner(mojo::ResourceReturnerPtr returner) {
54 returner_ = returner.Pass(); 46 returner_ = returner.Pass();
55 } 47 }
56 48
57 void SurfacesImpl::CreateSurface(uint32_t local_id) { 49 void SurfacesImpl::CreateSurface(uint32_t local_id) {
58 factory_.Create(QualifyIdentifier(local_id)); 50 factory_.Create(QualifyIdentifier(local_id));
59 } 51 }
60 52
61 void SurfacesImpl::SubmitFrame(uint32_t local_id, 53 void SurfacesImpl::SubmitFrame(uint32_t local_id,
62 mojo::FramePtr frame, 54 mojo::FramePtr frame,
63 const mojo::Closure& callback) { 55 const mojo::Closure& callback) {
64 TRACE_EVENT0("mojo", "SurfacesImpl::SubmitFrame"); 56 TRACE_EVENT0("mojo", "SurfacesImpl::SubmitFrame");
65 factory_.SubmitFrame(QualifyIdentifier(local_id), 57 factory_.SubmitFrame(QualifyIdentifier(local_id),
66 frame.To<scoped_ptr<cc::CompositorFrame>>(), 58 frame.To<scoped_ptr<cc::CompositorFrame>>(),
67 base::Bind(&CallCallback, callback)); 59 base::Bind(&CallCallback, callback));
68 client_->FrameSubmitted(); 60 scheduler_->SetNeedsDraw();
69 } 61 }
70 62
71 void SurfacesImpl::DestroySurface(uint32_t local_id) { 63 void SurfacesImpl::DestroySurface(uint32_t local_id) {
72 factory_.Destroy(QualifyIdentifier(local_id)); 64 factory_.Destroy(QualifyIdentifier(local_id));
73 if (local_id == displayed_surface_) {
74 displayed_surface_ = 0;
75 client_->OnDisplayBeingDestroyed(display_.get());
76 display_.reset();
77 }
78 }
79
80 void SurfacesImpl::CreateGLES2BoundSurface(
81 mojo::CommandBufferPtr gles2_client,
82 uint32_t local_id,
83 mojo::SizePtr size,
84 mojo::InterfaceRequest<mojo::ViewportParameterListener> listener_request) {
85 command_buffer_handle_ = gles2_client.PassMessagePipe();
86
87 if (!display_) {
88 cc::RendererSettings settings;
89 display_.reset(new cc::Display(this, manager_, nullptr, nullptr, settings));
90 client_->SetDisplay(display_.get());
91 display_->Initialize(make_scoped_ptr(new mojo::DirectOutputSurface(
92 new mojo::ContextProviderMojo(command_buffer_handle_.Pass()))));
93 }
94 displayed_surface_ = local_id;
95 cc::SurfaceId cc_id = QualifyIdentifier(local_id);
96 factory_.Create(cc_id);
97 display_->SetSurfaceId(cc_id, 1.f);
98 display_->Resize(size.To<gfx::Size>());
99 parameter_listeners_.AddBinding(this, listener_request.Pass());
100 } 65 }
101 66
102 void SurfacesImpl::ReturnResources(const cc::ReturnedResourceArray& resources) { 67 void SurfacesImpl::ReturnResources(const cc::ReturnedResourceArray& resources) {
103 if (resources.empty() || !returner_) 68 if (resources.empty() || !returner_)
104 return; 69 return;
105 mojo::Array<mojo::ReturnedResourcePtr> ret(resources.size()); 70 mojo::Array<mojo::ReturnedResourcePtr> ret(resources.size());
106 for (size_t i = 0; i < resources.size(); ++i) { 71 for (size_t i = 0; i < resources.size(); ++i) {
107 ret[i] = mojo::ReturnedResource::From(resources[i]); 72 ret[i] = mojo::ReturnedResource::From(resources[i]);
108 } 73 }
109 returner_->ReturnResources(ret.Pass()); 74 returner_->ReturnResources(ret.Pass());
110 } 75 }
111 76
112 void SurfacesImpl::DisplayDamaged() {
113 }
114
115 void SurfacesImpl::DidSwapBuffers() {
116 }
117
118 void SurfacesImpl::DidSwapBuffersComplete() {
119 }
120
121 void SurfacesImpl::CommitVSyncParameters(base::TimeTicks timebase,
122 base::TimeDelta interval) {
123 }
124
125 void SurfacesImpl::OutputSurfaceLost() {
126 }
127
128 void SurfacesImpl::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) {
129 }
130
131 void SurfacesImpl::OnVSyncParametersUpdated(int64_t timebase,
132 int64_t interval) {
133 client_->OnVSyncParametersUpdated(
134 base::TimeTicks::FromInternalValue(timebase),
135 base::TimeDelta::FromInternalValue(interval));
136 }
137
138 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager,
139 uint32_t id_namespace,
140 Client* client)
141 : manager_(manager),
142 factory_(manager, this),
143 id_namespace_(id_namespace),
144 client_(client),
145 displayed_surface_(0),
146 binding_(this) {
147 }
148
149 cc::SurfaceId SurfacesImpl::QualifyIdentifier(uint32_t local_id) { 77 cc::SurfaceId SurfacesImpl::QualifyIdentifier(uint32_t local_id) {
150 return cc::SurfaceId(static_cast<uint64_t>(id_namespace_) << 32 | local_id); 78 return cc::SurfaceId(static_cast<uint64_t>(id_namespace_) << 32 | local_id);
151 } 79 }
152 80
153 } // namespace mojo 81 } // namespace mojo
OLDNEW
« no previous file with comments | « services/surfaces/surfaces_impl.h ('k') | services/surfaces/surfaces_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698