Index: content/browser/renderer_host/compositor_impl_android.cc |
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc |
index e29ce82e6ba1ad589d268da1329a8ca40ba4df4b..babed85d6ef19e8f65e3b4e190a33eaa0015e74b 100644 |
--- a/content/browser/renderer_host/compositor_impl_android.cc |
+++ b/content/browser/renderer_host/compositor_impl_android.cc |
@@ -74,14 +74,15 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface { |
public: |
OutputSurfaceWithoutParent( |
const scoped_refptr<ContextProviderCommandBuffer>& context_provider, |
- base::WeakPtr<CompositorImpl> compositor_impl) |
+ const base::Callback<void(gpu::Capabilities)>& |
+ populate_gpu_capabilities_callback) |
: cc::OutputSurface(context_provider), |
+ populate_gpu_capabilities_callback_(populate_gpu_capabilities_callback), |
swap_buffers_completion_callback_( |
base::Bind(&OutputSurfaceWithoutParent::OnSwapBuffersCompleted, |
base::Unretained(this))) { |
capabilities_.adjust_deadline_for_parent = false; |
capabilities_.max_frames_pending = 2; |
- compositor_impl_ = compositor_impl; |
} |
void SwapBuffers(cc::CompositorFrame* frame) override { |
@@ -99,7 +100,7 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface { |
GetCommandBufferProxy()->SetSwapBuffersCompletionCallback( |
swap_buffers_completion_callback_.callback()); |
- compositor_impl_->PopulateGpuCapabilities( |
+ populate_gpu_capabilities_callback_.Run( |
context_provider_->ContextCapabilities().gpu); |
return true; |
@@ -122,11 +123,10 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface { |
OutputSurface::OnSwapBuffersComplete(); |
} |
+ base::Callback<void(gpu::Capabilities)> populate_gpu_capabilities_callback_; |
base::CancelableCallback<void(const std::vector<ui::LatencyInfo>&, |
gfx::SwapResult)> |
swap_buffers_completion_callback_; |
- |
- base::WeakPtr<CompositorImpl> compositor_impl_; |
}; |
static bool g_initialized = false; |
@@ -643,8 +643,9 @@ void CompositorImpl::CreateOutputSurface() { |
DCHECK(context_provider.get()); |
scoped_ptr<cc::OutputSurface> real_output_surface( |
- new OutputSurfaceWithoutParent(context_provider, |
- weak_factory_.GetWeakPtr())); |
+ new OutputSurfaceWithoutParent( |
+ context_provider, base::Bind(&CompositorImpl::PopulateGpuCapabilities, |
+ weak_factory_.GetWeakPtr()))); |
no sievers
2015/06/09 22:48:30
The OutputSurface should not be able to outlive th
sunnyps
2015/06/09 23:39:35
Done.
|
cc::SurfaceManager* manager = GetSurfaceManager(); |
if (manager) { |