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 |