Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1823)

Unified Diff: content/common/gpu/client/command_buffer_proxy_impl.h

Issue 654223006: Cleanup GpuMemoryBuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/client/command_buffer_proxy_impl.h
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.h b/content/common/gpu/client/command_buffer_proxy_impl.h
index ea3974029cd1f820de57afbd8895504bed5ed174..13a11acc85db5c0a9b0af284fa07e2aee82ea587 100644
--- a/content/common/gpu/client/command_buffer_proxy_impl.h
+++ b/content/common/gpu/client/command_buffer_proxy_impl.h
@@ -150,12 +150,50 @@ class CommandBufferProxyImpl
return shared_state_shm_->handle();
}
+ void WaitForPendingGpuMemoryBufferUsageToComplete(
+ const base::Closure& callback);
+
private:
typedef std::map<int32, scoped_refptr<gpu::Buffer> > TransferBufferMap;
typedef base::hash_map<uint32, base::Closure> SignalTaskMap;
typedef base::ScopedPtrHashMap<int32, gfx::GpuMemoryBuffer>
GpuMemoryBufferMap;
+ struct CallbackMessageLoopPair {
+ CallbackMessageLoopPair(const base::Closure& callback,
+ scoped_refptr<base::MessageLoopProxy> message_loop);
+ ~CallbackMessageLoopPair();
+ base::Closure callback;
+ scoped_refptr<base::MessageLoopProxy> message_loop;
reveman 2014/10/23 19:46:43 I just realized that GpuChannelHost::MessageFilter
+ };
+
+ class GpuMemoryBufferUsageTracker
+ : public base::RefCountedThreadSafe<GpuMemoryBufferUsageTracker>,
+ public DeletionObserver {
+ public:
+ GpuMemoryBufferUsageTracker();
+
+ // DeletionObserver implementation:
+ void OnWillDeleteImpl() override;
+
+ uint32 AddUsage(const CallbackMessageLoopPair& task);
+ void UsageCompleted(uint32 task_id);
+
+ private:
+ typedef base::hash_map<uint32, CallbackMessageLoopPair>
+ GpuMemoryBufferUsageCompletedMap;
+ friend class base::RefCountedThreadSafe<GpuMemoryBufferUsageTracker>;
+ ~GpuMemoryBufferUsageTracker();
+
+ void UsageCompletedOnCaller(uint32 task_id);
+
+ uint32 next_gpu_memory_buffer_usage_id_;
+ GpuMemoryBufferUsageCompletedMap gpu_memory_buffer_tasks_;
+ mutable base::Lock gpu_memory_buffer_task_lock_;
+ };
+
+ void WaitForPendingGpuMemoryBufferUsageToCompleteOnMain(uint32 usage_id);
+
// Send an IPC message over the GPU channel. This is private to fully
// encapsulate the channel; all callers of this function must explicitly
// verify that the context has not been lost.
@@ -210,6 +248,9 @@ class CommandBufferProxyImpl
SwapBuffersCompletionCallback swap_buffers_completion_callback_;
+ scoped_refptr<base::MessageLoopProxy> main_loop_proxy_;
+ scoped_refptr<GpuMemoryBufferUsageTracker> tracker_;
+
DISALLOW_COPY_AND_ASSIGN(CommandBufferProxyImpl);
};
« no previous file with comments | « content/browser/gpu/browser_gpu_channel_host_factory.cc ('k') | content/common/gpu/client/command_buffer_proxy_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698