Chromium Code Reviews| Index: mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc |
| diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc |
| index aaadf8aabf3e10ecf9352e277f6240da5de30db5..79dbb069d13ae287ca64599ceb2d804726c49727 100644 |
| --- a/mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc |
| +++ b/mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc |
| @@ -97,29 +97,6 @@ class RootObserver : public ViewObserver { |
| DISALLOW_COPY_AND_ASSIGN(RootObserver); |
| }; |
| -bool CreateMapAndDupSharedBuffer(size_t size, |
| - void** memory, |
| - ScopedSharedBufferHandle* handle, |
| - ScopedSharedBufferHandle* duped) { |
| - MojoResult result = CreateSharedBuffer(NULL, size, handle); |
| - if (result != MOJO_RESULT_OK) |
| - return false; |
| - DCHECK(handle->is_valid()); |
| - |
| - result = DuplicateBuffer(handle->get(), NULL, duped); |
| - if (result != MOJO_RESULT_OK) |
| - return false; |
| - DCHECK(duped->is_valid()); |
| - |
| - result = MapBuffer( |
| - handle->get(), 0, size, memory, MOJO_MAP_BUFFER_FLAG_NONE); |
| - if (result != MOJO_RESULT_OK) |
| - return false; |
| - DCHECK(*memory); |
| - |
| - return true; |
| -} |
| - |
| ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate, |
| Shell* shell) |
| : connected_(false), |
| @@ -159,6 +136,12 @@ ViewManagerClientImpl::~ViewManagerClientImpl() { |
| // NOTE: we manually delete as we're a friend. |
| for (size_t i = 0; i < non_owned.size(); ++i) |
| delete non_owned[i]; |
| + |
| + for (BitmapUploaderMap::iterator it = bitmap_uploaders_.begin(); |
| + it != bitmap_uploaders_.end(); |
| + ++it) { |
| + delete it->second; |
|
Ben Goodger (Google)
2014/09/13 01:22:22
rather than track this here, do you think it makes
|
| + } |
| delegate_->OnViewManagerDisconnected(this); |
| } |
| @@ -214,27 +197,12 @@ void ViewManagerClientImpl::SetSurfaceId(Id view_id, SurfaceIdPtr surface_id) { |
| void ViewManagerClientImpl::SetViewContents(Id view_id, |
| const SkBitmap& contents) { |
| DCHECK(connected_); |
| - if (!bitmap_uploader_) { |
| - SurfacesServicePtr surfaces_service; |
| - InterfacePtr<ServiceProvider> surfaces_service_provider; |
| - shell_->ConnectToApplication("mojo:mojo_surfaces_service", |
| - Get(&surfaces_service_provider)); |
| - ConnectToService(surfaces_service_provider.get(), &surfaces_service); |
| - GpuPtr gpu_service; |
| - InterfacePtr<ServiceProvider> gpu_service_provider; |
| - shell_->ConnectToApplication("mojo:mojo_native_viewport_service", |
| - Get(&gpu_service_provider)); |
| - ConnectToService(gpu_service_provider.get(), &gpu_service); |
| - bitmap_uploader_.reset( |
| - new BitmapUploader(surfaces_service.Pass(), gpu_service.Pass())); |
| - } |
| - bitmap_uploader_->Upload( |
| - contents, |
| - base::Bind(&ViewManagerClientImpl::SetSurfaceId, |
| - // We'll destroy the bitmap_uploader before we are destroyed, |
| - // so we can use an unretained pointer here. |
| - base::Unretained(this), |
| - view_id)); |
| + BitmapUploaderForView(view_id)->SetBitmap(contents); |
| +} |
| + |
| +void ViewManagerClientImpl::SetViewColor(Id view_id, SkColor color) { |
| + DCHECK(connected_); |
| + BitmapUploaderForView(view_id)->SetColor(color); |
| } |
| void ViewManagerClientImpl::SetFocus(Id view_id) { |
| @@ -472,4 +440,27 @@ base::Callback<void(ErrorCode)> |
| base::Unretained(this)); |
| } |
| +BitmapUploader* ViewManagerClientImpl::BitmapUploaderForView(Id view_id) { |
| + BitmapUploader* uploader = bitmap_uploaders_[view_id]; |
| + if (!uploader) { |
| + SurfacesServicePtr surfaces_service; |
| + InterfacePtr<ServiceProvider> surfaces_service_provider; |
| + shell_->ConnectToApplication("mojo:mojo_surfaces_service", |
| + Get(&surfaces_service_provider)); |
| + ConnectToService(surfaces_service_provider.get(), &surfaces_service); |
| + GpuPtr gpu_service; |
| + InterfacePtr<ServiceProvider> gpu_service_provider; |
| + shell_->ConnectToApplication("mojo:mojo_native_viewport_service", |
| + Get(&gpu_service_provider)); |
| + ConnectToService(gpu_service_provider.get(), &gpu_service); |
| + uploader = new BitmapUploader( |
| + this, view_id, surfaces_service.Pass(), gpu_service.Pass()); |
| + |
| + bitmap_uploaders_[view_id] = uploader; |
| + } |
| + View* view = GetViewById(view_id); |
| + uploader->SetSize(view->bounds().size()); |
| + return uploader; |
| +} |
| + |
| } // namespace mojo |