blob: f6f51a1ab4f2f209906d7ac89b4a6698aeaeb463 [file] [log] [blame]
fsamueledc0c2c2016-11-18 22:28:041// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef GPU_IPC_GPU_IN_PROCESS_THREAD_SERVICE_H_
6#define GPU_IPC_GPU_IN_PROCESS_THREAD_SERVICE_H_
7
Jonathan Backer968c78112019-01-23 20:00:578#include <memory>
9
fsamuel4af1869e2016-11-22 21:41:3410#include "base/compiler_specific.h"
Gabriel Charette5ff87ce2017-05-16 18:03:4511#include "base/single_thread_task_runner.h"
fsamueledc0c2c2016-11-18 22:28:0412#include "gpu/command_buffer/service/mailbox_manager.h"
kylechar2fdaa042018-07-03 17:36:2313#include "gpu/ipc/command_buffer_task_executor.h"
Antoine Labourec6176b2018-01-05 00:00:1014#include "gpu/ipc/gl_in_process_context_export.h"
fsamueledc0c2c2016-11-18 22:28:0415#include "gpu/ipc/in_process_command_buffer.h"
Brian Sheedybaa7414f2019-07-24 21:48:4716#include "gpu/ipc/single_task_sequence.h"
fsamueledc0c2c2016-11-18 22:28:0417#include "ui/gl/gl_share_group.h"
18
19namespace gpu {
Sunny Sachanandani1405fd6a2018-08-30 20:11:5720class Scheduler;
Brian Sheedybaa7414f2019-07-24 21:48:4721class SingleTaskSequence;
Sunny Sachanandani1405fd6a2018-08-30 20:11:5722
Jonathan Backer968c78112019-01-23 20:00:5723namespace gles2 {
24class ProgramCache;
25} // namespace gles2
26
fsamuel4af1869e2016-11-22 21:41:3427// Default Service class when no service is specified. GpuInProcessThreadService
28// is used by Mus and unit tests.
Antoine Labourec6176b2018-01-05 00:00:1029class GL_IN_PROCESS_CONTEXT_EXPORT GpuInProcessThreadService
Sunny Sachanandani1405fd6a2018-08-30 20:11:5730 : public CommandBufferTaskExecutor {
fsamueledc0c2c2016-11-18 22:28:0431 public:
32 GpuInProcessThreadService(
33 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
Sunny Sachanandani1405fd6a2018-08-30 20:11:5734 Scheduler* scheduler,
35 SyncPointManager* sync_point_manager,
36 MailboxManager* mailbox_manager,
Zhenyao Mo56b32be2017-08-25 22:59:3037 scoped_refptr<gl::GLShareGroup> share_group,
Eric Karl304eff12018-07-27 21:13:3538 gl::GLSurfaceFormat share_group_surface_format,
kylechar47df6302018-02-14 01:45:4839 const GpuFeatureInfo& gpu_feature_info,
Eric Karl06d7a5b2019-01-18 08:05:0140 const GpuPreferences& gpu_preferences,
Jonathan Backer968c78112019-01-23 20:00:5741 SharedImageManager* shared_image_manager,
Saman Samif82d6312019-05-09 17:43:1142 gles2::ProgramCache* program_cache,
43 scoped_refptr<SharedContextState> shared_context_state);
kylecharc0acb512019-03-13 14:03:3744 ~GpuInProcessThreadService() override;
fsamueledc0c2c2016-11-18 22:28:0445
Sunny Sachanandani1405fd6a2018-08-30 20:11:5746 // CommandBufferTaskExecutor implementation.
kylechard167a8662018-09-14 20:16:2947 bool ForceVirtualizedGLContexts() const override;
48 bool ShouldCreateMemoryTracker() const override;
Brian Sheedybaa7414f2019-07-24 21:48:4749 std::unique_ptr<SingleTaskSequence> CreateSequence() override;
Sunny Sachanandani1405fd6a2018-08-30 20:11:5750 void ScheduleOutOfOrderTask(base::OnceClosure task) override;
51 void ScheduleDelayedWork(base::OnceClosure task) override;
Bo Liuf0574fc2019-03-22 23:21:2152 void PostNonNestableToClient(base::OnceClosure callback) override;
fsamueledc0c2c2016-11-18 22:28:0453
54 private:
fsamueledc0c2c2016-11-18 22:28:0455 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
Sunny Sachanandani1405fd6a2018-08-30 20:11:5756 Scheduler* scheduler_;
fsamueledc0c2c2016-11-18 22:28:0457
58 DISALLOW_COPY_AND_ASSIGN(GpuInProcessThreadService);
59};
60
61} // namespace gpu
62
63#endif // GPU_IPC_GPU_IN_PROCESS_THREAD_SERVICE_H_