diff options
Diffstat (limited to 'content/browser/renderer_host')
-rw-r--r-- | content/browser/renderer_host/compositor_impl_android.cc | 115 | ||||
-rw-r--r-- | content/browser/renderer_host/compositor_impl_android.h | 15 |
2 files changed, 11 insertions, 119 deletions
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc index 60fedc8..6232bcd 100644 --- a/content/browser/renderer_host/compositor_impl_android.cc +++ b/content/browser/renderer_host/compositor_impl_android.cc @@ -24,8 +24,6 @@ #include "cc/output/compositor_frame.h" #include "cc/output/context_provider.h" #include "cc/output/output_surface.h" -#include "cc/resources/scoped_ui_resource.h" -#include "cc/resources/ui_resource_bitmap.h" #include "cc/trees/layer_tree_host.h" #include "content/browser/android/child_process_launcher_android.h" #include "content/browser/gpu/browser_gpu_channel_host_factory.h" @@ -44,17 +42,12 @@ #include "third_party/skia/include/core/SkMallocPixelRef.h" #include "ui/base/android/window_android.h" #include "ui/gfx/android/device_display_info.h" -#include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/frame_time.h" #include "ui/gl/android/surface_texture.h" #include "ui/gl/android/surface_texture_tracker.h" #include "webkit/common/gpu/context_provider_in_process.h" #include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" -namespace gfx { -class JavaBitmap; -} - namespace { const unsigned int kMaxSwapBuffers = 2U; @@ -81,46 +74,6 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface { } }; -class TransientUIResource : public cc::ScopedUIResource { - public: - static scoped_ptr<TransientUIResource> Create( - cc::LayerTreeHost* host, - const cc::UIResourceBitmap& bitmap) { - return make_scoped_ptr(new TransientUIResource(host, bitmap)); - } - - virtual cc::UIResourceBitmap GetBitmap(cc::UIResourceId uid, - bool resource_lost) OVERRIDE { - if (!retrieved_) { - cc::UIResourceBitmap old_bitmap(bitmap_); - - // Return a place holder for all following calls to GetBitmap. - SkBitmap tiny_bitmap; - SkCanvas canvas(tiny_bitmap); - tiny_bitmap.setConfig( - SkBitmap::kARGB_8888_Config, 1, 1, 0, kOpaque_SkAlphaType); - tiny_bitmap.allocPixels(); - canvas.drawColor(SK_ColorWHITE); - tiny_bitmap.setImmutable(); - - // Release our reference of the true bitmap. - bitmap_ = cc::UIResourceBitmap(tiny_bitmap); - - retrieved_ = true; - return old_bitmap; - } - return bitmap_; - } - - protected: - TransientUIResource(cc::LayerTreeHost* host, - const cc::UIResourceBitmap& bitmap) - : cc::ScopedUIResource(host, bitmap), retrieved_(false) {} - - private: - bool retrieved_; -}; - class SurfaceTextureTrackerImpl : public gfx::SurfaceTextureTracker { public: SurfaceTextureTrackerImpl() : next_surface_texture_id_(1) { @@ -383,6 +336,10 @@ void CompositorImpl::OnGpuChannelEstablished() { ScheduleComposite(); } +UIResourceProvider& CompositorImpl::GetUIResourceProvider() { + return ui_resource_provider_; +} + void CompositorImpl::SetRootLayer(scoped_refptr<cc::Layer> root_layer) { root_layer_->RemoveAllChildren(); if (root_layer) @@ -440,9 +397,8 @@ void CompositorImpl::SetVisible(bool visible) { if (!visible) { if (WillComposite()) CancelComposite(); - ui_resource_map_.clear(); + ui_resource_provider_.SetLayerTreeHost(NULL); host_.reset(); - client_->UIResourcesAreInvalid(); } else if (!host_) { DCHECK(!WillComposite()); needs_composite_ = false; @@ -471,9 +427,7 @@ void CompositorImpl::SetVisible(bool visible) { host_->SetViewportSize(size_); host_->set_has_transparent_background(has_transparent_background_); host_->SetDeviceScaleFactor(device_scale_factor_); - // Need to recreate the UI resources because a new LayerTreeHost has been - // created. - client_->DidLoseUIResources(); + ui_resource_provider_.SetLayerTreeHost(host_.get()); } } @@ -508,62 +462,6 @@ void CompositorImpl::SetNeedsComposite() { PostComposite(COMPOSITE_IMMEDIATELY); } -cc::UIResourceId CompositorImpl::GenerateUIResourceFromUIResourceBitmap( - const cc::UIResourceBitmap& bitmap, - bool is_transient) { - if (!host_) - return 0; - - cc::UIResourceId id = 0; - scoped_ptr<cc::UIResourceClient> resource; - if (is_transient) { - scoped_ptr<TransientUIResource> transient_resource = - TransientUIResource::Create(host_.get(), bitmap); - id = transient_resource->id(); - resource = transient_resource.Pass(); - } else { - scoped_ptr<cc::ScopedUIResource> scoped_resource = - cc::ScopedUIResource::Create(host_.get(), bitmap); - id = scoped_resource->id(); - resource = scoped_resource.Pass(); - } - - ui_resource_map_.set(id, resource.Pass()); - return id; -} - -cc::UIResourceId CompositorImpl::GenerateUIResource(const SkBitmap& bitmap, - bool is_transient) { - return GenerateUIResourceFromUIResourceBitmap(cc::UIResourceBitmap(bitmap), - is_transient); -} - -cc::UIResourceId CompositorImpl::GenerateCompressedUIResource( - const gfx::Size& size, - void* pixels, - bool is_transient) { - DCHECK_LT(0, size.width()); - DCHECK_LT(0, size.height()); - DCHECK_EQ(0, size.width() % 4); - DCHECK_EQ(0, size.height() % 4); - - size_t data_size = size.width() * size.height() / 2; - SkImageInfo info = {size.width(), size.height() / 2, kAlpha_8_SkColorType, - kPremul_SkAlphaType}; - skia::RefPtr<SkMallocPixelRef> etc1_pixel_ref = - skia::AdoptRef(SkMallocPixelRef::NewAllocate(info, 0, 0)); - memcpy(etc1_pixel_ref->getAddr(), pixels, data_size); - etc1_pixel_ref->setImmutable(); - return GenerateUIResourceFromUIResourceBitmap( - cc::UIResourceBitmap(etc1_pixel_ref, size), is_transient); -} - -void CompositorImpl::DeleteUIResource(cc::UIResourceId resource_id) { - UIResourceMap::iterator it = ui_resource_map_.find(resource_id); - if (it != ui_resource_map_.end()) - ui_resource_map_.erase(it); -} - static scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateGpuProcessViewContext( const scoped_refptr<GpuChannelHost>& gpu_channel_host, @@ -633,6 +531,7 @@ scoped_ptr<cc::OutputSurface> CompositorImpl::CreateOutputSurface( void CompositorImpl::OnLostResources() { client_->DidLoseResources(); + ui_resource_provider_.UIResourcesAreInvalid(); } void CompositorImpl::ScheduleComposite() { diff --git a/content/browser/renderer_host/compositor_impl_android.h b/content/browser/renderer_host/compositor_impl_android.h index 360df36..61743af 100644 --- a/content/browser/renderer_host/compositor_impl_android.h +++ b/content/browser/renderer_host/compositor_impl_android.h @@ -14,6 +14,7 @@ #include "cc/resources/ui_resource_client.h" #include "cc/trees/layer_tree_host_client.h" #include "cc/trees/layer_tree_host_single_thread_client.h" +#include "content/browser/android/ui_resource_provider_impl.h" #include "content/browser/renderer_host/image_transport_factory_android.h" #include "content/common/content_export.h" #include "content/public/browser/android/compositor.h" @@ -32,6 +33,7 @@ class LayerTreeHost; namespace content { class CompositorClient; class GraphicsContext; +class UIResourceProvider; // ----------------------------------------------------------------------------- // Browser-side compositor that manages a tree of content and UI layers. @@ -65,13 +67,7 @@ class CONTENT_EXPORT CompositorImpl virtual void SetWindowBounds(const gfx::Size& size) OVERRIDE; virtual void SetHasTransparentBackground(bool flag) OVERRIDE; virtual void SetNeedsComposite() OVERRIDE; - virtual cc::UIResourceId GenerateUIResource(const SkBitmap& bitmap, - bool is_transient) OVERRIDE; - virtual cc::UIResourceId GenerateCompressedUIResource(const gfx::Size& size, - void* pixels, - bool is_transient) - OVERRIDE; - virtual void DeleteUIResource(cc::UIResourceId resource_id) OVERRIDE; + virtual UIResourceProvider& GetUIResourceProvider() OVERRIDE; // LayerTreeHostClient implementation. virtual void WillBeginMainFrame(int frame_id) OVERRIDE {} @@ -140,6 +136,7 @@ class CONTENT_EXPORT CompositorImpl scoped_refptr<cc::Layer> root_layer_; scoped_ptr<cc::LayerTreeHost> host_; + content::UIResourceProviderImpl ui_resource_provider_; gfx::Size size_; bool has_transparent_background_; @@ -150,10 +147,6 @@ class CONTENT_EXPORT CompositorImpl CompositorClient* client_; - typedef base::ScopedPtrHashMap<cc::UIResourceId, cc::UIResourceClient> - UIResourceMap; - UIResourceMap ui_resource_map_; - gfx::NativeWindow root_window_; // Used locally to track whether a call to LTH::Composite() did result in |