Chromium Code Reviews| Index: content/renderer/browser_plugin/browser_plugin_compositing_helper.cc |
| diff --git a/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc b/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6472022a470874d3fcb5cf4ccc856e70c724ff14 |
| --- /dev/null |
| +++ b/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc |
| @@ -0,0 +1,66 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/renderer/browser_plugin/browser_plugin_compositing_helper.h" |
| + |
| +#include "cc/texture_layer.h" |
| +#include "content/common/browser_plugin_messages.h" |
| +#include "content/renderer/render_thread_impl.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" |
| +#include "webkit/compositor_bindings/web_layer_impl.h" |
| + |
| +namespace content { |
| + |
| +static void sendACK(const std::string& mailbox_name, |
|
piman
2013/01/09 23:24:47
nit: SendACK
|
| + int host_route_id, |
| + int gpu_route_id, |
| + int gpu_host_id, |
| + unsigned sync_point) { |
| + RenderThread::Get()->Send( |
| + new BrowserPluginHostMsg_BuffersSwappedACK( |
| + host_route_id, |
| + gpu_route_id, |
| + gpu_host_id, |
| + mailbox_name, |
| + sync_point)); |
| +} |
| + |
| +BrowserPluginCompositingHelper::BrowserPluginCompositingHelper( |
| + WebKit::WebPluginContainer* container, |
| + int host_routing_id) |
| + : host_routing_id_(host_routing_id), |
| + last_mailbox_valid_(false), |
| + container_(container) { |
| +} |
| + |
| +BrowserPluginCompositingHelper::~BrowserPluginCompositingHelper() { |
| + container_->setWebLayer(NULL); |
| +} |
| + |
| +void BrowserPluginCompositingHelper::EnableCompositing(bool enable) { |
| + if (enable && !texture_layer_) { |
| + texture_layer_ = cc::TextureLayer::createForMailbox(); |
| + web_layer_.reset(new WebKit::WebLayerImpl(texture_layer_)); |
| + } |
| + |
| + container_->setWebLayer(enable ? web_layer_.get() : NULL); |
| +} |
| + |
| +void BrowserPluginCompositingHelper::OnBuffersSwapped(const gfx::Size& size, |
| + const std::string& mailbox_name, |
| + int gpu_route_id, |
| + int gpu_host_id) { |
| + if (!last_mailbox_valid_) |
| + sendACK(std::string(), host_routing_id_, gpu_route_id, gpu_host_id, 0); |
| + |
| + last_mailbox_valid_ = !mailbox_name.empty(); |
| + texture_layer_->setTextureMailbox(mailbox_name, |
| + base::Bind(&sendACK, |
| + mailbox_name, |
| + host_routing_id_, |
| + gpu_route_id, |
| + gpu_host_id)); |
| +} |
| + |
| +} // namespace content |