Index: content/renderer/child_frame_compositing_helper.cc |
diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc |
index 237badcc3f0104a4ade09533f6e5428f916812bf..8e6e6ad0e8e68ba70447b4f4b834abcef6a6bb2e 100644 |
--- a/content/renderer/child_frame_compositing_helper.cc |
+++ b/content/renderer/child_frame_compositing_helper.cc |
@@ -9,7 +9,6 @@ |
#include "cc/layers/delegated_frame_resource_collection.h" |
#include "cc/layers/delegated_renderer_layer.h" |
#include "cc/layers/solid_color_layer.h" |
-#include "cc/layers/texture_layer.h" |
#include "cc/output/context_provider.h" |
#include "cc/output/copy_output_request.h" |
#include "cc/output/copy_output_result.h" |
@@ -23,7 +22,6 @@ |
#include "content/renderer/render_frame_proxy.h" |
#include "content/renderer/render_thread_impl.h" |
#include "skia/ext/image_operations.h" |
-#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" |
#include "third_party/WebKit/public/web/WebFrame.h" |
#include "third_party/WebKit/public/web/WebPluginContainer.h" |
#include "third_party/khronos/GLES2/gl2.h" |
@@ -32,13 +30,6 @@ |
namespace content { |
-ChildFrameCompositingHelper::SwapBuffersInfo::SwapBuffersInfo() |
- : route_id(0), |
- output_surface_id(0), |
- host_id(0), |
- software_frame_id(0), |
- shared_memory(NULL) {} |
- |
ChildFrameCompositingHelper* |
ChildFrameCompositingHelper::CreateForBrowserPlugin( |
const base::WeakPtr<BrowserPlugin>& browser_plugin) { |
@@ -64,9 +55,7 @@ ChildFrameCompositingHelper::ChildFrameCompositingHelper( |
last_route_id_(0), |
last_output_surface_id_(0), |
last_host_id_(0), |
- last_mailbox_valid_(false), |
ack_pending_(true), |
- software_ack_pending_(false), |
opaque_(true), |
browser_plugin_(browser_plugin), |
render_frame_proxy_(render_frame_proxy), |
@@ -109,19 +98,6 @@ void ChildFrameCompositingHelper::SendCompositorFrameSwappedACKToBrowser( |
} |
} |
-void ChildFrameCompositingHelper::SendBuffersSwappedACKToBrowser( |
- FrameHostMsg_BuffersSwappedACK_Params& params) { |
- // This function will be removed when BrowserPluginManager is removed and |
- // BrowserPlugin is modified to use a RenderFrame. |
- if (GetBrowserPluginManager()) { |
- GetBrowserPluginManager()->Send(new BrowserPluginHostMsg_BuffersSwappedACK( |
- host_routing_id_, params)); |
- } else if (render_frame_proxy_) { |
- render_frame_proxy_->Send( |
- new FrameHostMsg_BuffersSwappedACK(host_routing_id_, params)); |
- } |
-} |
- |
void ChildFrameCompositingHelper::SendReclaimCompositorResourcesToBrowser( |
FrameHostMsg_ReclaimCompositorResources_Params& params) { |
// This function will be removed when BrowserPluginManager is removed and |
@@ -152,20 +128,6 @@ void ChildFrameCompositingHelper::CopyFromCompositingSurface( |
} |
void ChildFrameCompositingHelper::DidCommitCompositorFrame() { |
- if (software_ack_pending_) { |
- FrameHostMsg_CompositorFrameSwappedACK_Params params; |
- params.producing_host_id = last_host_id_; |
- params.producing_route_id = last_route_id_; |
- params.output_surface_id = last_output_surface_id_; |
- if (!unacked_software_frames_.empty()) { |
- params.ack.last_software_frame_id = unacked_software_frames_.back(); |
- unacked_software_frames_.pop_back(); |
- } |
- |
- SendCompositorFrameSwappedACKToBrowser(params); |
- |
- software_ack_pending_ = false; |
- } |
if (!resource_collection_.get() || !ack_pending_) |
return; |
@@ -216,62 +178,6 @@ void ChildFrameCompositingHelper::CheckSizeAndAdjustLayerProperties( |
background_layer_->SetIsDrawable(false); |
} |
-void ChildFrameCompositingHelper::MailboxReleased(SwapBuffersInfo mailbox, |
- uint32 sync_point, |
- bool lost_resource) { |
- if (mailbox.type == SOFTWARE_COMPOSITOR_FRAME) { |
- delete mailbox.shared_memory; |
- mailbox.shared_memory = NULL; |
- } else if (lost_resource) { |
- // Reset mailbox's name if the resource was lost. |
- mailbox.name.SetZero(); |
- } |
- |
- // This means the GPU process crashed or guest crashed. |
- if (last_host_id_ != mailbox.host_id || |
- last_output_surface_id_ != mailbox.output_surface_id || |
- last_route_id_ != mailbox.route_id) |
- return; |
- |
- if (mailbox.type == SOFTWARE_COMPOSITOR_FRAME) |
- unacked_software_frames_.push_back(mailbox.software_frame_id); |
- |
- // We need to send an ACK to for every buffer sent to us. |
- // However, if a buffer is freed up from |
- // the compositor in cases like switching back to SW mode without a new |
- // buffer arriving, no ACK is needed. |
- if (!ack_pending_) { |
- last_mailbox_valid_ = false; |
- return; |
- } |
- ack_pending_ = false; |
- switch (mailbox.type) { |
- case TEXTURE_IMAGE_TRANSPORT: { |
- FrameHostMsg_BuffersSwappedACK_Params params; |
- params.gpu_host_id = mailbox.host_id; |
- params.gpu_route_id = mailbox.route_id; |
- params.mailbox = mailbox.name; |
- params.sync_point = sync_point; |
- SendBuffersSwappedACKToBrowser(params); |
- break; |
- } |
- case GL_COMPOSITOR_FRAME: { |
- FrameHostMsg_CompositorFrameSwappedACK_Params params; |
- params.producing_host_id = mailbox.host_id; |
- params.producing_route_id = mailbox.route_id; |
- params.output_surface_id = mailbox.output_surface_id; |
- params.ack.gl_frame_data.reset(new cc::GLFrameData()); |
- params.ack.gl_frame_data->mailbox = mailbox.name; |
- params.ack.gl_frame_data->size = mailbox.size; |
- params.ack.gl_frame_data->sync_point = sync_point; |
- SendCompositorFrameSwappedACKToBrowser(params); |
- break; |
- } |
- case SOFTWARE_COMPOSITOR_FRAME: |
- break; |
- } |
-} |
- |
void ChildFrameCompositingHelper::OnContainerDestroy() { |
if (GetContainer()) |
GetContainer()->setWebLayer(NULL); |
@@ -280,10 +186,8 @@ void ChildFrameCompositingHelper::OnContainerDestroy() { |
resource_collection_->SetClient(NULL); |
ack_pending_ = false; |
- software_ack_pending_ = false; |
resource_collection_ = NULL; |
frame_provider_ = NULL; |
- texture_layer_ = NULL; |
delegated_layer_ = NULL; |
background_layer_ = NULL; |
web_layer_.reset(); |
@@ -296,156 +200,12 @@ void ChildFrameCompositingHelper::ChildFrameGone() { |
background_layer_->SetContentsOpaque(true); |
} |
-void ChildFrameCompositingHelper::OnBuffersSwappedPrivate( |
- const SwapBuffersInfo& mailbox, |
- uint32 sync_point, |
- float device_scale_factor) { |
- DCHECK(!delegated_layer_.get()); |
- // If these mismatch, we are either just starting up, GPU process crashed or |
- // guest renderer crashed. |
- // In this case, we are communicating with a new image transport |
- // surface and must ACK with the new ID's and an empty mailbox. |
- if (last_route_id_ != mailbox.route_id || |
- last_output_surface_id_ != mailbox.output_surface_id || |
- last_host_id_ != mailbox.host_id) |
- last_mailbox_valid_ = false; |
- |
- last_route_id_ = mailbox.route_id; |
- last_output_surface_id_ = mailbox.output_surface_id; |
- last_host_id_ = mailbox.host_id; |
- |
- ack_pending_ = true; |
- // Browser plugin getting destroyed, do a fast ACK. |
- if (!background_layer_.get()) { |
- MailboxReleased(mailbox, sync_point, false); |
- return; |
- } |
- |
- if (!texture_layer_.get()) { |
- texture_layer_ = cc::TextureLayer::CreateForMailbox(NULL); |
- texture_layer_->SetIsDrawable(true); |
- SetContentsOpaque(opaque_); |
- |
- background_layer_->AddChild(texture_layer_); |
- } |
- |
- // The size of browser plugin container is not always equal to the size |
- // of the buffer that arrives here. This could be for a number of reasons, |
- // including autosize and a resize in progress. |
- // During resize, the container size changes first and then some time |
- // later, a new buffer with updated size will arrive. During this process, |
- // we need to make sure that things are still displayed pixel perfect. |
- // We accomplish this by modifying bounds of the texture layer only |
- // when a new buffer arrives. |
- // Visually, this will either display a smaller part of the buffer |
- // or introduce a gutter around it. |
- CheckSizeAndAdjustLayerProperties( |
- mailbox.size, device_scale_factor, texture_layer_.get()); |
- |
- bool is_software_frame = mailbox.type == SOFTWARE_COMPOSITOR_FRAME; |
- bool current_mailbox_valid = is_software_frame ? mailbox.shared_memory != NULL |
- : !mailbox.name.IsZero(); |
- if (!is_software_frame && !last_mailbox_valid_) { |
- SwapBuffersInfo empty_info = mailbox; |
- empty_info.name.SetZero(); |
- MailboxReleased(empty_info, 0, false); |
- if (!current_mailbox_valid) |
- return; |
- } |
- |
- cc::TextureMailbox texture_mailbox; |
- scoped_ptr<cc::SingleReleaseCallback> release_callback; |
- if (current_mailbox_valid) { |
- release_callback = |
- cc::SingleReleaseCallback::Create( |
- base::Bind(&ChildFrameCompositingHelper::MailboxReleased, |
- scoped_refptr<ChildFrameCompositingHelper>(this), |
- mailbox)).Pass(); |
- if (is_software_frame) { |
- texture_mailbox = cc::TextureMailbox(mailbox.shared_memory, mailbox.size); |
- } else { |
- texture_mailbox = |
- cc::TextureMailbox(mailbox.name, GL_TEXTURE_2D, sync_point); |
- } |
- } |
- |
- texture_layer_->SetFlipped(!is_software_frame); |
- texture_layer_->SetTextureMailbox(texture_mailbox, release_callback.Pass()); |
- texture_layer_->SetNeedsDisplay(); |
- last_mailbox_valid_ = current_mailbox_valid; |
-} |
- |
-void ChildFrameCompositingHelper::OnBuffersSwapped( |
- const gfx::Size& size, |
- const gpu::Mailbox& mailbox, |
- int gpu_route_id, |
- int gpu_host_id, |
- float device_scale_factor) { |
- SwapBuffersInfo swap_info; |
- swap_info.name = mailbox; |
- swap_info.type = TEXTURE_IMAGE_TRANSPORT; |
- swap_info.size = size; |
- swap_info.route_id = gpu_route_id; |
- swap_info.output_surface_id = 0; |
- swap_info.host_id = gpu_host_id; |
- OnBuffersSwappedPrivate(swap_info, 0, device_scale_factor); |
-} |
- |
void ChildFrameCompositingHelper::OnCompositorFrameSwapped( |
scoped_ptr<cc::CompositorFrame> frame, |
int route_id, |
uint32 output_surface_id, |
int host_id, |
base::SharedMemoryHandle handle) { |
- |
- if (frame->gl_frame_data) { |
- SwapBuffersInfo swap_info; |
- swap_info.name = frame->gl_frame_data->mailbox; |
- swap_info.type = GL_COMPOSITOR_FRAME; |
- swap_info.size = frame->gl_frame_data->size; |
- swap_info.route_id = route_id; |
- swap_info.output_surface_id = output_surface_id; |
- swap_info.host_id = host_id; |
- OnBuffersSwappedPrivate(swap_info, |
- frame->gl_frame_data->sync_point, |
- frame->metadata.device_scale_factor); |
- return; |
- } |
- |
- if (frame->software_frame_data) { |
- cc::SoftwareFrameData* frame_data = frame->software_frame_data.get(); |
- |
- SwapBuffersInfo swap_info; |
- swap_info.type = SOFTWARE_COMPOSITOR_FRAME; |
- swap_info.size = frame_data->size; |
- swap_info.route_id = route_id; |
- swap_info.output_surface_id = output_surface_id; |
- swap_info.host_id = host_id; |
- swap_info.software_frame_id = frame_data->id; |
- |
- scoped_ptr<base::SharedMemory> shared_memory( |
- 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; |
- // Send ACK right away. |
- software_ack_pending_ = true; |
- MailboxReleased(swap_info, 0, false); |
- DidCommitCompositorFrame(); |
- return; |
- } |
- |
- swap_info.shared_memory = shared_memory.release(); |
- OnBuffersSwappedPrivate(swap_info, 0, frame->metadata.device_scale_factor); |
- software_ack_pending_ = true; |
- last_route_id_ = route_id; |
- last_output_surface_id_ = output_surface_id; |
- last_host_id_ = host_id; |
- return; |
- } |
- |
- DCHECK(!texture_layer_.get()); |
- |
cc::DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); |
// Do nothing if we are getting destroyed or have no frame data. |
if (!frame_data || !background_layer_.get()) |
@@ -507,8 +267,6 @@ void ChildFrameCompositingHelper::OnCompositorFrameSwapped( |
} |
void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { |
- if (texture_layer_.get()) |
- texture_layer_->SetIsDrawable(visible); |
if (delegated_layer_.get()) |
delegated_layer_->SetIsDrawable(visible); |
} |
@@ -535,9 +293,6 @@ void ChildFrameCompositingHelper::SendReturnedDelegatedResources() { |
void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { |
opaque_ = opaque; |
- |
- if (texture_layer_.get()) |
- texture_layer_->SetContentsOpaque(opaque_); |
if (delegated_layer_.get()) |
delegated_layer_->SetContentsOpaque(opaque_); |
} |