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

Unified Diff: content/common/gpu/gpu_channel_manager.h

Issue 1846253003: Revert of Refactor content/common/gpu into gpu/ipc/service (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 | « content/common/gpu/gpu_channel.cc ('k') | content/common/gpu/gpu_channel_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/gpu/gpu_channel_manager.h
diff --git a/content/common/gpu/gpu_channel_manager.h b/content/common/gpu/gpu_channel_manager.h
new file mode 100644
index 0000000000000000000000000000000000000000..875656f47b697e82be97ce436e0e9609a6c3198b
--- /dev/null
+++ b/content/common/gpu/gpu_channel_manager.h
@@ -0,0 +1,228 @@
+// Copyright (c) 2012 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 CONTENT_COMMON_GPU_GPU_CHANNEL_MANAGER_H_
+#define CONTENT_COMMON_GPU_GPU_CHANNEL_MANAGER_H_
+
+#include <stdint.h>
+
+#include <deque>
+#include <string>
+#include <vector>
+
+#include "base/containers/scoped_ptr_hash_map.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "build/build_config.h"
+#include "content/common/content_export.h"
+#include "content/common/gpu/gpu_memory_manager.h"
+#include "gpu/command_buffer/common/constants.h"
+#include "ui/gfx/gpu_memory_buffer.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/gl/gl_surface.h"
+#include "url/gurl.h"
+
+#if defined(OS_MACOSX)
+#include "base/callback.h"
+#include "base/containers/hash_tables.h"
+#endif
+
+namespace base {
+class WaitableEvent;
+}
+
+namespace gfx {
+class GLShareGroup;
+}
+
+namespace gpu {
+struct GpuPreferences;
+class PreemptionFlag;
+class SyncPointClient;
+class SyncPointManager;
+struct SyncToken;
+union ValueState;
+namespace gles2 {
+class FramebufferCompletenessCache;
+class MailboxManager;
+class ProgramCache;
+class ShaderTranslatorCache;
+}
+}
+
+namespace IPC {
+struct ChannelHandle;
+}
+
+namespace content {
+class GpuChannel;
+class GpuChannelManagerDelegate;
+class GpuMemoryBufferFactory;
+class GpuWatchdog;
+
+// A GpuChannelManager is a thread responsible for issuing rendering commands
+// managing the lifetimes of GPU channels and forwarding IPC requests from the
+// browser process to them based on the corresponding renderer ID.
+class CONTENT_EXPORT GpuChannelManager {
+ public:
+#if defined(OS_MACOSX)
+ typedef base::Callback<
+ void(int32_t, const base::TimeTicks&, const base::TimeDelta&)>
+ BufferPresentedCallback;
+#endif
+ GpuChannelManager(const gpu::GpuPreferences& gpu_preferences,
+ GpuChannelManagerDelegate* delegate,
+ GpuWatchdog* watchdog,
+ base::SingleThreadTaskRunner* task_runner,
+ base::SingleThreadTaskRunner* io_task_runner,
+ base::WaitableEvent* shutdown_event,
+ gpu::SyncPointManager* sync_point_manager,
+ GpuMemoryBufferFactory* gpu_memory_buffer_factory);
+ virtual ~GpuChannelManager();
+
+ GpuChannelManagerDelegate* delegate() const { return delegate_; }
+
+ IPC::ChannelHandle EstablishChannel(int client_id,
+ uint64_t client_tracing_id,
+ bool preempts,
+ bool allow_view_command_buffers,
+ bool allow_real_time_streams);
+
+ void PopulateShaderCache(const std::string& shader);
+ void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
+ int client_id,
+ const gpu::SyncToken& sync_token);
+ void UpdateValueState(int client_id,
+ unsigned int target,
+ const gpu::ValueState& state);
+#if defined(OS_ANDROID)
+ void WakeUpGpu();
+#endif
+ void DestroyAllChannels();
+
+ // Remove the channel for a particular renderer.
+ void RemoveChannel(int client_id);
+
+ void LoseAllContexts();
+
+#if defined(OS_MACOSX)
+ void AddBufferPresentedCallback(int32_t routing_id,
+ const BufferPresentedCallback& callback);
+ void RemoveBufferPresentedCallback(int32_t routing_id);
+ void BufferPresented(int32_t surface_id,
+ const base::TimeTicks& vsync_timebase,
+ const base::TimeDelta& vsync_interval);
+#endif
+
+ const gpu::GpuPreferences& gpu_preferences() const {
+ return gpu_preferences_;
+ }
+ gpu::gles2::ProgramCache* program_cache();
+ gpu::gles2::ShaderTranslatorCache* shader_translator_cache();
+ gpu::gles2::FramebufferCompletenessCache* framebuffer_completeness_cache();
+
+ GpuMemoryManager* gpu_memory_manager() { return &gpu_memory_manager_; }
+
+ GpuChannel* LookupChannel(int32_t client_id) const;
+
+ gfx::GLSurface* GetDefaultOffscreenSurface();
+
+ GpuMemoryBufferFactory* gpu_memory_buffer_factory() {
+ return gpu_memory_buffer_factory_;
+ }
+
+ // Returns the maximum order number for unprocessed IPC messages across all
+ // channels.
+ uint32_t GetUnprocessedOrderNum() const;
+
+ // Returns the maximum order number for processed IPC messages across all
+ // channels.
+ uint32_t GetProcessedOrderNum() const;
+
+#if defined(OS_ANDROID)
+ void DidAccessGpu();
+#endif
+
+ protected:
+ virtual scoped_ptr<GpuChannel> CreateGpuChannel(
+ int client_id,
+ uint64_t client_tracing_id,
+ bool preempts,
+ bool allow_view_command_buffers,
+ bool allow_real_time_streams);
+
+ gpu::SyncPointManager* sync_point_manager() const {
+ return sync_point_manager_;
+ }
+
+ gfx::GLShareGroup* share_group() const { return share_group_.get(); }
+ gpu::gles2::MailboxManager* mailbox_manager() const {
+ return mailbox_manager_.get();
+ }
+ gpu::PreemptionFlag* preemption_flag() const {
+ return preemption_flag_.get();
+ }
+
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
+
+ // These objects manage channels to individual renderer processes there is
+ // one channel for each renderer process that has connected to this GPU
+ // process.
+ base::ScopedPtrHashMap<int32_t, scoped_ptr<GpuChannel>> gpu_channels_;
+
+ private:
+ void InternalDestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, int client_id);
+ void InternalDestroyGpuMemoryBufferOnIO(gfx::GpuMemoryBufferId id,
+ int client_id);
+#if defined(OS_ANDROID)
+ void ScheduleWakeUpGpu();
+ void DoWakeUpGpu();
+#endif
+
+ const gpu::GpuPreferences& gpu_preferences_;
+
+ GpuChannelManagerDelegate* const delegate_;
+#if defined(OS_MACOSX)
+ base::hash_map<int32_t, BufferPresentedCallback>
+ buffer_presented_callback_map_;
+#endif
+
+ GpuWatchdog* watchdog_;
+
+ base::WaitableEvent* shutdown_event_;
+
+ scoped_refptr<gfx::GLShareGroup> share_group_;
+ scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_;
+ scoped_refptr<gpu::PreemptionFlag> preemption_flag_;
+ GpuMemoryManager gpu_memory_manager_;
+ // SyncPointManager guaranteed to outlive running MessageLoop.
+ gpu::SyncPointManager* sync_point_manager_;
+ scoped_ptr<gpu::SyncPointClient> sync_point_client_waiter_;
+ scoped_ptr<gpu::gles2::ProgramCache> program_cache_;
+ scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
+ scoped_refptr<gpu::gles2::FramebufferCompletenessCache>
+ framebuffer_completeness_cache_;
+ scoped_refptr<gfx::GLSurface> default_offscreen_surface_;
+ GpuMemoryBufferFactory* const gpu_memory_buffer_factory_;
+#if defined(OS_ANDROID)
+ // Last time we know the GPU was powered on. Global for tracking across all
+ // transport surfaces.
+ base::TimeTicks last_gpu_access_time_;
+ base::TimeTicks begin_wake_up_time_;
+#endif
+
+ // Member variables should appear before the WeakPtrFactory, to ensure
+ // that any WeakPtrs to Controller are invalidated before its members
+ // variable's destructors are executed, rendering them invalid.
+ base::WeakPtrFactory<GpuChannelManager> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(GpuChannelManager);
+};
+
+} // namespace content
+
+#endif // CONTENT_COMMON_GPU_GPU_CHANNEL_MANAGER_H_
« no previous file with comments | « content/common/gpu/gpu_channel.cc ('k') | content/common/gpu/gpu_channel_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698