OLD | NEW |
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" | 10 #include "cc/surfaces/display.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 const mojo::Closure& callback) { | 63 const mojo::Closure& callback) { |
64 TRACE_EVENT0("mojo", "SurfacesImpl::SubmitFrame"); | 64 TRACE_EVENT0("mojo", "SurfacesImpl::SubmitFrame"); |
65 factory_.SubmitFrame(QualifyIdentifier(local_id), | 65 factory_.SubmitFrame(QualifyIdentifier(local_id), |
66 frame.To<scoped_ptr<cc::CompositorFrame>>(), | 66 frame.To<scoped_ptr<cc::CompositorFrame>>(), |
67 base::Bind(&CallCallback, callback)); | 67 base::Bind(&CallCallback, callback)); |
68 client_->FrameSubmitted(); | 68 client_->FrameSubmitted(); |
69 } | 69 } |
70 | 70 |
71 void SurfacesImpl::DestroySurface(uint32_t local_id) { | 71 void SurfacesImpl::DestroySurface(uint32_t local_id) { |
72 factory_.Destroy(QualifyIdentifier(local_id)); | 72 factory_.Destroy(QualifyIdentifier(local_id)); |
| 73 if (local_id == displayed_surface_) { |
| 74 displayed_surface_ = 0; |
| 75 client_->OnDisplayBeingDestroyed(display_.get()); |
| 76 display_.reset(); |
| 77 } |
73 } | 78 } |
74 | 79 |
75 void SurfacesImpl::CreateGLES2BoundSurface( | 80 void SurfacesImpl::CreateGLES2BoundSurface( |
76 mojo::CommandBufferPtr gles2_client, | 81 mojo::CommandBufferPtr gles2_client, |
77 uint32_t local_id, | 82 uint32_t local_id, |
78 mojo::SizePtr size, | 83 mojo::SizePtr size, |
79 mojo::InterfaceRequest<mojo::ViewportParameterListener> listener_request) { | 84 mojo::InterfaceRequest<mojo::ViewportParameterListener> listener_request) { |
80 command_buffer_handle_ = gles2_client.PassMessagePipe(); | 85 command_buffer_handle_ = gles2_client.PassMessagePipe(); |
81 | 86 |
82 if (!display_) { | 87 if (!display_) { |
83 cc::RendererSettings settings; | 88 cc::RendererSettings settings; |
84 display_.reset(new cc::Display(this, manager_, nullptr, nullptr, settings)); | 89 display_.reset(new cc::Display(this, manager_, nullptr, nullptr, settings)); |
85 client_->SetDisplay(display_.get()); | 90 client_->SetDisplay(display_.get()); |
86 display_->Initialize(make_scoped_ptr(new mojo::DirectOutputSurface( | 91 display_->Initialize(make_scoped_ptr(new mojo::DirectOutputSurface( |
87 new mojo::ContextProviderMojo(command_buffer_handle_.Pass())))); | 92 new mojo::ContextProviderMojo(command_buffer_handle_.Pass())))); |
88 } | 93 } |
| 94 displayed_surface_ = local_id; |
89 cc::SurfaceId cc_id = QualifyIdentifier(local_id); | 95 cc::SurfaceId cc_id = QualifyIdentifier(local_id); |
90 factory_.Create(cc_id); | 96 factory_.Create(cc_id); |
91 display_->SetSurfaceId(cc_id, 1.f); | 97 display_->SetSurfaceId(cc_id, 1.f); |
92 display_->Resize(size.To<gfx::Size>()); | 98 display_->Resize(size.To<gfx::Size>()); |
93 parameter_listeners_.AddBinding(this, listener_request.Pass()); | 99 parameter_listeners_.AddBinding(this, listener_request.Pass()); |
94 } | 100 } |
95 | 101 |
96 void SurfacesImpl::ReturnResources(const cc::ReturnedResourceArray& resources) { | 102 void SurfacesImpl::ReturnResources(const cc::ReturnedResourceArray& resources) { |
97 if (resources.empty() || !returner_) | 103 if (resources.empty() || !returner_) |
98 return; | 104 return; |
(...skipping 30 matching lines...) Expand all Loading... |
129 base::TimeDelta::FromInternalValue(interval)); | 135 base::TimeDelta::FromInternalValue(interval)); |
130 } | 136 } |
131 | 137 |
132 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager, | 138 SurfacesImpl::SurfacesImpl(cc::SurfaceManager* manager, |
133 uint32_t id_namespace, | 139 uint32_t id_namespace, |
134 Client* client) | 140 Client* client) |
135 : manager_(manager), | 141 : manager_(manager), |
136 factory_(manager, this), | 142 factory_(manager, this), |
137 id_namespace_(id_namespace), | 143 id_namespace_(id_namespace), |
138 client_(client), | 144 client_(client), |
| 145 displayed_surface_(0), |
139 binding_(this) { | 146 binding_(this) { |
140 } | 147 } |
141 | 148 |
142 cc::SurfaceId SurfacesImpl::QualifyIdentifier(uint32_t local_id) { | 149 cc::SurfaceId SurfacesImpl::QualifyIdentifier(uint32_t local_id) { |
143 return cc::SurfaceId(static_cast<uint64_t>(id_namespace_) << 32 | local_id); | 150 return cc::SurfaceId(static_cast<uint64_t>(id_namespace_) << 32 | local_id); |
144 } | 151 } |
145 | 152 |
146 } // namespace mojo | 153 } // namespace mojo |
OLD | NEW |