Chromium Code Reviews| Index: content/browser/browser_io_surface_manager_mac.h |
| diff --git a/content/browser/browser_io_surface_manager_mac.h b/content/browser/browser_io_surface_manager_mac.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..58b17b415d02621478b26637704e594427099f9a |
| --- /dev/null |
| +++ b/content/browser/browser_io_surface_manager_mac.h |
| @@ -0,0 +1,104 @@ |
| +// Copyright 2015 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_BROWSER_BROWSER_IO_SURFACE_MANAGER_MAC_H_ |
| +#define CONTENT_BROWSER_BROWSER_IO_SURFACE_MANAGER_MAC_H_ |
| + |
| +#include <mach/mach.h> |
| + |
| +#include <map> |
| +#include <set> |
| +#include <utility> |
| + |
| +#include "base/containers/scoped_ptr_hash_map.h" |
| +#include "base/mac/dispatch_source_mach.h" |
| +#include "base/mac/scoped_mach_port.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/singleton.h" |
| +#include "base/synchronization/lock.h" |
| +#include "content/common/mac/io_surface_manager.h" |
| +#include "gpu/command_buffer/common/mailbox.h" |
| + |
| +namespace content { |
| + |
| +// Implementation of IOSurfaceManager that provides a mechanism for child |
| +// processes to register and acquire IOSurfaces through Mach IPC. |
| +class CONTENT_EXPORT BrowserIOSurfaceManager : public IOSurfaceManager { |
| + public: |
| + // Returns the global BrowserIOSurfaceManager. |
| + static BrowserIOSurfaceManager* GetInstance(); |
| + |
| + // Overridden from IOSurfaceManager: |
| + bool RegisterIOSurface(int io_surface_id, |
| + int client_id, |
| + IOSurfaceRef io_surface) override; |
| + void UnregisterIOSurface(int io_surface_id, int client_id) override; |
| + IOSurfaceRef AcquireIOSurface(int io_surface_id) override; |
| + |
| + // Generate a unique unguessable mailbox name that a child process can use to |
| + // acquire IOSurface references. |
|
Robert Sesek
2015/05/15 21:45:05
|client_id| is the ___.
reveman
2015/05/18 18:15:38
Done.
|
| + gpu::Mailbox GenerateChildProcessMailbox(int client_id); |
| + |
| + // Invalidate a previously generated mailbox name. |
| + void InvalidateChildProcessMailbox(const gpu::Mailbox& mailbox); |
| + |
| + // Get a unique unguessable mailbox name that each GPU process can |
|
Robert Sesek
2015/05/15 21:45:05
a -> the, otherwise it's hard to understand why th
reveman
2015/05/18 18:15:38
Done. Also changed the language to say "the" inste
|
| + // use to register/unregister IOSurface for use by clients. |
| + gpu::Mailbox GetGpuProcessMailbox() const; |
| + |
| + private: |
| + friend struct DefaultSingletonTraits<BrowserIOSurfaceManager>; |
| + |
| + BrowserIOSurfaceManager(); |
| + ~BrowserIOSurfaceManager() override; |
| + |
| + // Message handler that is invoked on |dispatch_source_| when an |
| + // incoming message needs to be received. |
| + void HandleRequest(); |
| + |
| + // Mach message handlers. |
| + void OnRegisterIOSurface(const mach_msg_header_t& header, |
| + int io_surface_id, |
| + int client_id, |
| + mach_port_t io_surface_port, |
| + const gpu::Mailbox& gpu_process_mailbox); |
| + void OnUnregisterIOSurface(const mach_msg_header_t& header, |
| + int io_surface_id, |
| + int client_id, |
| + const gpu::Mailbox& gpu_process_mailbox); |
| + void OnAcquireIOSurface(const mach_msg_header_t& header, |
| + int io_surface_id, |
| + const gpu::Mailbox& gpu_process_mailbox); |
| + |
| + // The Mach port on which the server listens. |
| + base::mac::ScopedMachReceiveRight server_port_; |
| + |
| + // The dispatch source and queue on which Mach messages will be received. |
| + scoped_ptr<base::DispatchSourceMach> dispatch_source_; |
| + |
| + // Stores the IOSurfces for all GPU clients. |
| + typedef std::pair<int, int> IOSurfaceMapKey; |
|
Robert Sesek
2015/05/15 21:45:05
using IOSurfaceMapKey = std::pair<int, int>;
reveman
2015/05/18 18:15:38
Done.
|
| + typedef base::ScopedPtrHashMap<IOSurfaceMapKey, |
|
Robert Sesek
2015/05/15 21:45:05
using IOSurfaceMap = ...;
reveman
2015/05/18 18:15:38
Done.
|
| + scoped_ptr<base::mac::ScopedMachSendRight>> |
| + IOSurfaceMap; |
| + IOSurfaceMap io_surfaces_; |
| + |
| + // Stores the Child process unique id (RenderProcessHost ID) for every |
| + // mailbox. |
| + typedef std::map<gpu::Mailbox, int> ChildProcessIdMap; |
| + ChildProcessIdMap child_process_ids_; |
| + |
| + // Stores the GPU process mailbox. |
| + gpu::Mailbox gpu_process_mailbox_; |
| + |
| + // Mutex that guards |io_surfaces_|, |child_process_ids_| and |
| + // |gpu_process_mailbox_|. |
| + mutable base::Lock lock_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BrowserIOSurfaceManager); |
| +}; |
| + |
| +} // namespace content |
| + |
| +#endif // CONTENT_BROWSER_BROWSER_IO_SURFACE_MANAGER_MAC_H_ |