Index: device/gamepad/gamepad_shared_buffer.h |
diff --git a/device/gamepad/gamepad_shared_buffer.h b/device/gamepad/gamepad_shared_buffer.h |
index 04cb911df969e107bbeb82ef6831e3abaa6ba2ee..b98e9616b9269ae809b6e71d8314658e102b24d6 100644 |
--- a/device/gamepad/gamepad_shared_buffer.h |
+++ b/device/gamepad/gamepad_shared_buffer.h |
@@ -6,20 +6,42 @@ |
#define DEVICE_GAMEPAD_SHARED_BUFFER_H_ |
#include "base/memory/shared_memory.h" |
+#include "device/base/synchronization/shared_memory_seqlock_buffer.h" |
#include "device/gamepad/gamepad_export.h" |
#include "third_party/WebKit/public/platform/WebGamepads.h" |
namespace device { |
+/* |
+ |
+ GamepadHardwareBuffer is stored in shared memory that's shared between the |
+ browser which does the hardware polling, and the various consumers of the |
+ gamepad state (renderers and NaCl plugins). The performance characteristics are |
+ that we want low latency (so would like to avoid explicit communication via IPC |
+ between producer and consumer) and relatively large data size. |
+ |
+ Writer and reader operate on the same buffer assuming contention is low, and |
+ contention is detected by using the associated SeqLock. |
+ |
+*/ |
+ |
+typedef SharedMemorySeqLockBuffer<blink::WebGamepads> GamepadHardwareBuffer; |
+ |
class DEVICE_GAMEPAD_EXPORT GamepadSharedBuffer { |
public: |
- virtual ~GamepadSharedBuffer() {} |
+ GamepadSharedBuffer(); |
+ ~GamepadSharedBuffer(); |
+ |
+ base::SharedMemory* shared_memory(); |
+ blink::WebGamepads* buffer(); |
+ GamepadHardwareBuffer* hardware_buffer(); |
- virtual base::SharedMemory* shared_memory() = 0; |
- virtual blink::WebGamepads* buffer() = 0; |
+ void WriteBegin(); |
+ void WriteEnd(); |
- virtual void WriteBegin() = 0; |
- virtual void WriteEnd() = 0; |
+ private: |
+ base::SharedMemory shared_memory_; |
+ GamepadHardwareBuffer* hardware_buffer_; |
}; |
} // namespace device |