Chromium Code Reviews| 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" |
|
tapted
2014/11/20 05:38:54
is this unused in this file now?
ccameron
2014/11/20 21:33:51
Yup, gone.
|
| +#include "content/browser/renderer_host/render_widget_resize_helper.h" |
| #include "content/common/gpu/gpu_messages.h" |
|
tapted
2014/11/20 05:38:54
this might be unused too
ccameron
2014/11/20 21:33:51
Done.
|
| +#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()) |
|
tapted
2014/11/20 05:38:54
Maybe DCHECK(!*compositor) - some minor protection
ccameron
2014/11/20 21:33:51
Good point. Changed this to have a ::Create and ::
|
| + *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 |