Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1899)

Unified Diff: content/renderer/device_sensors/device_motion_event_pump.cc

Issue 2885203004: Refactor content/renderer/device_sensors to use device/generic_sensor instead of device/sensors (Closed)
Patch Set: updated content/renderer/BUILD.gn Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/device_sensors/device_motion_event_pump.cc
diff --git a/content/renderer/device_sensors/device_motion_event_pump.cc b/content/renderer/device_sensors/device_motion_event_pump.cc
index 94d7f3f7b1e5d81f6c5aaef1c2f218348f22cf4d..92cb1e2d57bb533a34cf8aa706017565ef4b4ed8 100644
--- a/content/renderer/device_sensors/device_motion_event_pump.cc
+++ b/content/renderer/device_sensors/device_motion_event_pump.cc
@@ -2,38 +2,111 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "device_motion_event_pump.h"
+#include "content/renderer/device_sensors/device_motion_event_pump.h"
+#include "base/memory/ptr_util.h"
#include "content/public/renderer/render_thread.h"
+#include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionData.h"
#include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionListener.h"
namespace content {
DeviceMotionEventPump::DeviceMotionEventPump(RenderThread* thread)
- : DeviceSensorMojoClientMixin<
- DeviceSensorEventPump<blink::WebDeviceMotionListener>,
- device::mojom::MotionSensor>(thread) {}
+ : DeviceSensorEventPump<blink::WebDeviceMotionListener>(thread) {}
-DeviceMotionEventPump::~DeviceMotionEventPump() {
+DeviceMotionEventPump::~DeviceMotionEventPump() {}
+
+void DeviceMotionEventPump::SendStartMessage() {
+ sensors_.push_back(base::MakeUnique<SensorEntry>(this));
+ sensors_.push_back(base::MakeUnique<SensorEntry>(this));
+ sensors_.push_back(base::MakeUnique<SensorEntry>(this));
+ GetSensor(device::mojom::SensorType::ACCELEROMETER, sensors_[0].get());
+ GetSensor(device::mojom::SensorType::LINEAR_ACCELERATION, sensors_[1].get());
+ GetSensor(device::mojom::SensorType::GYROSCOPE, sensors_[2].get());
+}
+
+void DeviceMotionEventPump::SendFakeDataForTesting(void* fake_data) {
+ blink::WebDeviceMotionData data =
+ *static_cast<blink::WebDeviceMotionData*>(fake_data);
+ listener()->DidChangeDeviceMotion(data);
}
void DeviceMotionEventPump::FireEvent() {
+ blink::WebDeviceMotionData data;
+ data.interval = kDefaultPumpDelayMicroseconds;
+
DCHECK(listener());
- device::MotionData data;
- if (reader_->GetLatestData(&data) && data.all_available_sensors_are_active)
+
+ if (GetDataFromSharedMemory(&data))
listener()->DidChangeDeviceMotion(data);
}
-bool DeviceMotionEventPump::InitializeReader(base::SharedMemoryHandle handle) {
- if (!reader_)
- reader_.reset(new DeviceMotionSharedMemoryReader());
- return reader_->Initialize(handle);
+bool DeviceMotionEventPump::CanStart() const {
+ DCHECK_EQ(3u, sensors_.size());
+
+ // device motion spec does not require all sensors to be available.
+ return (static_cast<size_t>(num_sensors_tried_) == sensors_.size()) &&
+ AllAvailableSensorsAreActive();
}
-void DeviceMotionEventPump::SendFakeDataForTesting(void* fake_data) {
- device::MotionData data = *static_cast<device::MotionData*>(fake_data);
+bool DeviceMotionEventPump::AllAvailableSensorsAreActive() const {
+ int num_active_sensors = 0;
+ for (const auto& sensor : sensors_) {
+ if (sensor->active)
+ ++num_active_sensors;
+ }
- listener()->DidChangeDeviceMotion(data);
+ return num_available_sensors_ == num_active_sensors;
+}
+
+bool DeviceMotionEventPump::GetDataFromSharedMemory(
+ blink::WebDeviceMotionData* data) {
+ if (!AllAvailableSensorsAreActive())
+ return false;
+
+ bool has_data = false;
+ for (auto& sensor : sensors_) {
+ if (!sensor->SensorReadingUpdated())
+ continue;
+
+ double d0 = sensor->reading.values[0].value();
+ double d1 = sensor->reading.values[1].value();
+ double d2 = sensor->reading.values[2].value();
+ switch (sensor->type) {
+ case device::mojom::SensorType::ACCELEROMETER:
+ data->acceleration_including_gravity_x = d0;
+ data->acceleration_including_gravity_y = d1;
+ data->acceleration_including_gravity_z = d2;
+ data->has_acceleration_including_gravity_x = true;
+ data->has_acceleration_including_gravity_y = true;
+ data->has_acceleration_including_gravity_z = true;
+ has_data = true;
+ break;
+ case device::mojom::SensorType::LINEAR_ACCELERATION:
+ data->acceleration_x = d0;
+ data->acceleration_y = d1;
+ data->acceleration_z = d2;
+ data->has_acceleration_x = true;
+ data->has_acceleration_y = true;
+ data->has_acceleration_z = true;
+ has_data = true;
+ break;
+ case device::mojom::SensorType::GYROSCOPE:
+ data->rotation_rate_alpha = d0;
+ data->rotation_rate_beta = d1;
+ data->rotation_rate_gamma = d2;
+ data->has_rotation_rate_alpha = true;
+ data->has_rotation_rate_beta = true;
+ data->has_rotation_rate_gamma = true;
+ has_data = true;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+ }
+
+ return has_data;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698