1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
gpu / command_buffer / service / single_task_sequence.h [blame]
// Copyright 2019 The Chromium Authors
// 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_SINGLE_TASK_SEQUENCE_H_
#define GPU_COMMAND_BUFFER_SERVICE_SINGLE_TASK_SEQUENCE_H_
#include <memory>
#include <vector>
#include "base/functional/callback.h"
#include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/service/sequence_id.h"
#include "gpu/command_buffer/service/task_graph.h"
#include "gpu/gpu_gles2_export.h"
namespace gpu {
// Represents a single task execution sequence. Tasks posted to a sequence are
// run in order. Tasks across sequences should be synchronized using sync
// tokens. Destroying the sequence will drop tasks which haven't been executed
// yet.
class GPU_GLES2_EXPORT SingleTaskSequence {
public:
virtual ~SingleTaskSequence() {}
// Returns identifier used for identifying sync tokens with this sequence,
// and for scheduling.
virtual SequenceId GetSequenceId() = 0;
// Returns true if sequence should yield while running its current task.
virtual bool ShouldYield() = 0;
// Schedule a task with provided sync token dependencies and release.
// For scheduling from viz thread, due to limitations in Android WebView,
// ScheduleTask is only available to be called inside initialization,
// teardown, and DrawAndSwap.
// |report_callback| will be called on the same thread and before |task| runs.
virtual void ScheduleTask(
gpu::TaskCallback task,
std::vector<SyncToken> sync_token_fences,
const SyncToken& release,
ReportingCallback report_callback = ReportingCallback()) = 0;
virtual void ScheduleTask(
base::OnceClosure task,
std::vector<SyncToken> sync_token_fences,
const SyncToken& release,
ReportingCallback report_callback = ReportingCallback()) = 0;
// If |ScheduleGpuTask| is available, then this is equivalent to
// ScheduleGpuTask. Otherwise, the |task|, |sync_token_fences| and |release|
// are retained and run when |ScheduleGpuTask| becomes available. Either case,
// tasks in |ScheduleTask| and |ScheduleOrRetainTask| are sequenced by the
// call order; calling this instead of |ScheduleTask| can only delay but not
// reorder tasks.
// |report_callback| will be called on the same thread and before |task| runs.
virtual void ScheduleOrRetainTask(
base::OnceClosure task,
std::vector<SyncToken> sync_token_fences,
const SyncToken& release,
ReportingCallback report_callback = ReportingCallback()) = 0;
// Continue running the current task after yielding execution.
virtual void ContinueTask(gpu::TaskCallback task) = 0;
virtual void ContinueTask(base::OnceClosure task) = 0;
// Creates a SyncPointClientState associated with the sequence.
[[nodiscard]] virtual ScopedSyncPointClientState CreateSyncPointClientState(
CommandBufferNamespace namespace_id,
CommandBufferId command_buffer_id) = 0;
};
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_SERVICE_SINGLE_TASK_SEQUENCE_H_