Index: services/view_manager/display_manager.cc |
diff --git a/services/view_manager/display_manager.cc b/services/view_manager/display_manager.cc |
index 175c25e385c2f6c212eed763568dd803c4f27be0..ed3a58f5b6ac001dd06566448515d41d4d213765 100644 |
--- a/services/view_manager/display_manager.cc |
+++ b/services/view_manager/display_manager.cc |
@@ -76,6 +76,8 @@ DefaultDisplayManager::DefaultDisplayManager( |
: app_connection_(app_connection), |
connection_manager_(nullptr), |
draw_timer_(false, false), |
+ id_namespace_(0u), |
+ local_id_(0u), |
native_viewport_closed_callback_(native_viewport_closed_callback), |
weak_factory_(this) { |
metrics_.size = mojo::Size::New(); |
@@ -93,11 +95,9 @@ void DefaultDisplayManager::Init(ConnectionManager* connection_manager) { |
base::Bind(&DefaultDisplayManager::OnCreatedNativeViewport, |
weak_factory_.GetWeakPtr())); |
native_viewport_->Show(); |
- app_connection_->ConnectToService("mojo:surfaces_service", |
- &surfaces_service_); |
- surfaces_service_->CreateSurfaceConnection( |
- base::Bind(&DefaultDisplayManager::OnSurfaceConnectionCreated, |
- weak_factory_.GetWeakPtr())); |
+ |
+ app_connection_->ConnectToService("mojo:surfaces_service", &surface_); |
+ surface_.set_client(this); |
mojo::NativeViewportEventDispatcherPtr event_dispatcher; |
app_connection_->ConnectToService(&event_dispatcher); |
@@ -135,20 +135,10 @@ void DefaultDisplayManager::OnCreatedNativeViewport( |
uint64_t native_viewport_id) { |
} |
-void DefaultDisplayManager::OnSurfaceConnectionCreated(mojo::SurfacePtr surface, |
- uint32_t id_namespace) { |
- surface_ = surface.Pass(); |
- surface_.set_client(this); |
- surface_id_allocator_.reset(new cc::SurfaceIdAllocator(id_namespace)); |
- Draw(); |
-} |
- |
void DefaultDisplayManager::Draw() { |
- if (!surface_) |
- return; |
- if (surface_id_.is_null()) { |
- surface_id_ = surface_id_allocator_->GenerateId(); |
- surface_->CreateSurface(mojo::SurfaceId::From(surface_id_)); |
+ if (local_id_ == 0u) { |
+ local_id_ = 1u; |
+ surface_->CreateSurface(local_id_); |
} |
Rect rect; |
@@ -162,12 +152,16 @@ void DefaultDisplayManager::Draw() { |
auto frame = mojo::Frame::New(); |
frame->passes.push_back(pass.Pass()); |
frame->resources.resize(0u); |
- surface_->SubmitFrame(mojo::SurfaceId::From(surface_id_), frame.Pass(), |
- mojo::Closure()); |
+ surface_->SubmitFrame(local_id_, frame.Pass(), mojo::Closure()); |
+ dirty_rect_ = gfx::Rect(); |
- native_viewport_->SubmittedFrame(mojo::SurfaceId::From(surface_id_)); |
+ if (id_namespace_ == 0u) |
+ return; |
- dirty_rect_ = gfx::Rect(); |
+ auto qualified_id = mojo::SurfaceId::New(); |
+ qualified_id->id_namespace = id_namespace_; |
+ qualified_id->local = local_id_; |
+ native_viewport_->SubmittedFrame(qualified_id.Pass()); |
} |
void DefaultDisplayManager::OnDestroyed() { |
@@ -181,14 +175,21 @@ void DefaultDisplayManager::OnMetricsChanged(mojo::ViewportMetricsPtr metrics) { |
metrics_.device_pixel_ratio = metrics->device_pixel_ratio; |
gfx::Rect bounds(metrics_.size.To<gfx::Size>()); |
connection_manager_->root()->SetBounds(bounds); |
- if (surface_id_.is_null()) |
+ if (local_id_ == 0u) |
return; |
- surface_->DestroySurface(mojo::SurfaceId::From(surface_id_)); |
- surface_id_ = cc::SurfaceId(); |
+ surface_->DestroySurface(local_id_); |
+ local_id_ = 0u; |
SchedulePaint(connection_manager_->root(), bounds); |
} |
void DefaultDisplayManager::SetIdNamespace(uint32_t id_namespace) { |
+ id_namespace_ = id_namespace; |
+ if (local_id_ != 0u) { |
+ auto qualified_id = mojo::SurfaceId::New(); |
+ qualified_id->id_namespace = id_namespace_; |
+ qualified_id->local = local_id_; |
+ native_viewport_->SubmittedFrame(qualified_id.Pass()); |
+ } |
} |
void DefaultDisplayManager::ReturnResources( |