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. |