Index: device/generic_sensor/platform_sensor_reader_linux.cc |
diff --git a/device/generic_sensor/platform_sensor_reader_linux.cc b/device/generic_sensor/platform_sensor_reader_linux.cc |
index 5c014a4b200b43b9f8697bcfa8c5ee1cfc457fb9..e0d3cc8e40e2e4e327882338057ea2c38baaadef 100644 |
--- a/device/generic_sensor/platform_sensor_reader_linux.cc |
+++ b/device/generic_sensor/platform_sensor_reader_linux.cc |
@@ -17,14 +17,12 @@ namespace device { |
class PollingSensorReader : public SensorReader { |
public: |
- PollingSensorReader( |
- const SensorInfoLinux* sensor_device, |
- PlatformSensorLinux* sensor, |
- scoped_refptr<base::SingleThreadTaskRunner> polling_task_runner); |
+ PollingSensorReader(const SensorInfoLinux* sensor_device, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
~PollingSensorReader() override; |
// SensorReader implements: |
- bool StartFetchingData( |
+ void StartFetchingData( |
const PlatformSensorConfiguration& configuration) override; |
void StopFetchingData() override; |
@@ -58,9 +56,8 @@ class PollingSensorReader : public SensorReader { |
PollingSensorReader::PollingSensorReader( |
const SensorInfoLinux* sensor_device, |
- PlatformSensorLinux* sensor, |
- scoped_refptr<base::SingleThreadTaskRunner> polling_task_runner) |
- : SensorReader(sensor, polling_task_runner), |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
+ : SensorReader(std::move(task_runner)), |
sensor_file_paths_(sensor_device->device_reading_files), |
scaling_value_(sensor_device->device_scaling_value), |
offset_value_(sensor_device->device_offset_value), |
@@ -72,17 +69,17 @@ PollingSensorReader::~PollingSensorReader() { |
polling_task_runner_->DeleteSoon(FROM_HERE, timer_); |
} |
-bool PollingSensorReader::StartFetchingData( |
+void PollingSensorReader::StartFetchingData( |
const PlatformSensorConfiguration& configuration) { |
+ DCHECK(polling_task_runner_->BelongsToCurrentThread()); |
+ DCHECK(sensor_); |
if (is_reading_active_) |
StopFetchingData(); |
- |
- return polling_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&PollingSensorReader::InitializeTimer, |
- weak_factory_.GetWeakPtr(), configuration)); |
+ InitializeTimer(configuration); |
} |
void PollingSensorReader::StopFetchingData() { |
+ DCHECK(polling_task_runner_->BelongsToCurrentThread()); |
is_reading_active_ = false; |
timer_->Stop(); |
} |
@@ -90,6 +87,7 @@ void PollingSensorReader::StopFetchingData() { |
void PollingSensorReader::InitializeTimer( |
const PlatformSensorConfiguration& configuration) { |
DCHECK(polling_task_runner_->BelongsToCurrentThread()); |
+ DCHECK(!is_reading_active_); |
timer_->Start(FROM_HERE, base::TimeDelta::FromMicroseconds( |
base::Time::kMicrosecondsPerSecond / |
configuration.frequency()), |
@@ -99,7 +97,6 @@ void PollingSensorReader::InitializeTimer( |
void PollingSensorReader::PollForData() { |
DCHECK(polling_task_runner_->BelongsToCurrentThread()); |
- base::ThreadRestrictions::AssertIOAllowed(); |
SensorReading readings; |
DCHECK_LE(sensor_file_paths_.size(), arraysize(readings.values)); |
@@ -134,20 +131,19 @@ void PollingSensorReader::PollForData() { |
// static |
std::unique_ptr<SensorReader> SensorReader::Create( |
const SensorInfoLinux* sensor_device, |
- PlatformSensorLinux* sensor, |
- scoped_refptr<base::SingleThreadTaskRunner> polling_thread_task_runner) { |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
+ base::ThreadRestrictions::AssertIOAllowed(); |
// TODO(maksims): implement triggered reading. At the moment, |
// only polling read is supported. |
- return base::MakeUnique<PollingSensorReader>(sensor_device, sensor, |
- polling_thread_task_runner); |
+ return base::MakeUnique<PollingSensorReader>(sensor_device, |
+ std::move(task_runner)); |
} |
SensorReader::SensorReader( |
- PlatformSensorLinux* sensor, |
- scoped_refptr<base::SingleThreadTaskRunner> polling_task_runner) |
- : sensor_(sensor), |
- polling_task_runner_(polling_task_runner), |
- task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
+ : sensor_(nullptr), |
+ polling_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ task_runner_(std::move(task_runner)), |
is_reading_active_(false) {} |
SensorReader::~SensorReader() = default; |
@@ -160,4 +156,9 @@ void SensorReader::NotifyReadError() { |
} |
} |
+void SensorReader::SetPlatformSensorLinux(PlatformSensorLinux* sensor) { |
+ DCHECK(!sensor_); |
+ sensor_ = sensor; |
+} |
+ |
} // namespace device |