| Index: content/browser/compositor/browser_compositor_view_mac.mm
|
| diff --git a/content/browser/compositor/browser_compositor_view_mac.mm b/content/browser/compositor/browser_compositor_view_mac.mm
|
| index b38edce89aeb1bfea64e06861fb3f5a40044b9a8..87a576d73aae1f3a9ab9a4e0b12448ddd5e59dd0 100644
|
| --- a/content/browser/compositor/browser_compositor_view_mac.mm
|
| +++ b/content/browser/compositor/browser_compositor_view_mac.mm
|
| @@ -6,93 +6,85 @@
|
|
|
| #include "base/debug/trace_event.h"
|
| #include "base/lazy_instance.h"
|
| -#include "content/browser/gpu/gpu_process_host_ui_shim.h"
|
| #include "content/browser/compositor/browser_compositor_ca_layer_tree_mac.h"
|
| +#include "content/browser/gpu/gpu_process_host_ui_shim.h"
|
| +#include "content/browser/renderer_host/render_widget_resize_helper.h"
|
| #include "content/common/gpu/gpu_messages.h"
|
| +#include "content/public/browser/context_factory.h"
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// BrowserCompositorViewMac
|
| +// BrowserCompositorMac
|
|
|
| namespace content {
|
| +
|
| namespace {
|
|
|
| // The number of placeholder objects allocated. If this reaches zero, then
|
| -// the BrowserCompositorCALayerTreeMac being held on to for recycling,
|
| -// |g_recyclable_ca_layer_tree|, will be freed.
|
| +// the BrowserCompositorMac being held on to for recycling,
|
| +// |g_recyclable_browser_compositor|, will be freed.
|
| uint32 g_placeholder_count = 0;
|
|
|
| -// A spare BrowserCompositorCALayerTreeMac kept around for recycling.
|
| -base::LazyInstance<scoped_ptr<BrowserCompositorCALayerTreeMac>>
|
| - g_recyclable_ca_layer_tree;
|
| +// A spare BrowserCompositorMac kept around for recycling.
|
| +base::LazyInstance<scoped_ptr<BrowserCompositorMac>>
|
| + g_recyclable_browser_compositor;
|
|
|
| } // namespace
|
|
|
| -BrowserCompositorViewMac::BrowserCompositorViewMac(
|
| - BrowserCompositorViewMacClient* client,
|
| - NSView* native_view,
|
| - ui::Layer* ui_root_layer)
|
| - : client_(client),
|
| - native_view_(native_view),
|
| - ui_root_layer_(ui_root_layer) {
|
| - // Try to use the recyclable BrowserCompositorCALayerTreeMac if there is one,
|
| - // otherwise allocate a new one.
|
| - // TODO(ccameron): If there exists a frame in flight (swap has been called
|
| - // by the compositor, but the frame has not arrived from the GPU process
|
| - // yet), then that frame may inappropriately flash in the new view.
|
| - ca_layer_tree_ = g_recyclable_ca_layer_tree.Get().Pass();
|
| - if (!ca_layer_tree_)
|
| - ca_layer_tree_.reset(new BrowserCompositorCALayerTreeMac);
|
| - ca_layer_tree_->SetView(this);
|
| +BrowserCompositorMac::BrowserCompositorMac()
|
| + : compositor_(
|
| + accelerated_widget_mac_.accelerated_widget(),
|
| + content::GetContextFactory(),
|
| + RenderWidgetResizeHelper::Get()->task_runner()) {
|
| + compositor_.SetVisible(false);
|
| +}
|
| +
|
| +// static
|
| +void BrowserCompositorMac::AcquireCompositor(
|
| + BrowserCompositorMac** compositor) {
|
| + if (g_recyclable_browser_compositor.Get())
|
| + *compositor = g_recyclable_browser_compositor.Get().release();
|
| + else
|
| + *compositor = new BrowserCompositorMac;
|
| }
|
|
|
| -BrowserCompositorViewMac::~BrowserCompositorViewMac() {
|
| - // Make this BrowserCompositorCALayerTreeMac recyclable for future instances.
|
| - ca_layer_tree_->ResetView();
|
| - g_recyclable_ca_layer_tree.Get() = ca_layer_tree_.Pass();
|
| +// static
|
| +void BrowserCompositorMac::ReleaseCompositor(
|
| + BrowserCompositorMac** compositor) {
|
| + // Make this BrowserCompositorMac recyclable for future instances.
|
| + g_recyclable_browser_compositor.Get().reset(*compositor);
|
| + *compositor = NULL;
|
|
|
| // If there are no placeholders allocated, destroy the recyclable
|
| - // BrowserCompositorCALayerTreeMac that we just populated.
|
| + // BrowserCompositorMac that we just populated.
|
| if (!g_placeholder_count)
|
| - g_recyclable_ca_layer_tree.Get().reset();
|
| -}
|
| -
|
| -ui::Compositor* BrowserCompositorViewMac::GetCompositor() const {
|
| - DCHECK(ca_layer_tree_);
|
| - return ca_layer_tree_->compositor();
|
| + g_recyclable_browser_compositor.Get().reset();
|
| }
|
|
|
| -bool BrowserCompositorViewMac::HasFrameOfSize(
|
| - const gfx::Size& dip_size) const {
|
| - if (ca_layer_tree_)
|
| - return ca_layer_tree_->HasFrameOfSize(dip_size);
|
| - return false;
|
| +ui::Compositor* BrowserCompositorMac::compositor() {
|
| + return &compositor_;
|
| }
|
|
|
| -void BrowserCompositorViewMac::BeginPumpingFrames() {
|
| - if (ca_layer_tree_)
|
| - ca_layer_tree_->BeginPumpingFrames();
|
| +AcceleratedWidgetMac*
|
| +BrowserCompositorMac::accelerated_widget_mac() {
|
| + return &accelerated_widget_mac_;
|
| }
|
|
|
| -void BrowserCompositorViewMac::EndPumpingFrames() {
|
| - if (ca_layer_tree_)
|
| - ca_layer_tree_->EndPumpingFrames();
|
| -}
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// BrowserCompositorViewPlaceholderMac
|
| +// BrowserCompositorMacPlaceholder
|
|
|
| -BrowserCompositorViewPlaceholderMac::BrowserCompositorViewPlaceholderMac() {
|
| +BrowserCompositorMacPlaceholder::BrowserCompositorMacPlaceholder() {
|
| g_placeholder_count += 1;
|
| }
|
|
|
| -BrowserCompositorViewPlaceholderMac::~BrowserCompositorViewPlaceholderMac() {
|
| +BrowserCompositorMacPlaceholder::~BrowserCompositorMacPlaceholder() {
|
| DCHECK_GT(g_placeholder_count, 0u);
|
| g_placeholder_count -= 1;
|
|
|
| // If there are no placeholders allocated, destroy the recyclable
|
| - // BrowserCompositorCALayerTreeMac.
|
| + // BrowserCompositorMac.
|
| if (!g_placeholder_count)
|
| - g_recyclable_ca_layer_tree.Get().reset();
|
| + g_recyclable_browser_compositor.Get().reset();
|
| }
|
|
|
| } // namespace content
|
|
|