summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/compositor_impl_android.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/renderer_host/compositor_impl_android.cc')
-rw-r--r--content/browser/renderer_host/compositor_impl_android.cc115
1 files changed, 7 insertions, 108 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() {