1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // Copyright 2018 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_IPC_IN_PROCESS_GPU_THREAD_HOLDER_H_
- #define GPU_IPC_IN_PROCESS_GPU_THREAD_HOLDER_H_
- #include <memory>
- #include "base/component_export.h"
- #include "base/memory/scoped_refptr.h"
- #include "base/threading/thread.h"
- #include "gpu/command_buffer/service/shared_context_state.h"
- #include "gpu/config/gpu_feature_info.h"
- #include "gpu/config/gpu_preferences.h"
- #include "gpu/ipc/gpu_in_process_thread_service.h"
- namespace gpu {
- class CommandBufferTaskExecutor;
- class MailboxManager;
- class Scheduler;
- class SharedImageManager;
- class SyncPointManager;
- // Starts a GPU thread and task executor that runs tasks on the GPU thread. This
- // isn't a full GPU thread implementation and should only be used in tests. A
- // default GpuPreferences and GpuFeatureInfo will be constructed from the
- // command line when this class is first created.
- class COMPONENT_EXPORT(GPU_THREAD_HOLDER) InProcessGpuThreadHolder
- : public base::Thread,
- public GpuInProcessThreadServiceDelegate {
- public:
- InProcessGpuThreadHolder();
- InProcessGpuThreadHolder(const InProcessGpuThreadHolder&) = delete;
- InProcessGpuThreadHolder& operator=(const InProcessGpuThreadHolder&) = delete;
- ~InProcessGpuThreadHolder() override;
- // Returns GpuPreferences that can be modified before GetTaskExecutor() is
- // called for the first time.
- GpuPreferences* GetGpuPreferences();
- // Returns GpuFeatureInfo that can be modified before GetTaskExecutor() is
- // called for the first time.
- GpuFeatureInfo* GetGpuFeatureInfo();
- // Returns a task executor that runs commands on the GPU thread. The task
- // executor will be created the first time this is called.
- CommandBufferTaskExecutor* GetTaskExecutor();
- // gpu::GpuInProcessThreadServiceDelegate implementation:
- scoped_refptr<gpu::SharedContextState> GetSharedContextState() override;
- scoped_refptr<gl::GLShareGroup> GetShareGroup() override;
- private:
- void InitializeOnGpuThread(base::WaitableEvent* completion);
- void DeleteOnGpuThread();
- GpuPreferences gpu_preferences_;
- GpuFeatureInfo gpu_feature_info_;
- scoped_refptr<gl::GLShareGroup> share_group_;
- scoped_refptr<gl::GLSurface> surface_;
- scoped_refptr<gl::GLContext> context_;
- scoped_refptr<SharedContextState> context_state_;
- std::unique_ptr<SyncPointManager> sync_point_manager_;
- std::unique_ptr<Scheduler> scheduler_;
- std::unique_ptr<MailboxManager> mailbox_manager_;
- std::unique_ptr<SharedImageManager> shared_image_manager_;
- std::unique_ptr<CommandBufferTaskExecutor> task_executor_;
- };
- } // namespace gpu
- #endif // GPU_IPC_IN_PROCESS_GPU_THREAD_HOLDER_H_
|