15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_GAMEPAD_HARDWARE_BUFFER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_GAMEPAD_HARDWARE_BUFFER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/common/one_writer_seqlock.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebGamepads.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This structure is stored in shared memory that's shared between the browser
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)which does the hardware polling, and the various consumers of the gamepad
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)state (renderers and NaCl plugins). The performance characteristics are that
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)we want low latency (so would like to avoid explicit communication via IPC
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)between producer and consumer) and relatively large data size.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Writer and reader operate on the same buffer assuming contention is low, and
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)contention is detected by using the associated SeqLock.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GamepadHardwareBuffer {
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // FIXME: Use the generic SharedMemorySeqLockBuffer<blink::WebGamepads>.
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  OneWriterSeqLock sequence;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebGamepads buffer;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CONTENT_COMMON_GAMEPAD_HARDWARE_BUFFER_H_
35