| Index: chromeos/accelerometer/accelerometer_reader.cc
|
| diff --git a/chromeos/accelerometer/accelerometer_reader.cc b/chromeos/accelerometer/accelerometer_reader.cc
|
| index 6e78218b71a7611d78d12514b890996cff70895b..eb5f5538331f51dc4562cc297cd68cb7e7a814df 100644
|
| --- a/chromeos/accelerometer/accelerometer_reader.cc
|
| +++ b/chromeos/accelerometer/accelerometer_reader.cc
|
| @@ -202,18 +202,26 @@ void AccelerometerReader::Initialize(
|
| }
|
|
|
| void AccelerometerReader::AddObserver(Observer* observer) {
|
| - observers_.AddObserver(observer);
|
| - if (has_update_)
|
| - observer->OnAccelerometerUpdated(update_);
|
| + observers_->AddObserver(observer);
|
| + if (update_)
|
| + observer->OnAccelerometerUpdated(update_.get());
|
| }
|
|
|
| void AccelerometerReader::RemoveObserver(Observer* observer) {
|
| - observers_.RemoveObserver(observer);
|
| + observers_->RemoveObserver(observer);
|
| +}
|
| +
|
| +bool AccelerometerReader::HasObserver(Observer* observer) {
|
| + return observers_->HasObserver(observer);
|
| +}
|
| +
|
| +int AccelerometerReader::DelayBetweenReadsMs() const {
|
| + return kDelayBetweenReadsMs;
|
| }
|
|
|
| AccelerometerReader::AccelerometerReader()
|
| - : has_update_(false),
|
| - configuration_(new AccelerometerReader::Configuration()),
|
| + : configuration_(new AccelerometerReader::Configuration()),
|
| + observers_(new ObserverListThreadSafe<Observer>()),
|
| weak_factory_(this) {
|
| }
|
|
|
| @@ -247,21 +255,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.
|
|
|