Index: chromeos/accelerometer/accelerometer_reader.cc |
diff --git a/chromeos/accelerometer/accelerometer_reader.cc b/chromeos/accelerometer/accelerometer_reader.cc |
index 6e78218b71a7611d78d12514b890996cff70895b..fe8422c1ca6ec0965361c6a8a379858538f0d9f8 100644 |
--- a/chromeos/accelerometer/accelerometer_reader.cc |
+++ b/chromeos/accelerometer/accelerometer_reader.cc |
@@ -52,9 +52,6 @@ const size_t kMaxAsciiUintLength = 21; |
// The size of individual values. |
const size_t kDataSize = 2; |
-// The time to wait between reading the accelerometer. |
-const int kDelayBetweenReadsMs = 100; |
- |
// The mean acceleration due to gravity on Earth in m/s^2. |
const float kMeanGravity = 9.80665f; |
@@ -169,6 +166,8 @@ bool ReadAccelerometer( |
} // namespace |
+const int AccelerometerReader::kDelayBetweenReadsMs = 100; |
+ |
AccelerometerReader::ConfigurationData::ConfigurationData() |
: count(0) { |
for (int i = 0; i < ACCELEROMETER_SOURCE_COUNT; ++i) { |
@@ -202,18 +201,18 @@ 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); |
} |
AccelerometerReader::AccelerometerReader() |
- : has_update_(false), |
- configuration_(new AccelerometerReader::Configuration()), |
+ : configuration_(new AccelerometerReader::Configuration()), |
+ observers_(new ObserverListThreadSafe<Observer>()), |
weak_factory_(this) { |
} |
@@ -247,21 +246,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. |