Chromium Code Reviews| 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..edfcf37a1a392f1eda43d5ccc59d66a0808dedfb 100644 |
| --- a/device/generic_sensor/platform_sensor.cc |
| +++ b/device/generic_sensor/platform_sensor.cc |
| @@ -6,15 +6,19 @@ |
| #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" |
| namespace device { |
| -PlatformSensor::PlatformSensor(mojom::SensorType type, |
| - mojo::ScopedSharedBufferMapping mapping, |
| - PlatformSensorProvider* provider) |
| - : shared_buffer_mapping_(std::move(mapping)), |
| +PlatformSensor::PlatformSensor( |
| + mojom::SensorType type, |
| + mojo::ScopedSharedBufferMapping mapping, |
| + PlatformSensorProvider* provider, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
| + : task_runner_(task_runner), |
| + shared_buffer_mapping_(std::move(mapping)), |
| type_(type), |
| provider_(provider), |
| weak_factory_(this) {} |
| @@ -80,6 +84,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( |
|
Ken Rockot(use gerrit already)
2016/10/10 16:02:08
I believe this is incorrect. The PlatformSensor in
Reilly Grant (use Gerrit)
2016/10/10 16:30:41
So far it looks like |task_runner_| is always the
Mikhail
2016/10/10 18:29:19
Right, |task_runner_| is PlatformSensor's native t
|
| + FROM_HERE, base::Bind(&PlatformSensor::NotifySensorReadingChanged, |
| + weak_factory_.GetWeakPtr())); |
| +} |
| + |
| void PlatformSensor::NotifySensorReadingChanged() { |
| using ClientsList = decltype(clients_); |
| ClientsList::Iterator it(&clients_); |