Index: content/renderer/device_sensors/device_motion_event_pump_unittest.cc |
diff --git a/content/renderer/device_sensors/device_motion_event_pump_unittest.cc b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc |
index 00a82fdf839cec6e2d9a762aaee321a9d61d4776..a87462441ecdef0eecbc89a3a7b9ab71195322e1 100644 |
--- a/content/renderer/device_sensors/device_motion_event_pump_unittest.cc |
+++ b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc |
@@ -11,31 +11,15 @@ |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/macros.h" |
-#include "base/memory/ptr_util.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
#include "content/public/test/test_utils.h" |
-#include "device/generic_sensor/public/cpp/sensor_reading.h" |
-#include "device/generic_sensor/public/interfaces/sensor.mojom.h" |
-#include "device/generic_sensor/public/interfaces/sensor_provider.mojom.h" |
-#include "device/sensors/public/cpp/motion_data.h" |
-#include "mojo/public/cpp/bindings/interface_request.h" |
+#include "device/sensors/public/cpp/device_motion_hardware_buffer.h" |
#include "mojo/public/cpp/system/buffer.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionListener.h" |
- |
-namespace { |
- |
-constexpr uint64_t kReadingBufferSize = |
- sizeof(device::SensorReadingSharedBuffer); |
- |
-constexpr uint64_t kSharedBufferSizeInBytes = |
- kReadingBufferSize * static_cast<uint64_t>(device::mojom::SensorType::LAST); |
- |
-} // namespace |
namespace content { |
@@ -72,83 +56,8 @@ |
class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump { |
public: |
DeviceMotionEventPumpForTesting() |
- : DeviceMotionEventPump(nullptr), stop_on_fire_event_(true) {} |
+ : DeviceMotionEventPump(0), stop_on_fire_event_(true) {} |
~DeviceMotionEventPumpForTesting() override {} |
- |
- // DeviceMotionEventPump: |
- void SendStartMessage() override { |
- accelerometer_.mode = device::mojom::ReportingMode::CONTINUOUS; |
- linear_acceleration_sensor_.mode = device::mojom::ReportingMode::ON_CHANGE; |
- gyroscope_.mode = device::mojom::ReportingMode::CONTINUOUS; |
- |
- shared_memory_ = mojo::SharedBufferHandle::Create(kSharedBufferSizeInBytes); |
- |
- accelerometer_.shared_buffer = shared_memory_->MapAtOffset( |
- kReadingBufferSize, |
- device::SensorReadingSharedBuffer::GetOffset(accelerometer_.type)); |
- accelerometer_buffer_ = static_cast<device::SensorReadingSharedBuffer*>( |
- accelerometer_.shared_buffer.get()); |
- |
- linear_acceleration_sensor_.shared_buffer = shared_memory_->MapAtOffset( |
- kReadingBufferSize, device::SensorReadingSharedBuffer::GetOffset( |
- linear_acceleration_sensor_.type)); |
- linear_acceleration_sensor_buffer_ = |
- static_cast<device::SensorReadingSharedBuffer*>( |
- linear_acceleration_sensor_.shared_buffer.get()); |
- |
- gyroscope_.shared_buffer = shared_memory_->MapAtOffset( |
- kReadingBufferSize, |
- device::SensorReadingSharedBuffer::GetOffset(gyroscope_.type)); |
- gyroscope_buffer_ = static_cast<device::SensorReadingSharedBuffer*>( |
- gyroscope_.shared_buffer.get()); |
- } |
- |
- void StartFireEvent() { DeviceMotionEventPump::DidStart(); } |
- |
- void SetAccelerometerSensorData(bool active, |
- double d0, |
- double d1, |
- double d2) { |
- if (active) { |
- mojo::MakeRequest(&accelerometer_.sensor); |
- accelerometer_buffer_->reading.timestamp = |
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
- accelerometer_buffer_->reading.values[0].value() = d0; |
- accelerometer_buffer_->reading.values[1].value() = d1; |
- accelerometer_buffer_->reading.values[2].value() = d2; |
- } else { |
- accelerometer_.sensor.reset(); |
- } |
- } |
- |
- void SetLinearAccelerationSensorData(bool active, |
- double d0, |
- double d1, |
- double d2) { |
- if (active) { |
- mojo::MakeRequest(&linear_acceleration_sensor_.sensor); |
- linear_acceleration_sensor_buffer_->reading.timestamp = |
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
- linear_acceleration_sensor_buffer_->reading.values[0].value() = d0; |
- linear_acceleration_sensor_buffer_->reading.values[1].value() = d1; |
- linear_acceleration_sensor_buffer_->reading.values[2].value() = d2; |
- } else { |
- linear_acceleration_sensor_.sensor.reset(); |
- } |
- } |
- |
- void SetGyroscopeSensorData(bool active, double d0, double d1, double d2) { |
- if (active) { |
- mojo::MakeRequest(&gyroscope_.sensor); |
- gyroscope_buffer_->reading.timestamp = |
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
- gyroscope_buffer_->reading.values[0].value() = d0; |
- gyroscope_buffer_->reading.values[1].value() = d1; |
- gyroscope_buffer_->reading.values[2].value() = d2; |
- } else { |
- gyroscope_.sensor.reset(); |
- } |
- } |
void set_stop_on_fire_event(bool stop_on_fire_event) { |
stop_on_fire_event_ = stop_on_fire_event; |
@@ -156,10 +65,13 @@ |
bool stop_on_fire_event() { return stop_on_fire_event_; } |
- int pump_delay_microseconds() const { return kDefaultPumpDelayMicroseconds; } |
- |
- protected: |
- // DeviceMotionEventPump: |
+ int pump_delay_microseconds() const { return pump_delay_microseconds_; } |
+ |
+ void DidStart(mojo::ScopedSharedBufferHandle renderer_handle) { |
+ DeviceMotionEventPump::DidStart(std::move(renderer_handle)); |
+ } |
+ void SendStartMessage() override {} |
+ void SendStopMessage() override {} |
void FireEvent() override { |
DeviceMotionEventPump::FireEvent(); |
if (stop_on_fire_event_) { |
@@ -170,10 +82,6 @@ |
private: |
bool stop_on_fire_event_; |
- mojo::ScopedSharedBufferHandle shared_memory_; |
- device::SensorReadingSharedBuffer* accelerometer_buffer_; |
- device::SensorReadingSharedBuffer* linear_acceleration_sensor_buffer_; |
- device::SensorReadingSharedBuffer* gyroscope_buffer_; |
DISALLOW_COPY_AND_ASSIGN(DeviceMotionEventPumpForTesting); |
}; |
@@ -185,102 +93,90 @@ |
protected: |
void SetUp() override { |
listener_.reset(new MockDeviceMotionListener); |
- motion_pump_.reset(new DeviceMotionEventPumpForTesting()); |
+ motion_pump_.reset(new DeviceMotionEventPumpForTesting); |
+ shared_memory_ = mojo::SharedBufferHandle::Create( |
+ sizeof(device::DeviceMotionHardwareBuffer)); |
+ mapping_ = shared_memory_->Map(sizeof(device::DeviceMotionHardwareBuffer)); |
+ ASSERT_TRUE(mapping_); |
+ memset(buffer(), 0, sizeof(device::DeviceMotionHardwareBuffer)); |
+ } |
+ |
+ void InitBuffer(bool allAvailableSensorsActive) { |
+ device::MotionData& data = buffer()->data; |
+ data.acceleration_x = 1; |
+ data.has_acceleration_x = true; |
+ data.acceleration_y = 2; |
+ data.has_acceleration_y = true; |
+ data.acceleration_z = 3; |
+ data.has_acceleration_z = true; |
+ data.all_available_sensors_are_active = allAvailableSensorsActive; |
} |
MockDeviceMotionListener* listener() { return listener_.get(); } |
DeviceMotionEventPumpForTesting* motion_pump() { return motion_pump_.get(); } |
+ mojo::ScopedSharedBufferHandle handle() { |
+ return shared_memory_->Clone( |
+ mojo::SharedBufferHandle::AccessMode::READ_ONLY); |
+ } |
+ device::DeviceMotionHardwareBuffer* buffer() { |
+ return reinterpret_cast<device::DeviceMotionHardwareBuffer*>( |
+ mapping_.get()); |
+ } |
private: |
base::MessageLoop loop_; |
std::unique_ptr<MockDeviceMotionListener> listener_; |
std::unique_ptr<DeviceMotionEventPumpForTesting> motion_pump_; |
+ mojo::ScopedSharedBufferHandle shared_memory_; |
+ mojo::ScopedSharedBufferMapping mapping_; |
DISALLOW_COPY_AND_ASSIGN(DeviceMotionEventPumpTest); |
}; |
-TEST_F(DeviceMotionEventPumpTest, AllSensorsAreActive) { |
+TEST_F(DeviceMotionEventPumpTest, DidStartPolling) { |
+ InitBuffer(true); |
+ |
motion_pump()->Start(listener()); |
- motion_pump()->SetAccelerometerSensorData(true /* active */, 1, 2, 3); |
- motion_pump()->SetLinearAccelerationSensorData(true /* active */, 4, 5, 6); |
- motion_pump()->SetGyroscopeSensorData(true /* active */, 7, 8, 9); |
- motion_pump()->StartFireEvent(); |
+ motion_pump()->DidStart(handle()); |
base::RunLoop().Run(); |
- device::MotionData received_data = listener()->data(); |
+ const device::MotionData& received_data = listener()->data(); |
EXPECT_TRUE(listener()->did_change_device_motion()); |
- |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_x); |
- EXPECT_EQ(1, received_data.acceleration_including_gravity_x); |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_y); |
- EXPECT_EQ(2, received_data.acceleration_including_gravity_y); |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_z); |
- EXPECT_EQ(3, received_data.acceleration_including_gravity_z); |
- |
EXPECT_TRUE(received_data.has_acceleration_x); |
- EXPECT_EQ(4, received_data.acceleration_x); |
+ EXPECT_EQ(1, static_cast<double>(received_data.acceleration_x)); |
+ EXPECT_TRUE(received_data.has_acceleration_x); |
+ EXPECT_EQ(2, static_cast<double>(received_data.acceleration_y)); |
EXPECT_TRUE(received_data.has_acceleration_y); |
- EXPECT_EQ(5, received_data.acceleration_y); |
+ EXPECT_EQ(3, static_cast<double>(received_data.acceleration_z)); |
EXPECT_TRUE(received_data.has_acceleration_z); |
- EXPECT_EQ(6, received_data.acceleration_z); |
- |
- EXPECT_TRUE(received_data.has_rotation_rate_alpha); |
- EXPECT_EQ(7, received_data.rotation_rate_alpha); |
- EXPECT_TRUE(received_data.has_rotation_rate_beta); |
- EXPECT_EQ(8, received_data.rotation_rate_beta); |
- EXPECT_TRUE(received_data.has_rotation_rate_gamma); |
- EXPECT_EQ(9, received_data.rotation_rate_gamma); |
+ EXPECT_FALSE(received_data.has_acceleration_including_gravity_x); |
+ EXPECT_FALSE(received_data.has_acceleration_including_gravity_y); |
+ EXPECT_FALSE(received_data.has_acceleration_including_gravity_z); |
+ EXPECT_FALSE(received_data.has_rotation_rate_alpha); |
+ EXPECT_FALSE(received_data.has_rotation_rate_beta); |
+ EXPECT_FALSE(received_data.has_rotation_rate_gamma); |
} |
-TEST_F(DeviceMotionEventPumpTest, TwoSensorsAreActive) { |
+TEST_F(DeviceMotionEventPumpTest, DidStartPollingNotAllSensorsActive) { |
+ InitBuffer(false); |
+ |
motion_pump()->Start(listener()); |
- motion_pump()->SetAccelerometerSensorData(true /* active */, 1, 2, 3); |
- motion_pump()->SetLinearAccelerationSensorData(false /* active */, 4, 5, 6); |
- motion_pump()->SetGyroscopeSensorData(true /* active */, 7, 8, 9); |
- motion_pump()->StartFireEvent(); |
+ motion_pump()->DidStart(handle()); |
base::RunLoop().Run(); |
- device::MotionData received_data = listener()->data(); |
- EXPECT_TRUE(listener()->did_change_device_motion()); |
- |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_x); |
- EXPECT_EQ(1, received_data.acceleration_including_gravity_x); |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_y); |
- EXPECT_EQ(2, received_data.acceleration_including_gravity_y); |
- EXPECT_TRUE(received_data.has_acceleration_including_gravity_z); |
- EXPECT_EQ(3, received_data.acceleration_including_gravity_z); |
- |
+ const device::MotionData& received_data = listener()->data(); |
+ // No change in device motion because all_available_sensors_are_active is |
+ // false. |
+ EXPECT_FALSE(listener()->did_change_device_motion()); |
+ EXPECT_FALSE(received_data.has_acceleration_x); |
EXPECT_FALSE(received_data.has_acceleration_x); |
EXPECT_FALSE(received_data.has_acceleration_y); |
EXPECT_FALSE(received_data.has_acceleration_z); |
- |
- EXPECT_TRUE(received_data.has_rotation_rate_alpha); |
- EXPECT_EQ(7, received_data.rotation_rate_alpha); |
- EXPECT_TRUE(received_data.has_rotation_rate_beta); |
- EXPECT_EQ(8, received_data.rotation_rate_beta); |
- EXPECT_TRUE(received_data.has_rotation_rate_gamma); |
- EXPECT_EQ(9, received_data.rotation_rate_gamma); |
-} |
- |
-TEST_F(DeviceMotionEventPumpTest, NoActiveSensors) { |
- motion_pump()->Start(listener()); |
- motion_pump()->StartFireEvent(); |
- |
- base::RunLoop().Run(); |
- |
- device::MotionData received_data = listener()->data(); |
- EXPECT_TRUE(listener()->did_change_device_motion()); |
- |
- EXPECT_FALSE(received_data.has_acceleration_x); |
- EXPECT_FALSE(received_data.has_acceleration_y); |
- EXPECT_FALSE(received_data.has_acceleration_z); |
- |
EXPECT_FALSE(received_data.has_acceleration_including_gravity_x); |
EXPECT_FALSE(received_data.has_acceleration_including_gravity_y); |
EXPECT_FALSE(received_data.has_acceleration_including_gravity_z); |
- |
EXPECT_FALSE(received_data.has_rotation_rate_alpha); |
EXPECT_FALSE(received_data.has_rotation_rate_beta); |
EXPECT_FALSE(received_data.has_rotation_rate_gamma); |
@@ -293,11 +189,11 @@ |
EXPECT_GE(60, base::Time::kMicrosecondsPerSecond / |
motion_pump()->pump_delay_microseconds()); |
+ InitBuffer(true); |
+ |
+ motion_pump()->set_stop_on_fire_event(false); |
motion_pump()->Start(listener()); |
- motion_pump()->SetLinearAccelerationSensorData(true /* active */, 4, 5, 6); |
- |
- motion_pump()->set_stop_on_fire_event(false); |
- motion_pump()->StartFireEvent(); |
+ motion_pump()->DidStart(handle()); |
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |