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

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

Issue 20017005: gpu: Refactor GpuMemoryBuffer framework for multi-process support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 4 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 ccbfb32a50455f2eed340f03c0a4739e9a22e503..2f949c901c2fb9be37a3d82973766fe96dfe525c 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -22,10 +22,10 @@
#include "base/message_loop/message_loop_proxy.h"
#include "base/sequence_checker.h"
#include "base/threading/thread.h"
-#include "gpu/command_buffer/common/id_allocator.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gl_context_virtual.h"
+#include "gpu/command_buffer/service/gpu_control_service.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
#include "gpu/command_buffer/service/image_manager.h"
#include "gpu/command_buffer/service/transfer_buffer_manager.h"
@@ -43,6 +43,7 @@ static base::LazyInstance<std::set<InProcessCommandBuffer*> >
static bool g_use_virtualized_gl_context = false;
static bool g_uses_explicit_scheduling = false;
+static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL;
template <typename T>
static void RunTaskWithResult(base::Callback<T(void)> task,
@@ -390,6 +391,10 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
&GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get())));
command_buffer_ = command_buffer.Pass();
+ gpu_control_.reset(
+ new GpuControlService(decoder_->GetContextGroup()->image_manager(),
+ g_gpu_memory_buffer_factory));
+
decoder_->set_engine(gpu_scheduler_.get());
if (!surface_) {
@@ -496,55 +501,6 @@ void InProcessCommandBuffer::CheckSequencedThread() {
sequence_checker_->CalledOnValidSequencedThread());
}
-unsigned int InProcessCommandBuffer::CreateImageForGpuMemoryBuffer(
- gfx::GpuMemoryBufferHandle buffer,
- gfx::Size size) {
- CheckSequencedThread();
- unsigned int image_id;
- {
- // TODO: ID allocation should go through CommandBuffer
- base::AutoLock lock(command_buffer_lock_);
- gles2::ContextGroup* group = decoder_->GetContextGroup();
- image_id =
- group->GetIdAllocator(gles2::id_namespaces::kImages)->AllocateID();
- }
- base::Closure image_task =
- base::Bind(&InProcessCommandBuffer::CreateImageOnGpuThread,
- base::Unretained(this), buffer, size, image_id);
- QueueTask(image_task);
- return image_id;
-}
-
-void InProcessCommandBuffer::CreateImageOnGpuThread(
- gfx::GpuMemoryBufferHandle buffer,
- gfx::Size size,
- unsigned int image_id) {
- CheckSequencedThread();
- scoped_refptr<gfx::GLImage> gl_image =
- gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer, size);
- decoder_->GetContextGroup()->image_manager()->AddImage(gl_image, image_id);
-}
-
-void InProcessCommandBuffer::RemoveImage(unsigned int image_id) {
- CheckSequencedThread();
- {
- // TODO: ID allocation should go through CommandBuffer
- base::AutoLock lock(command_buffer_lock_);
- gles2::ContextGroup* group = decoder_->GetContextGroup();
- group->GetIdAllocator(gles2::id_namespaces::kImages)->FreeID(image_id);
- }
- base::Closure image_manager_task =
- base::Bind(&InProcessCommandBuffer::RemoveImageOnGpuThread,
- base::Unretained(this),
- image_id);
- QueueTask(image_manager_task);
-}
-
-void InProcessCommandBuffer::RemoveImageOnGpuThread(unsigned int image_id) {
- CheckSequencedThread();
- decoder_->GetContextGroup()->image_manager()->RemoveImage(image_id);
-}
-
void InProcessCommandBuffer::OnContextLost() {
CheckSequencedThread();
if (!context_lost_callback_.is_null()) {
@@ -680,6 +636,28 @@ void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
QueueTask(WrapCallback(callback));
}
+gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
+ size_t width,
+ size_t height,
+ unsigned internalformat,
+ int32* id) {
+ CheckSequencedThread();
+ base::AutoLock lock(command_buffer_lock_);
+ return gpu_control_->CreateGpuMemoryBuffer(width,
+ height,
+ internalformat,
+ id);
+}
+
+void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
+ CheckSequencedThread();
+ base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer,
+ base::Unretained(gpu_control_.get()),
+ id);
+
+ QueueTask(task);
+}
+
gpu::error::Error InProcessCommandBuffer::GetLastError() {
CheckSequencedThread();
return last_state_.error;
@@ -753,4 +731,10 @@ void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() {
g_gpu_queue.Get().RunTasks();
}
+// static
+void InProcessCommandBuffer::SetGpuMemoryBufferFactory(
+ GpuMemoryBufferFactory* factory) {
+ g_gpu_memory_buffer_factory = factory;
+}
+
} // namespace gpu
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | gpu/command_buffer/tests/gl_gpu_memory_buffer_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698