summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-09 04:29:56 +0000
committerjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-09 04:29:56 +0000
commitf1970084eb384bcc34e34a363d48582aa4151ed8 (patch)
tree19721446a0b878a1a94be8917c32b26c8e19f45e /content/renderer
parent713f38789baaa60f453b2bf56782a5077744101b (diff)
downloadchromium_src-f1970084eb384bcc34e34a363d48582aa4151ed8.zip
chromium_src-f1970084eb384bcc34e34a363d48582aa4151ed8.tar.gz
chromium_src-f1970084eb384bcc34e34a363d48582aa4151ed8.tar.bz2
Use SharedBitmapManager to allocate software frames.
This reduces the number of ways to allocate cross-process bitmaps. BUG= Review URL: https://codereview.chromium.org/227703009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262620 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/browser_plugin/browser_plugin.cc3
-rw-r--r--content/renderer/child_frame_compositing_helper.cc5
-rw-r--r--content/renderer/child_frame_compositing_helper.h4
-rw-r--r--content/renderer/gpu/compositor_software_output_device.cc30
-rw-r--r--content/renderer/gpu/compositor_software_output_device.h16
-rw-r--r--content/renderer/render_frame_impl.cc3
6 files changed, 32 insertions, 29 deletions
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 587412b..3f9d3af 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -454,7 +454,8 @@ void BrowserPlugin::OnCompositorFrameSwapped(const IPC::Message& message) {
compositing_helper_->OnCompositorFrameSwapped(frame.Pass(),
param.b.producing_route_id,
param.b.output_surface_id,
- param.b.producing_host_id);
+ param.b.producing_host_id,
+ param.b.shared_memory_handle);
}
void BrowserPlugin::OnCopyFromCompositingSurface(int guest_instance_id,
diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc
index 20779de..10da97d 100644
--- a/content/renderer/child_frame_compositing_helper.cc
+++ b/content/renderer/child_frame_compositing_helper.cc
@@ -394,7 +394,8 @@ void ChildFrameCompositingHelper::OnCompositorFrameSwapped(
scoped_ptr<cc::CompositorFrame> frame,
int route_id,
uint32 output_surface_id,
- int host_id) {
+ int host_id,
+ base::SharedMemoryHandle handle) {
if (frame->gl_frame_data) {
SwapBuffersInfo swap_info;
@@ -422,7 +423,7 @@ void ChildFrameCompositingHelper::OnCompositorFrameSwapped(
swap_info.software_frame_id = frame_data->id;
scoped_ptr<base::SharedMemory> shared_memory(
- new base::SharedMemory(frame_data->handle, true));
+ new base::SharedMemory(handle, true));
const size_t size_in_bytes = 4 * frame_data->size.GetArea();
if (!shared_memory->Map(size_in_bytes)) {
LOG(ERROR) << "Failed to map shared memory of size " << size_in_bytes;
diff --git a/content/renderer/child_frame_compositing_helper.h b/content/renderer/child_frame_compositing_helper.h
index b440e39..c33083e 100644
--- a/content/renderer/child_frame_compositing_helper.h
+++ b/content/renderer/child_frame_compositing_helper.h
@@ -10,6 +10,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
#include "cc/layers/delegated_frame_resource_collection.h"
#include "content/common/content_export.h"
#include "gpu/command_buffer/common/mailbox.h"
@@ -76,7 +77,8 @@ class CONTENT_EXPORT ChildFrameCompositingHelper
void OnCompositorFrameSwapped(scoped_ptr<cc::CompositorFrame> frame,
int route_id,
uint32 output_surface_id,
- int host_id);
+ int host_id,
+ base::SharedMemoryHandle handle);
void UpdateVisibility(bool);
void ChildFrameGone();
diff --git a/content/renderer/gpu/compositor_software_output_device.cc b/content/renderer/gpu/compositor_software_output_device.cc
index d1e0293..a8c893b 100644
--- a/content/renderer/gpu/compositor_software_output_device.cc
+++ b/content/renderer/gpu/compositor_software_output_device.cc
@@ -6,7 +6,9 @@
#include "base/logging.h"
#include "cc/output/software_frame_data.h"
+#include "content/child/child_shared_bitmap_manager.h"
#include "content/renderer/render_process.h"
+#include "content/renderer/render_thread_impl.h"
#include "third_party/skia/include/core/SkBitmapDevice.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPixelRef.h"
@@ -16,12 +18,9 @@
namespace content {
CompositorSoftwareOutputDevice::Buffer::Buffer(
- unsigned id, scoped_ptr<base::SharedMemory> mem)
- : id_(id),
- mem_(mem.Pass()),
- free_(true),
- parent_(NULL) {
-}
+ unsigned id,
+ scoped_ptr<cc::SharedBitmap> bitmap)
+ : id_(id), shared_bitmap_(bitmap.Pass()), free_(true), parent_(NULL) {}
CompositorSoftwareOutputDevice::Buffer::~Buffer() {
}
@@ -59,7 +58,8 @@ bool CompositorSoftwareOutputDevice::Buffer::FindDamageDifferenceFrom(
CompositorSoftwareOutputDevice::CompositorSoftwareOutputDevice()
: current_index_(-1),
next_buffer_id_(1),
- render_thread_(RenderThread::Get()) {
+ shared_bitmap_manager_(
+ RenderThreadImpl::current()->shared_bitmap_manager()) {
DetachFromThread();
}
@@ -77,13 +77,10 @@ unsigned CompositorSoftwareOutputDevice::GetNextId() {
CompositorSoftwareOutputDevice::Buffer*
CompositorSoftwareOutputDevice::CreateBuffer() {
- const size_t size = 4 * viewport_size_.GetArea();
- scoped_ptr<base::SharedMemory> mem =
- render_thread_->HostAllocateSharedMemoryBuffer(size).Pass();
- CHECK(mem);
- bool success = mem->Map(size);
- CHECK(success);
- return new Buffer(GetNextId(), mem.Pass());
+ scoped_ptr<cc::SharedBitmap> shared_bitmap =
+ shared_bitmap_manager_->AllocateSharedBitmap(viewport_size_);
+ CHECK(shared_bitmap);
+ return new Buffer(GetNextId(), shared_bitmap.Pass());
}
size_t CompositorSoftwareOutputDevice::FindFreeBuffer(size_t hint) {
@@ -200,10 +197,7 @@ void CompositorSoftwareOutputDevice::EndPaint(
frame_data->id = buffer->id();
frame_data->size = viewport_size_;
frame_data->damage_rect = damage_rect_;
- frame_data->handle = buffer->handle();
-
- CHECK_LE(static_cast<size_t>(frame_data->size.GetArea()) * 4,
- buffer->shared_memory()->mapped_size());
+ frame_data->bitmap_id = buffer->shared_bitmap_id();
}
void CompositorSoftwareOutputDevice::ReclaimSoftwareFrame(unsigned id) {
diff --git a/content/renderer/gpu/compositor_software_output_device.h b/content/renderer/gpu/compositor_software_output_device.h
index 815cd96..646349a 100644
--- a/content/renderer/gpu/compositor_software_output_device.h
+++ b/content/renderer/gpu/compositor_software_output_device.h
@@ -10,11 +10,16 @@
#include "base/memory/shared_memory.h"
#include "base/threading/non_thread_safe.h"
#include "cc/output/software_output_device.h"
+#include "cc/resources/shared_bitmap.h"
#include "content/public/renderer/render_thread.h"
#include "third_party/skia/include/core/SkBitmap.h"
class SkRegion;
+namespace cc {
+class SharedBitmapManager;
+}
+
namespace content {
// This class can be created only on the main thread, but then becomes pinned
@@ -42,14 +47,13 @@ private:
// FindDamageDifferenceFrom).
class Buffer {
public:
- explicit Buffer(unsigned id, scoped_ptr<base::SharedMemory> mem);
+ explicit Buffer(unsigned id, scoped_ptr<cc::SharedBitmap> bitmap);
~Buffer();
unsigned id() const { return id_; }
- void* memory() const { return mem_->memory(); }
- base::SharedMemoryHandle handle() const { return mem_->handle(); }
- base::SharedMemory* shared_memory() const { return mem_.get(); }
+ void* memory() const { return shared_bitmap_->pixels(); }
+ cc::SharedBitmapId shared_bitmap_id() const { return shared_bitmap_->id(); }
bool free() const { return free_; }
void SetFree(bool free) { free_ = free; }
@@ -61,7 +65,7 @@ private:
private:
const unsigned id_;
- scoped_ptr<base::SharedMemory> mem_;
+ scoped_ptr<cc::SharedBitmap> shared_bitmap_;
bool free_;
Buffer* parent_;
gfx::Rect damage_;
@@ -89,7 +93,7 @@ private:
unsigned next_buffer_id_;
ScopedVector<Buffer> buffers_;
ScopedVector<Buffer> awaiting_ack_;
- RenderThread* render_thread_;
+ cc::SharedBitmapManager* shared_bitmap_manager_;
};
} // namespace content
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index a0ddeef..2d63fbc 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -897,7 +897,8 @@ void RenderFrameImpl::OnCompositorFrameSwapped(const IPC::Message& message) {
compositing_helper_->OnCompositorFrameSwapped(frame.Pass(),
param.a.producing_route_id,
param.a.output_surface_id,
- param.a.producing_host_id);
+ param.a.producing_host_id,
+ param.a.shared_memory_handle);
}
void RenderFrameImpl::OnContextMenuClosed(