Chromium Code Reviews| Index: chromeos/accelerometer/accelerometer_reader.cc |
| diff --git a/chromeos/accelerometer/accelerometer_reader.cc b/chromeos/accelerometer/accelerometer_reader.cc |
| index 6e78218b71a7611d78d12514b890996cff70895b..0022e47d7d16392741900dc6164a15baf39cd32a 100644 |
| --- a/chromeos/accelerometer/accelerometer_reader.cc |
| +++ b/chromeos/accelerometer/accelerometer_reader.cc |
| @@ -202,18 +202,22 @@ void AccelerometerReader::Initialize( |
| } |
| void AccelerometerReader::AddObserver(Observer* observer) { |
| - observers_.AddObserver(observer); |
| - if (has_update_) |
| - observer->OnAccelerometerUpdated(update_); |
| + observers_->AddObserver(observer); |
| + if (update_.get()) |
|
flackr
2015/03/02 15:46:39
I believe scoped_refptr is testable (i.e. can just
jonross
2015/03/04 21:54:50
Done.
|
| + observer->OnAccelerometerUpdated(update_.get()); |
| } |
| void AccelerometerReader::RemoveObserver(Observer* observer) { |
| - observers_.RemoveObserver(observer); |
| + observers_->RemoveObserver(observer); |
| +} |
| + |
| +bool AccelerometerReader::HasObserver(Observer* observer) { |
| + return observers_->HasObserver(observer); |
| } |
| AccelerometerReader::AccelerometerReader() |
| - : has_update_(false), |
| - configuration_(new AccelerometerReader::Configuration()), |
| + : configuration_(new AccelerometerReader::Configuration()), |
| + observers_(new ObserverListThreadSafe<Observer>()), |
| weak_factory_(this) { |
| } |
| @@ -247,21 +251,22 @@ void AccelerometerReader::OnDataRead( |
| DCHECK(!task_runner_->RunsTasksOnCurrentThread()); |
| if (success) { |
| - has_update_ = true; |
| + update_ = new AccelerometerUpdate(); |
| for (int i = 0; i < ACCELEROMETER_SOURCE_COUNT; ++i) { |
| if (!configuration_->data.has[i]) |
| continue; |
| int16* values = reinterpret_cast<int16*>(reading->data); |
| - update_.Set(static_cast<AccelerometerSource>(i), |
| - values[configuration_->data.index[i][0]] * |
| - configuration_->data.scale[i][0], |
| - values[configuration_->data.index[i][1]] * |
| - configuration_->data.scale[i][1], |
| - values[configuration_->data.index[i][2]] * |
| - configuration_->data.scale[i][2]); |
| + update_->Set(static_cast<AccelerometerSource>(i), |
| + values[configuration_->data.index[i][0]] * |
| + configuration_->data.scale[i][0], |
| + values[configuration_->data.index[i][1]] * |
| + configuration_->data.scale[i][1], |
| + values[configuration_->data.index[i][2]] * |
| + configuration_->data.scale[i][2]); |
| } |
| - FOR_EACH_OBSERVER(Observer, observers_, OnAccelerometerUpdated(update_)); |
| + // TODO(jonross): move this to the blocking thread (crbug.com/461433) |
| + observers_->Notify(FROM_HERE, &Observer::OnAccelerometerUpdated, update_); |
| } |
| // Trigger another read after the current sampling delay. |