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

Unified Diff: services/ui/gles2/command_buffer_driver.h

Issue 2194893002: services/ui: Revert CLs that broke Windows. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/gles2/OWNERS ('k') | services/ui/gles2/command_buffer_driver.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/gles2/command_buffer_driver.h
diff --git a/services/ui/gles2/command_buffer_driver.h b/services/ui/gles2/command_buffer_driver.h
new file mode 100644
index 0000000000000000000000000000000000000000..d942b4f18c18a74c1e080c9599c238faf9e0fe0d
--- /dev/null
+++ b/services/ui/gles2/command_buffer_driver.h
@@ -0,0 +1,173 @@
+// 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 SERVICES_UI_GLES2_COMMAND_BUFFER_DRIVER_H_
+#define SERVICES_UI_GLES2_COMMAND_BUFFER_DRIVER_H_
+
+#include <stdint.h>
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/threading/non_thread_safe.h"
+#include "base/time/time.h"
+#include "gpu/command_buffer/common/capabilities.h"
+#include "gpu/command_buffer/common/command_buffer.h"
+#include "gpu/command_buffer/common/command_buffer_id.h"
+#include "gpu/command_buffer/common/constants.h"
+#include "mojo/public/cpp/bindings/array.h"
+#include "mojo/public/cpp/system/buffer.h"
+#include "ui/gfx/buffer_types.h"
+#include "ui/gfx/geometry/mojo/geometry.mojom.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/gfx/swap_result.h"
+
+namespace gl {
+class GLContext;
+class GLSurface;
+}
+
+namespace gpu {
+class CommandBufferService;
+class CommandExecutor;
+class SyncPointClient;
+class SyncPointOrderData;
+
+namespace gles2 {
+class GLES2Decoder;
+} // namespace gles2
+
+} // namespace gpu
+
+namespace ui {
+class NativePixmap;
+}
+
+namespace ui {
+
+class GpuState;
+
+// This class receives CommandBuffer messages on the same thread as the native
+// viewport.
+class CommandBufferDriver : base::NonThreadSafe {
+ public:
+ class Client {
+ public:
+ virtual ~Client();
+ virtual void DidLoseContext(uint32_t reason) = 0;
+ virtual void UpdateVSyncParameters(const base::TimeTicks& timebase,
+ const base::TimeDelta& interval) = 0;
+ virtual void OnGpuCompletedSwapBuffers(gfx::SwapResult result) = 0;
+ };
+ CommandBufferDriver(gpu::CommandBufferNamespace command_buffer_namespace,
+ gpu::CommandBufferId command_buffer_id,
+ gfx::AcceleratedWidget widget,
+ scoped_refptr<GpuState> gpu_state);
+ ~CommandBufferDriver();
+
+ // The class owning the CommandBufferDriver instance (e.g. CommandBufferLocal)
+ // is itself the Client implementation so CommandBufferDriver does not own the
+ // client.
+ void set_client(Client* client) { client_ = client; }
+
+ bool Initialize(mojo::ScopedSharedBufferHandle shared_state,
+ mojo::Array<int32_t> attribs);
+ void SetGetBuffer(int32_t buffer);
+ void Flush(int32_t put_offset);
+ void RegisterTransferBuffer(int32_t id,
+ mojo::ScopedSharedBufferHandle transfer_buffer,
+ uint32_t size);
+ void DestroyTransferBuffer(int32_t id);
+ void CreateImage(int32_t id,
+ mojo::ScopedHandle memory_handle,
+ int32_t type,
+ const gfx::Size& size,
+ int32_t format,
+ int32_t internal_format);
+ void CreateImageNativeOzone(int32_t id,
+ int32_t type,
+ gfx::Size size,
+ gfx::BufferFormat format,
+ uint32_t internal_format,
+ ui::NativePixmap* pixmap);
+ void DestroyImage(int32_t id);
+ bool IsScheduled() const;
+ bool HasUnprocessedCommands() const;
+ gpu::Capabilities GetCapabilities() const;
+ gpu::CommandBuffer::State GetLastState() const;
+ gpu::CommandBufferNamespace GetNamespaceID() const {
+ return command_buffer_namespace_;
+ }
+ gpu::CommandBufferId GetCommandBufferID() const { return command_buffer_id_; }
+ gpu::SyncPointOrderData* sync_point_order_data() {
+ return sync_point_order_data_.get();
+ }
+ uint32_t GetUnprocessedOrderNum() const;
+ uint32_t GetProcessedOrderNum() const;
+ void SignalQuery(uint32_t query_id, const base::Closure& callback);
+
+ private:
+ bool MakeCurrent();
+
+ // Process pending queries and call |ScheduleDelayedWork| to schedule
+ // processing of delayed work.
+ void ProcessPendingAndIdleWork();
+
+ // Schedule processing of delayed work. This updates the time at which
+ // delayed work should be processed. |process_delayed_work_time_| is
+ // updated to current time + delay. Call this after processing some amount
+ // of delayed work.
+ void ScheduleDelayedWork(base::TimeDelta delay);
+
+ // Poll the command buffer to execute work.
+ void PollWork();
+ void PerformWork();
+
+ void DestroyDecoder();
+
+ // Callbacks:
+ void OnUpdateVSyncParameters(const base::TimeTicks timebase,
+ const base::TimeDelta interval);
+ void OnFenceSyncRelease(uint64_t release);
+ bool OnWaitFenceSync(gpu::CommandBufferNamespace namespace_id,
+ gpu::CommandBufferId command_buffer_id,
+ uint64_t release);
+ void OnDescheduleUntilFinished();
+ void OnRescheduleAfterFinished();
+ void OnParseError();
+ void OnContextLost(uint32_t reason);
+ void OnGpuCompletedSwapBuffers(gfx::SwapResult result);
+
+ const gpu::CommandBufferNamespace command_buffer_namespace_;
+ const gpu::CommandBufferId command_buffer_id_;
+ gfx::AcceleratedWidget widget_;
+ Client* client_; // NOT OWNED.
+ std::unique_ptr<gpu::CommandBufferService> command_buffer_;
+ std::unique_ptr<gpu::gles2::GLES2Decoder> decoder_;
+ std::unique_ptr<gpu::CommandExecutor> executor_;
+ scoped_refptr<gpu::SyncPointOrderData> sync_point_order_data_;
+ std::unique_ptr<gpu::SyncPointClient> sync_point_client_;
+ scoped_refptr<gl::GLContext> context_;
+ scoped_refptr<gl::GLSurface> surface_;
+ scoped_refptr<GpuState> gpu_state_;
+
+ scoped_refptr<base::SingleThreadTaskRunner> context_lost_task_runner_;
+ base::Callback<void(int32_t)> context_lost_callback_;
+
+ base::TimeTicks process_delayed_work_time_;
+ uint32_t previous_processed_num_;
+ base::TimeTicks last_idle_time_;
+
+ base::WeakPtrFactory<CommandBufferDriver> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(CommandBufferDriver);
+};
+
+} // namespace ui
+
+#endif // COMPONENTS_GLES2_COMMAND_BUFFER_DRIVER_H_
« no previous file with comments | « services/ui/gles2/OWNERS ('k') | services/ui/gles2/command_buffer_driver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698