gamepad_shared_buffer.cc 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "device/gamepad/gamepad_shared_buffer.h"
  5. namespace device {
  6. GamepadSharedBuffer::GamepadSharedBuffer() {
  7. base::MappedReadOnlyRegion mapped_region =
  8. base::ReadOnlySharedMemoryRegion::Create(sizeof(GamepadHardwareBuffer));
  9. CHECK(mapped_region.IsValid());
  10. shared_memory_region_ = std::move(mapped_region.region);
  11. shared_memory_mapping_ = std::move(mapped_region.mapping);
  12. void* mem = shared_memory_mapping_.memory();
  13. DCHECK(mem);
  14. hardware_buffer_ = new (mem) GamepadHardwareBuffer();
  15. memset(&(hardware_buffer_->data), 0, sizeof(Gamepads));
  16. }
  17. GamepadSharedBuffer::~GamepadSharedBuffer() = default;
  18. base::ReadOnlySharedMemoryRegion
  19. GamepadSharedBuffer::DuplicateSharedMemoryRegion() {
  20. return shared_memory_region_.Duplicate();
  21. }
  22. Gamepads* GamepadSharedBuffer::buffer() {
  23. return &(hardware_buffer()->data);
  24. }
  25. GamepadHardwareBuffer* GamepadSharedBuffer::hardware_buffer() {
  26. return hardware_buffer_;
  27. }
  28. void GamepadSharedBuffer::WriteBegin() {
  29. hardware_buffer_->seqlock.WriteBegin();
  30. }
  31. void GamepadSharedBuffer::WriteEnd() {
  32. hardware_buffer_->seqlock.WriteEnd();
  33. }
  34. } // namespace device