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

Side by Side Diff: device/sensors/public/cpp/shared_memory_seqlock_reader.h

Issue 2812223006: Replace device_sensor browsertest by service unittest. (Closed)
Patch Set: eliminate "unreachable code" warning. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_SHARED_MEMORY_SEQLOCK_READER_H_ 5 #ifndef DEVICE_SENSORS_PUBLIC_CPP_SHARED_MEMORY_SEQLOCK_READER_H_
6 #define CONTENT_RENDERER_SHARED_MEMORY_SEQLOCK_READER_H_ 6 #define DEVICE_SENSORS_PUBLIC_CPP_SHARED_MEMORY_SEQLOCK_READER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <memory> 10 #include <memory>
11 11
12 #include "base/logging.h"
13 #include "base/macros.h" 12 #include "base/macros.h"
14 #include "base/memory/shared_memory.h" 13 #include "base/memory/shared_memory.h"
15 #include "device/base/synchronization/shared_memory_seqlock_buffer.h" 14 #include "device/base/synchronization/shared_memory_seqlock_buffer.h"
16 15
17 namespace content { 16 namespace device {
18 namespace internal { 17 namespace internal {
19 18
20 class SharedMemorySeqLockReaderBase { 19 class SharedMemorySeqLockReaderBase {
21 protected: 20 protected:
22 SharedMemorySeqLockReaderBase(); 21 SharedMemorySeqLockReaderBase();
23 virtual ~SharedMemorySeqLockReaderBase(); 22 virtual ~SharedMemorySeqLockReaderBase();
24 23
25 void* InitializeSharedMemory( 24 void* InitializeSharedMemory(base::SharedMemoryHandle shared_memory_handle,
26 base::SharedMemoryHandle shared_memory_handle, 25 size_t buffer_size);
27 size_t buffer_size);
28 26
29 bool FetchFromBuffer(device::OneWriterSeqLock* seqlock, 27 bool FetchFromBuffer(device::OneWriterSeqLock* seqlock,
30 void* final, 28 void* final,
31 void* temp, 29 void* temp,
32 void* from, 30 void* from,
33 size_t size); 31 size_t size);
34 32
35 static const int kMaximumContentionCount = 10; 33 static const int kMaximumContentionCount = 10;
36 base::SharedMemoryHandle renderer_shared_memory_handle_; 34 base::SharedMemoryHandle renderer_shared_memory_handle_;
37 std::unique_ptr<base::SharedMemory> renderer_shared_memory_; 35 std::unique_ptr<base::SharedMemory> renderer_shared_memory_;
38 }; 36 };
39 37
40 } // namespace internal 38 } // namespace internal
41 39
42 // Template argument Data should be a pod-like structure only containing 40 // Template argument Data should be a pod-like structure only containing
43 // data fields, such that it is copyable by memcpy method. 41 // data fields, such that it is copyable by memcpy method.
44 template<typename Data> 42 template <typename Data>
45 class SharedMemorySeqLockReader 43 class SharedMemorySeqLockReader
46 : private internal::SharedMemorySeqLockReaderBase { 44 : private internal::SharedMemorySeqLockReaderBase {
47 public: 45 public:
48 SharedMemorySeqLockReader() : buffer_(0) { } 46 SharedMemorySeqLockReader() : buffer_(0) {}
49 virtual ~SharedMemorySeqLockReader() { } 47 virtual ~SharedMemorySeqLockReader() {}
50 48
51 bool GetLatestData(Data* data) { 49 bool GetLatestData(Data* data) {
52 DCHECK(buffer_); 50 DCHECK(buffer_);
53 DCHECK(sizeof(*data) == sizeof(*temp_buffer_)); 51 DCHECK(sizeof(*data) == sizeof(*temp_buffer_));
54 return FetchFromBuffer(&buffer_->seqlock, data, temp_buffer_.get(), 52 return FetchFromBuffer(&buffer_->seqlock, data, temp_buffer_.get(),
55 &buffer_->data, sizeof(*temp_buffer_)); 53 &buffer_->data, sizeof(*temp_buffer_));
56 } 54 }
57 55
58 bool Initialize(base::SharedMemoryHandle shared_memory_handle) { 56 bool Initialize(base::SharedMemoryHandle shared_memory_handle) {
59 if (void* memory = InitializeSharedMemory( 57 if (void* memory = InitializeSharedMemory(
60 shared_memory_handle, 58 shared_memory_handle,
61 sizeof(device::SharedMemorySeqLockBuffer<Data>))) { 59 sizeof(device::SharedMemorySeqLockBuffer<Data>))) {
62 buffer_ = static_cast<device::SharedMemorySeqLockBuffer<Data>*>(memory); 60 buffer_ = static_cast<device::SharedMemorySeqLockBuffer<Data>*>(memory);
63 temp_buffer_.reset(new Data); 61 temp_buffer_.reset(new Data);
64 return true; 62 return true;
65 } 63 }
66 return false; 64 return false;
67 } 65 }
68 66
69 private: 67 private:
70 device::SharedMemorySeqLockBuffer<Data>* buffer_; 68 device::SharedMemorySeqLockBuffer<Data>* buffer_;
71 std::unique_ptr<Data> temp_buffer_; 69 std::unique_ptr<Data> temp_buffer_;
72 70
73 DISALLOW_COPY_AND_ASSIGN(SharedMemorySeqLockReader); 71 DISALLOW_COPY_AND_ASSIGN(SharedMemorySeqLockReader);
74 }; 72 };
75 73
76 } // namespace content 74 } // namespace device
77 75
78 #endif // CONTENT_RENDERER_SHARED_MEMORY_SEQLOCK_READER_H_ 76 #endif // DEVICE_SENSORS_PUBLIC_CPP_SHARED_MEMORY_SEQLOCK_READER_H_
OLDNEW
« no previous file with comments | « device/sensors/public/cpp/BUILD.gn ('k') | device/sensors/public/cpp/shared_memory_seqlock_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698