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

Side by Side Diff: components/mus/gles2/command_buffer_driver.h

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « components/mus/gles2/OWNERS ('k') | components/mus/gles2/command_buffer_driver.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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 COMPONENTS_MUS_GLES2_COMMAND_BUFFER_DRIVER_H_
6 #define COMPONENTS_MUS_GLES2_COMMAND_BUFFER_DRIVER_H_
7
8 #include <stdint.h>
9
10 #include <memory>
11
12 #include "base/callback.h"
13 #include "base/macros.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/single_thread_task_runner.h"
16 #include "base/threading/non_thread_safe.h"
17 #include "base/time/time.h"
18 #include "gpu/command_buffer/common/capabilities.h"
19 #include "gpu/command_buffer/common/command_buffer.h"
20 #include "gpu/command_buffer/common/command_buffer_id.h"
21 #include "gpu/command_buffer/common/constants.h"
22 #include "mojo/public/cpp/bindings/array.h"
23 #include "mojo/public/cpp/system/buffer.h"
24 #include "ui/gfx/buffer_types.h"
25 #include "ui/gfx/geometry/mojo/geometry.mojom.h"
26 #include "ui/gfx/geometry/size.h"
27 #include "ui/gfx/native_widget_types.h"
28 #include "ui/gfx/swap_result.h"
29
30 namespace gl {
31 class GLContext;
32 class GLSurface;
33 }
34
35 namespace gpu {
36 class CommandBufferService;
37 class CommandExecutor;
38 class SyncPointClient;
39 class SyncPointOrderData;
40
41 namespace gles2 {
42 class GLES2Decoder;
43 } // namespace gles2
44
45 } // namespace gpu
46
47 namespace ui {
48 class NativePixmap;
49 }
50
51 namespace mus {
52
53 class GpuState;
54
55 // This class receives CommandBuffer messages on the same thread as the native
56 // viewport.
57 class CommandBufferDriver : base::NonThreadSafe {
58 public:
59 class Client {
60 public:
61 virtual ~Client();
62 virtual void DidLoseContext(uint32_t reason) = 0;
63 virtual void UpdateVSyncParameters(const base::TimeTicks& timebase,
64 const base::TimeDelta& interval) = 0;
65 virtual void OnGpuCompletedSwapBuffers(gfx::SwapResult result) = 0;
66 };
67 CommandBufferDriver(gpu::CommandBufferNamespace command_buffer_namespace,
68 gpu::CommandBufferId command_buffer_id,
69 gfx::AcceleratedWidget widget,
70 scoped_refptr<GpuState> gpu_state);
71 ~CommandBufferDriver();
72
73 // The class owning the CommandBufferDriver instance (e.g. CommandBufferLocal)
74 // is itself the Client implementation so CommandBufferDriver does not own the
75 // client.
76 void set_client(Client* client) { client_ = client; }
77
78 bool Initialize(mojo::ScopedSharedBufferHandle shared_state,
79 mojo::Array<int32_t> attribs);
80 void SetGetBuffer(int32_t buffer);
81 void Flush(int32_t put_offset);
82 void RegisterTransferBuffer(int32_t id,
83 mojo::ScopedSharedBufferHandle transfer_buffer,
84 uint32_t size);
85 void DestroyTransferBuffer(int32_t id);
86 void CreateImage(int32_t id,
87 mojo::ScopedHandle memory_handle,
88 int32_t type,
89 const gfx::Size& size,
90 int32_t format,
91 int32_t internal_format);
92 void CreateImageNativeOzone(int32_t id,
93 int32_t type,
94 gfx::Size size,
95 gfx::BufferFormat format,
96 uint32_t internal_format,
97 ui::NativePixmap* pixmap);
98 void DestroyImage(int32_t id);
99 bool IsScheduled() const;
100 bool HasUnprocessedCommands() const;
101 gpu::Capabilities GetCapabilities() const;
102 gpu::CommandBuffer::State GetLastState() const;
103 gpu::CommandBufferNamespace GetNamespaceID() const {
104 return command_buffer_namespace_;
105 }
106 gpu::CommandBufferId GetCommandBufferID() const { return command_buffer_id_; }
107 gpu::SyncPointOrderData* sync_point_order_data() {
108 return sync_point_order_data_.get();
109 }
110 uint32_t GetUnprocessedOrderNum() const;
111 uint32_t GetProcessedOrderNum() const;
112 void SignalQuery(uint32_t query_id, const base::Closure& callback);
113
114 private:
115 bool MakeCurrent();
116
117 // Process pending queries and call |ScheduleDelayedWork| to schedule
118 // processing of delayed work.
119 void ProcessPendingAndIdleWork();
120
121 // Schedule processing of delayed work. This updates the time at which
122 // delayed work should be processed. |process_delayed_work_time_| is
123 // updated to current time + delay. Call this after processing some amount
124 // of delayed work.
125 void ScheduleDelayedWork(base::TimeDelta delay);
126
127 // Poll the command buffer to execute work.
128 void PollWork();
129 void PerformWork();
130
131 void DestroyDecoder();
132
133 // Callbacks:
134 void OnUpdateVSyncParameters(const base::TimeTicks timebase,
135 const base::TimeDelta interval);
136 void OnFenceSyncRelease(uint64_t release);
137 bool OnWaitFenceSync(gpu::CommandBufferNamespace namespace_id,
138 gpu::CommandBufferId command_buffer_id,
139 uint64_t release);
140 void OnDescheduleUntilFinished();
141 void OnRescheduleAfterFinished();
142 void OnParseError();
143 void OnContextLost(uint32_t reason);
144 void OnGpuCompletedSwapBuffers(gfx::SwapResult result);
145
146 const gpu::CommandBufferNamespace command_buffer_namespace_;
147 const gpu::CommandBufferId command_buffer_id_;
148 gfx::AcceleratedWidget widget_;
149 Client* client_; // NOT OWNED.
150 std::unique_ptr<gpu::CommandBufferService> command_buffer_;
151 std::unique_ptr<gpu::gles2::GLES2Decoder> decoder_;
152 std::unique_ptr<gpu::CommandExecutor> executor_;
153 scoped_refptr<gpu::SyncPointOrderData> sync_point_order_data_;
154 std::unique_ptr<gpu::SyncPointClient> sync_point_client_;
155 scoped_refptr<gl::GLContext> context_;
156 scoped_refptr<gl::GLSurface> surface_;
157 scoped_refptr<GpuState> gpu_state_;
158
159 scoped_refptr<base::SingleThreadTaskRunner> context_lost_task_runner_;
160 base::Callback<void(int32_t)> context_lost_callback_;
161
162 base::TimeTicks process_delayed_work_time_;
163 uint32_t previous_processed_num_;
164 base::TimeTicks last_idle_time_;
165
166 base::WeakPtrFactory<CommandBufferDriver> weak_factory_;
167
168 DISALLOW_COPY_AND_ASSIGN(CommandBufferDriver);
169 };
170
171 } // namespace mus
172
173 #endif // COMPONENTS_GLES2_COMMAND_BUFFER_DRIVER_H_
OLDNEW
« no previous file with comments | « components/mus/gles2/OWNERS ('k') | components/mus/gles2/command_buffer_driver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698