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

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

Powered by Google App Engine
This is Rietveld 408576698