| Index: device/generic_sensor/platform_sensor.cc
|
| diff --git a/device/generic_sensor/platform_sensor.cc b/device/generic_sensor/platform_sensor.cc
|
| index bca1fae37f9c6f07d63bd4c62d14b50c622839be..a9b2604bb3c9b11b705ca0a38ad3a58b8279a99c 100644
|
| --- a/device/generic_sensor/platform_sensor.cc
|
| +++ b/device/generic_sensor/platform_sensor.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <utility>
|
|
|
| +#include "base/threading/thread_task_runner_handle.h"
|
| #include "device/generic_sensor/platform_sensor_provider.h"
|
| #include "device/generic_sensor/public/cpp/platform_sensor_configuration.h"
|
|
|
| @@ -14,7 +15,8 @@ namespace device {
|
| PlatformSensor::PlatformSensor(mojom::SensorType type,
|
| mojo::ScopedSharedBufferMapping mapping,
|
| PlatformSensorProvider* provider)
|
| - : shared_buffer_mapping_(std::move(mapping)),
|
| + : task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| + shared_buffer_mapping_(std::move(mapping)),
|
| type_(type),
|
| provider_(provider),
|
| weak_factory_(this) {}
|
| @@ -80,6 +82,21 @@ void PlatformSensor::RemoveClient(Client* client) {
|
| }
|
| }
|
|
|
| +void PlatformSensor::UpdateSensorReading(const SensorReading& reading,
|
| + bool notify_clients) {
|
| + ReadingBuffer* buffer =
|
| + static_cast<ReadingBuffer*>(shared_buffer_mapping_.get());
|
| + auto& seqlock = buffer->seqlock.value();
|
| + seqlock.WriteBegin();
|
| + buffer->reading = reading;
|
| + seqlock.WriteEnd();
|
| +
|
| + if (notify_clients)
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&PlatformSensor::NotifySensorReadingChanged,
|
| + weak_factory_.GetWeakPtr()));
|
| +}
|
| +
|
| void PlatformSensor::NotifySensorReadingChanged() {
|
| using ClientsList = decltype(clients_);
|
| ClientsList::Iterator it(&clients_);
|
|
|