Chromium Code Reviews| Index: device/generic_sensor/public/cpp/sensor_reading.cc |
| diff --git a/device/generic_sensor/public/cpp/sensor_reading.cc b/device/generic_sensor/public/cpp/sensor_reading.cc |
| index ae61145f4d6566e1817c2fe9143e248b3ed15859..9d14fd9d7af3a6920781369b00caf475cbe162b3 100644 |
| --- a/device/generic_sensor/public/cpp/sensor_reading.cc |
| +++ b/device/generic_sensor/public/cpp/sensor_reading.cc |
| @@ -4,6 +4,25 @@ |
| #include "device/generic_sensor/public/cpp/sensor_reading.h" |
| +#include "device/base/synchronization/shared_memory_seqlock_buffer.h" |
| + |
| +namespace { |
|
timvolodine
2017/06/21 18:22:11
looks like this is a merge from a different patch
juncai
2017/07/20 00:22:16
This buffer reading functionality is moved to Sens
|
| + |
| +constexpr int kMaxReadAttemptsCount = 10; |
| + |
| +bool TryReadFromBuffer(const device::SensorReadingSharedBuffer* buffer, |
| + device::SensorReading* result) { |
| + const device::OneWriterSeqLock& seqlock = buffer->seqlock.value(); |
| + auto version = seqlock.ReadBegin(); |
| + auto reading_data = buffer->reading; |
| + if (seqlock.ReadRetry(version)) |
| + return false; |
| + *result = reading_data; |
| + return true; |
| +} |
| + |
| +} // namespace |
| + |
| namespace device { |
| SensorReading::SensorReading() = default; |
| @@ -20,4 +39,15 @@ uint64_t SensorReadingSharedBuffer::GetOffset(mojom::SensorType type) { |
| sizeof(SensorReadingSharedBuffer); |
| } |
| +bool GetSensorReadingFromBuffer(const SensorReadingSharedBuffer* buffer, |
| + SensorReading* result) { |
| + int read_attempts = 0; |
| + while (!TryReadFromBuffer(buffer, result)) { |
| + if (++read_attempts == kMaxReadAttemptsCount) |
| + return false; |
| + } |
| + |
| + return true; |
| +} |
| + |
| } // namespace device |