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

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 1231263003: Share SyncPointManager between ipc and in-process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove forward decl/includes Created 5 years, 5 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: gpu/command_buffer/service/in_process_command_buffer.cc
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index d50405415b44bb540b25d14f2ba18b1cc2315d23..c85ef0db950fee3607a95580b05b094c97ae7593 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -17,7 +17,6 @@
#include "base/sequence_checker.h"
#include "base/single_thread_task_runner.h"
#include "base/thread_task_runner_handle.h"
-#include "base/threading/thread.h"
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
#include "gpu/command_buffer/common/value_state.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
@@ -60,61 +59,11 @@ static void RunTaskWithResult(base::Callback<T(void)> task,
completion->Signal();
}
-class GpuInProcessThread
- : public base::Thread,
- public InProcessCommandBuffer::Service,
- public base::RefCountedThreadSafe<GpuInProcessThread> {
- public:
- GpuInProcessThread();
-
- void AddRef() const override {
- base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
- }
- void Release() const override {
- base::RefCountedThreadSafe<GpuInProcessThread>::Release();
- }
-
- void ScheduleTask(const base::Closure& task) override;
- void ScheduleIdleWork(const base::Closure& callback) override;
- bool UseVirtualizedGLContexts() override { return false; }
- scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
- override;
-
- private:
- ~GpuInProcessThread() override;
- friend class base::RefCountedThreadSafe<GpuInProcessThread>;
-
- scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
- DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread);
-};
-
-GpuInProcessThread::GpuInProcessThread() : base::Thread("GpuThread") {
- Start();
-}
-
-GpuInProcessThread::~GpuInProcessThread() {
- Stop();
-}
-
-void GpuInProcessThread::ScheduleTask(const base::Closure& task) {
- task_runner()->PostTask(FROM_HERE, task);
-}
-
-void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) {
- // Match delay with GpuCommandBufferStub.
- task_runner()->PostDelayedTask(FROM_HERE, callback,
- base::TimeDelta::FromMilliseconds(2));
-}
-
-scoped_refptr<gles2::ShaderTranslatorCache>
-GpuInProcessThread::shader_translator_cache() {
- if (!shader_translator_cache_.get())
- shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache;
- return shader_translator_cache_;
-}
-
struct GpuInProcessThreadHolder {
- GpuInProcessThreadHolder() : gpu_thread(new GpuInProcessThread) {}
+ GpuInProcessThreadHolder()
+ : sync_point_manager(new SyncPointManager(false)),
+ gpu_thread(new GpuInProcessThread(sync_point_manager.get())) {}
+ scoped_ptr<SyncPointManager> sync_point_manager;
scoped_refptr<InProcessCommandBuffer::Service> gpu_thread;
};
@@ -130,16 +79,6 @@ class ScopedEvent {
base::WaitableEvent* event_;
};
-// This wrapper adds the WaitSyncPoint which allows waiting on a sync point
-// on the service thread, implemented using a condition variable.
-struct SyncPointManagerWrapper {
- SyncPointManagerWrapper() : manager(SyncPointManager::Create(true)) {}
- const scoped_refptr<SyncPointManager> manager;
-};
-
-base::LazyInstance<SyncPointManagerWrapper> g_sync_point_manager =
- LAZY_INSTANCE_INITIALIZER;
-
base::SharedMemoryHandle ShareToGpuThread(
base::SharedMemoryHandle source_handle) {
return base::SharedMemory::DuplicateHandle(source_handle);
@@ -784,7 +723,7 @@ int32 InProcessCommandBuffer::CreateGpuMemoryBufferImage(
}
uint32 InProcessCommandBuffer::InsertSyncPoint() {
- uint32 sync_point = g_sync_point_manager.Get().manager->GenerateSyncPoint();
+ uint32 sync_point = service_->sync_point_manager()->GenerateSyncPoint();
QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread,
base::Unretained(this),
sync_point));
@@ -792,7 +731,7 @@ uint32 InProcessCommandBuffer::InsertSyncPoint() {
}
uint32 InProcessCommandBuffer::InsertFutureSyncPoint() {
- return g_sync_point_manager.Get().manager->GenerateSyncPoint();
+ return service_->sync_point_manager()->GenerateSyncPoint();
}
void InProcessCommandBuffer::RetireSyncPoint(uint32 sync_point) {
@@ -813,7 +752,7 @@ void InProcessCommandBuffer::RetireSyncPointOnGpuThread(uint32 sync_point) {
if (make_current_success)
mailbox_manager->PushTextureUpdates(sync_point);
}
- g_sync_point_manager.Get().manager->RetireSyncPoint(sync_point);
+ service_->sync_point_manager()->RetireSyncPoint(sync_point);
}
void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
@@ -826,7 +765,7 @@ void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
}
bool InProcessCommandBuffer::WaitSyncPointOnGpuThread(unsigned sync_point) {
- g_sync_point_manager.Get().manager->ThreadedWaitSyncPoint(sync_point);
+ service_->sync_point_manager()->WaitSyncPoint(sync_point);
gles2::MailboxManager* mailbox_manager =
decoder_->GetContextGroup()->mailbox_manager();
mailbox_manager->PullTextureUpdates(sync_point);
@@ -836,8 +775,7 @@ bool InProcessCommandBuffer::WaitSyncPointOnGpuThread(unsigned sync_point) {
void InProcessCommandBuffer::SignalSyncPointOnGpuThread(
unsigned sync_point,
const base::Closure& callback) {
- g_sync_point_manager.Get().manager->AddSyncPointCallback(sync_point,
- callback);
+ service_->sync_point_manager()->AddSyncPointCallback(sync_point, callback);
}
void InProcessCommandBuffer::SignalQuery(unsigned query_id,
@@ -950,4 +888,45 @@ InProcessCommandBuffer::GetSurfaceTexture(uint32 stream_id) {
}
#endif
+GpuInProcessThread::GpuInProcessThread(SyncPointManager* sync_point_manager)
+ : base::Thread("GpuThread"), sync_point_manager_(sync_point_manager) {
+ Start();
+}
+
+GpuInProcessThread::~GpuInProcessThread() {
+ Stop();
+}
+
+void GpuInProcessThread::AddRef() const {
+ base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
+}
+void GpuInProcessThread::Release() const {
+ base::RefCountedThreadSafe<GpuInProcessThread>::Release();
+}
+
+void GpuInProcessThread::ScheduleTask(const base::Closure& task) {
+ task_runner()->PostTask(FROM_HERE, task);
+}
+
+void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) {
+ // Match delay with GpuCommandBufferStub.
+ task_runner()->PostDelayedTask(FROM_HERE, callback,
+ base::TimeDelta::FromMilliseconds(2));
+}
+
+bool GpuInProcessThread::UseVirtualizedGLContexts() {
+ return false;
+}
+
+scoped_refptr<gles2::ShaderTranslatorCache>
+GpuInProcessThread::shader_translator_cache() {
+ if (!shader_translator_cache_.get())
+ shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache;
+ return shader_translator_cache_;
+}
+
+SyncPointManager* GpuInProcessThread::sync_point_manager() {
+ return sync_point_manager_;
+}
+
} // namespace gpu
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | gpu/command_buffer/service/sync_point_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698