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 |