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

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

Issue 2493913002: Mus: Move InProcessCommandBuffer and GLInProcessContext to gpu/ipc (Closed)
Patch Set: Fixed casts on windows Created 4 years, 1 month 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
« no previous file with comments | « gpu/command_buffer/service/BUILD.gn ('k') | gpu/command_buffer/service/in_process_command_buffer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/in_process_command_buffer.h
diff --git a/gpu/command_buffer/service/in_process_command_buffer.h b/gpu/command_buffer/service/in_process_command_buffer.h
deleted file mode 100644
index ad98b6eb7f479b722e5ba0cfb90b0a386fcc2c3e..0000000000000000000000000000000000000000
--- a/gpu/command_buffer/service/in_process_command_buffer.h
+++ /dev/null
@@ -1,315 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
-#define GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <vector>
-
-#include "base/atomic_sequence_num.h"
-#include "base/callback.h"
-#include "base/compiler_specific.h"
-#include "base/containers/scoped_ptr_hash_map.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "base/synchronization/lock.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/thread.h"
-#include "gpu/command_buffer/client/gpu_control.h"
-#include "gpu/command_buffer/common/command_buffer.h"
-#include "gpu/command_buffer/service/gpu_preferences.h"
-#include "gpu/config/gpu_driver_bug_workarounds.h"
-#include "gpu/gpu_export.h"
-#include "ui/gfx/gpu_memory_buffer.h"
-#include "ui/gfx/native_widget_types.h"
-#include "ui/gl/gl_surface.h"
-#include "ui/gl/gpu_preference.h"
-
-namespace base {
-class SequenceChecker;
-}
-
-namespace gl {
-class GLContext;
-class GLShareGroup;
-class GLSurface;
-}
-
-namespace gfx {
-class Size;
-}
-
-namespace gpu {
-class SyncPointClient;
-class SyncPointOrderData;
-class SyncPointManager;
-
-namespace gles2 {
-struct ContextCreationAttribHelper;
-class FramebufferCompletenessCache;
-class GLES2Decoder;
-class MailboxManager;
-class ProgramCache;
-class ShaderTranslatorCache;
-}
-
-class CommandBufferServiceBase;
-class GpuMemoryBufferManager;
-class CommandExecutor;
-class ImageFactory;
-class TransferBufferManagerInterface;
-
-// This class provides a thread-safe interface to the global GPU service (for
-// example GPU thread) when being run in single process mode.
-// However, the behavior for accessing one context (i.e. one instance of this
-// class) from different client threads is undefined.
-class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer,
- public GpuControl {
- public:
- class Service;
- explicit InProcessCommandBuffer(const scoped_refptr<Service>& service);
- ~InProcessCommandBuffer() override;
-
- // If |surface| is not null, use it directly; in this case, the command
- // buffer gpu thread must be the same as the client thread. Otherwise create
- // a new GLSurface.
- bool Initialize(scoped_refptr<gl::GLSurface> surface,
- bool is_offscreen,
- gfx::AcceleratedWidget window,
- const gles2::ContextCreationAttribHelper& attribs,
- InProcessCommandBuffer* share_group,
- GpuMemoryBufferManager* gpu_memory_buffer_manager,
- ImageFactory* image_factory,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner);
-
- // CommandBuffer implementation:
- State GetLastState() override;
- int32_t GetLastToken() override;
- void Flush(int32_t put_offset) override;
- void OrderingBarrier(int32_t put_offset) override;
- void WaitForTokenInRange(int32_t start, int32_t end) override;
- void WaitForGetOffsetInRange(int32_t start, int32_t end) override;
- void SetGetBuffer(int32_t shm_id) override;
- scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
- int32_t* id) override;
- void DestroyTransferBuffer(int32_t id) override;
- gpu::error::Error GetLastError() override;
-
- // GpuControl implementation:
- // NOTE: The GpuControlClient will be called on the client thread.
- void SetGpuControlClient(GpuControlClient*) override;
- gpu::Capabilities GetCapabilities() override;
- int32_t CreateImage(ClientBuffer buffer,
- size_t width,
- size_t height,
- unsigned internalformat) override;
- void DestroyImage(int32_t id) override;
- int32_t CreateGpuMemoryBufferImage(size_t width,
- size_t height,
- unsigned internalformat,
- unsigned usage) override;
- void SignalQuery(uint32_t query_id, const base::Closure& callback) override;
- void SetLock(base::Lock*) override;
- void EnsureWorkVisible() override;
- CommandBufferNamespace GetNamespaceID() const override;
- CommandBufferId GetCommandBufferID() const override;
- int32_t GetExtraCommandBufferData() const override;
- uint64_t GenerateFenceSyncRelease() override;
- bool IsFenceSyncRelease(uint64_t release) override;
- bool IsFenceSyncFlushed(uint64_t release) override;
- bool IsFenceSyncFlushReceived(uint64_t release) override;
- void SignalSyncToken(const SyncToken& sync_token,
- const base::Closure& callback) override;
- bool CanWaitUnverifiedSyncToken(const SyncToken* sync_token) override;
-
- // The serializer interface to the GPU service (i.e. thread).
- class Service {
- public:
- Service();
- Service(const gpu::GpuPreferences& gpu_preferences);
- virtual ~Service();
-
- virtual void AddRef() const = 0;
- virtual void Release() const = 0;
-
- // Queues a task to run as soon as possible.
- virtual void ScheduleTask(const base::Closure& task) = 0;
-
- // Schedules |callback| to run at an appropriate time for performing delayed
- // work.
- virtual void ScheduleDelayedWork(const base::Closure& task) = 0;
-
- virtual bool UseVirtualizedGLContexts() = 0;
- virtual scoped_refptr<gles2::ShaderTranslatorCache>
- shader_translator_cache() = 0;
- virtual scoped_refptr<gles2::FramebufferCompletenessCache>
- framebuffer_completeness_cache() = 0;
- virtual SyncPointManager* sync_point_manager() = 0;
- const GpuPreferences& gpu_preferences();
- const GpuDriverBugWorkarounds& gpu_driver_bug_workarounds();
- scoped_refptr<gl::GLShareGroup> share_group();
- scoped_refptr<gles2::MailboxManager> mailbox_manager();
- gpu::gles2::ProgramCache* program_cache();
-
- private:
- const GpuPreferences gpu_preferences_;
- const GpuDriverBugWorkarounds gpu_driver_bug_workarounds_;
- scoped_refptr<gl::GLShareGroup> share_group_;
- scoped_refptr<gles2::MailboxManager> mailbox_manager_;
- std::unique_ptr<gpu::gles2::ProgramCache> program_cache_;
- };
-
- private:
- struct InitializeOnGpuThreadParams {
- bool is_offscreen;
- gfx::AcceleratedWidget window;
- const gles2::ContextCreationAttribHelper& attribs;
- gpu::Capabilities* capabilities; // Ouptut.
- InProcessCommandBuffer* context_group;
- ImageFactory* image_factory;
-
- InitializeOnGpuThreadParams(
- bool is_offscreen,
- gfx::AcceleratedWidget window,
- const gles2::ContextCreationAttribHelper& attribs,
- gpu::Capabilities* capabilities,
- InProcessCommandBuffer* share_group,
- ImageFactory* image_factory)
- : is_offscreen(is_offscreen),
- window(window),
- attribs(attribs),
- capabilities(capabilities),
- context_group(share_group),
- image_factory(image_factory) {}
- };
-
- bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params);
- void Destroy();
- bool DestroyOnGpuThread();
- void FlushOnGpuThread(int32_t put_offset, uint32_t order_num);
- void ScheduleDelayedWorkOnGpuThread();
- bool MakeCurrent();
- base::Closure WrapCallback(const base::Closure& callback);
- State GetStateFast();
- void QueueTask(const base::Closure& task) { service_->ScheduleTask(task); }
- void CheckSequencedThread();
- void FenceSyncReleaseOnGpuThread(uint64_t release);
- bool WaitFenceSyncOnGpuThread(gpu::CommandBufferNamespace namespace_id,
- gpu::CommandBufferId command_buffer_id,
- uint64_t release);
- void DescheduleUntilFinishedOnGpuThread();
- void RescheduleAfterFinishedOnGpuThread();
- void SignalSyncTokenOnGpuThread(const SyncToken& sync_token,
- const base::Closure& callback);
- void SignalQueryOnGpuThread(unsigned query_id, const base::Closure& callback);
- void DestroyTransferBufferOnGpuThread(int32_t id);
- void CreateImageOnGpuThread(int32_t id,
- const gfx::GpuMemoryBufferHandle& handle,
- const gfx::Size& size,
- gfx::BufferFormat format,
- uint32_t internalformat,
- uint32_t order_num,
- uint64_t fence_sync);
- void DestroyImageOnGpuThread(int32_t id);
- void SetGetBufferOnGpuThread(int32_t shm_id, base::WaitableEvent* completion);
-
- // Callbacks on the gpu thread.
- void OnContextLostOnGpuThread();
- void PumpCommandsOnGpuThread();
- void PerformDelayedWorkOnGpuThread();
- // Callback implementations on the client thread.
- void OnContextLost();
-
- const CommandBufferId command_buffer_id_;
-
- // Members accessed on the gpu thread (possibly with the exception of
- // creation):
- scoped_refptr<base::SingleThreadTaskRunner> origin_task_runner_;
- scoped_refptr<TransferBufferManagerInterface> transfer_buffer_manager_;
- std::unique_ptr<CommandExecutor> executor_;
- std::unique_ptr<gles2::GLES2Decoder> decoder_;
- scoped_refptr<gl::GLContext> context_;
- scoped_refptr<gl::GLSurface> surface_;
- scoped_refptr<SyncPointOrderData> sync_point_order_data_;
- std::unique_ptr<SyncPointClient> sync_point_client_;
- base::Closure context_lost_callback_;
- // Used to throttle PerformDelayedWorkOnGpuThread.
- bool delayed_work_pending_;
- ImageFactory* image_factory_;
-
- // Members accessed on the client thread:
- GpuControlClient* gpu_control_client_;
-#if DCHECK_IS_ON()
- bool context_lost_;
-#endif
- State last_state_;
- int32_t last_put_offset_;
- gpu::Capabilities capabilities_;
- GpuMemoryBufferManager* gpu_memory_buffer_manager_;
- base::AtomicSequenceNumber next_image_id_;
- uint64_t next_fence_sync_release_;
- uint64_t flushed_fence_sync_release_;
-
- // Accessed on both threads:
- std::unique_ptr<CommandBufferServiceBase> command_buffer_;
- base::Lock command_buffer_lock_;
- base::WaitableEvent flush_event_;
- scoped_refptr<Service> service_;
- State state_after_last_flush_;
- base::Lock state_after_last_flush_lock_;
- scoped_refptr<gl::GLShareGroup> gl_share_group_;
- base::WaitableEvent fence_sync_wait_event_;
-
- // Only used with explicit scheduling and the gpu thread is the same as
- // the client thread.
- std::unique_ptr<base::SequenceChecker> sequence_checker_;
-
- base::WeakPtr<InProcessCommandBuffer> client_thread_weak_ptr_;
- base::WeakPtr<InProcessCommandBuffer> gpu_thread_weak_ptr_;
- base::WeakPtrFactory<InProcessCommandBuffer> client_thread_weak_ptr_factory_;
- base::WeakPtrFactory<InProcessCommandBuffer> gpu_thread_weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(InProcessCommandBuffer);
-};
-
-// Default Service class when a null service is used.
-class GPU_EXPORT GpuInProcessThread
- : public base::Thread,
- public NON_EXPORTED_BASE(InProcessCommandBuffer::Service),
- public base::RefCountedThreadSafe<GpuInProcessThread> {
- public:
- explicit GpuInProcessThread(SyncPointManager* sync_point_manager);
-
- void AddRef() const override;
- void Release() const override;
- void ScheduleTask(const base::Closure& task) override;
- void ScheduleDelayedWork(const base::Closure& callback) override;
- bool UseVirtualizedGLContexts() override;
- scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
- override;
- scoped_refptr<gles2::FramebufferCompletenessCache>
- framebuffer_completeness_cache() override;
- SyncPointManager* sync_point_manager() override;
-
- private:
- ~GpuInProcessThread() override;
- friend class base::RefCountedThreadSafe<GpuInProcessThread>;
-
- SyncPointManager* sync_point_manager_; // Non-owning.
- scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
- scoped_refptr<gpu::gles2::FramebufferCompletenessCache>
- framebuffer_completeness_cache_;
- DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread);
-};
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
« no previous file with comments | « gpu/command_buffer/service/BUILD.gn ('k') | gpu/command_buffer/service/in_process_command_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698