Commit 5b2a35f8 authored by Jun Cai's avatar Jun Cai Committed by Commit Bot

Make sensors share memory in DeviceOrientation and DeviceMotion tests

Currently in the DeviceOrientation and DeviceMotion unit tests and
browser tests, each fake sensor creates a new shared memory handle.
While in the production code, only one shared memory handle is created
and all sensors share it, and write data to that shared memory using
different offset. This CL updates the FakeSensor and FakeSensorProvider
to match the behavior of production code.

Bug: 824591
Change-Id: I545d73b0d864a3b7093a387d007cab26fb912d91
Reviewed-on: https://chromium-review.googlesource.com/978856
Commit-Queue: Jun Cai <juncai@chromium.org>
Reviewed-by: default avatarTim Volodine <timvolodine@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#547848}
parent dd3590f2
......@@ -28,6 +28,7 @@
#include "services/device/public/cpp/generic_sensor/platform_sensor_configuration.h"
#include "services/device/public/cpp/generic_sensor/sensor_reading.h"
#include "services/device/public/cpp/generic_sensor/sensor_traits.h"
#include "services/device/public/cpp/test/fake_sensor_and_provider.h"
#include "services/device/public/mojom/constants.mojom.h"
#include "services/device/public/mojom/sensor.mojom.h"
#include "services/device/public/mojom/sensor_provider.mojom.h"
......@@ -37,138 +38,7 @@ namespace content {
namespace {
class FakeAmbientLightSensor : public device::mojom::Sensor {
public:
FakeAmbientLightSensor() {
shared_buffer_handle_ = mojo::SharedBufferHandle::Create(
sizeof(device::SensorReadingSharedBuffer) *
static_cast<uint64_t>(device::mojom::SensorType::LAST));
if (!shared_buffer_handle_.is_valid())
return;
// Create read/write mapping now, to ensure it is kept writable
// after the region is sealed read-only on Android.
shared_buffer_mapping_ = shared_buffer_handle_->MapAtOffset(
device::mojom::SensorInitParams::kReadBufferSizeForTests,
GetBufferOffset());
}
~FakeAmbientLightSensor() override = default;
// device::mojom::Sensor implemenation:
void AddConfiguration(
const device::PlatformSensorConfiguration& configuration,
AddConfigurationCallback callback) override {
std::move(callback).Run(true);
SensorReadingChanged();
}
void GetDefaultConfiguration(
GetDefaultConfigurationCallback callback) override {
std::move(callback).Run(GetDefaultConfiguration());
}
void RemoveConfiguration(
const device::PlatformSensorConfiguration& configuration) override {}
void Suspend() override {}
void Resume() override {}
void ConfigureReadingChangeNotifications(bool enabled) override {}
device::PlatformSensorConfiguration GetDefaultConfiguration() {
return device::PlatformSensorConfiguration(
device::SensorTraits<
device::mojom::SensorType::AMBIENT_LIGHT>::kDefaultFrequency);
}
device::mojom::ReportingMode GetReportingMode() {
return device::mojom::ReportingMode::ON_CHANGE;
}
double GetMaximumSupportedFrequency() {
return device::SensorTraits<
device::mojom::SensorType::AMBIENT_LIGHT>::kMaxAllowedFrequency;
}
double GetMinimumSupportedFrequency() { return 1.0; }
device::mojom::SensorClientRequest GetClient() {
return mojo::MakeRequest(&client_);
}
mojo::ScopedSharedBufferHandle GetSharedBufferHandle() {
return shared_buffer_handle_->Clone(
mojo::SharedBufferHandle::AccessMode::READ_ONLY);
}
uint64_t GetBufferOffset() {
return device::SensorReadingSharedBuffer::GetOffset(
device::mojom::SensorType::AMBIENT_LIGHT);
}
void SensorReadingChanged() {
if (!shared_buffer_mapping_.get())
return;
device::SensorReading reading;
reading.als.timestamp =
(base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
reading.als.value = 50;
device::SensorReadingSharedBuffer* buffer =
static_cast<device::SensorReadingSharedBuffer*>(
shared_buffer_mapping_.get());
auto& seqlock = buffer->seqlock.value();
seqlock.WriteBegin();
buffer->reading = reading;
seqlock.WriteEnd();
if (client_)
client_->SensorReadingChanged();
}
private:
mojo::ScopedSharedBufferHandle shared_buffer_handle_;
mojo::ScopedSharedBufferMapping shared_buffer_mapping_;
device::mojom::SensorClientPtr client_;
DISALLOW_COPY_AND_ASSIGN(FakeAmbientLightSensor);
};
class FakeSensorProvider : public device::mojom::SensorProvider {
public:
FakeSensorProvider() = default;
~FakeSensorProvider() override = default;
// device::mojom::sensorProvider implementation.
void GetSensor(device::mojom::SensorType type,
GetSensorCallback callback) override {
switch (type) {
case device::mojom::SensorType::AMBIENT_LIGHT: {
auto sensor = std::make_unique<FakeAmbientLightSensor>();
auto init_params = device::mojom::SensorInitParams::New();
init_params->client_request = sensor->GetClient();
init_params->memory = sensor->GetSharedBufferHandle();
init_params->buffer_offset = sensor->GetBufferOffset();
init_params->default_configuration = sensor->GetDefaultConfiguration();
init_params->maximum_frequency = sensor->GetMaximumSupportedFrequency();
init_params->minimum_frequency = sensor->GetMinimumSupportedFrequency();
mojo::MakeStrongBinding(std::move(sensor),
mojo::MakeRequest(&init_params->sensor));
std::move(callback).Run(device::mojom::SensorCreationResult::SUCCESS,
std::move(init_params));
break;
}
default:
NOTIMPLEMENTED();
}
}
private:
DISALLOW_COPY_AND_ASSIGN(FakeSensorProvider);
};
using device::FakeSensorProvider;
class GenericSensorBrowserTest : public ContentBrowserTest {
public:
......@@ -227,11 +97,12 @@ class GenericSensorBrowserTest : public ContentBrowserTest {
if (!sensor_provider_available_)
return;
if (!fake_sensor_provider_)
if (!fake_sensor_provider_) {
fake_sensor_provider_ = std::make_unique<FakeSensorProvider>();
fake_sensor_provider_->SetAmbientLightSensorData(50);
}
sensor_provider_bindings_.AddBinding(
fake_sensor_provider_.get(),
fake_sensor_provider_->Bind(
device::mojom::SensorProviderRequest(std::move(handle)));
}
......@@ -247,7 +118,6 @@ class GenericSensorBrowserTest : public ContentBrowserTest {
base::WaitableEvent io_loop_finished_event_;
bool sensor_provider_available_ = true;
std::unique_ptr<FakeSensorProvider> fake_sensor_provider_;
mojo::BindingSet<device::mojom::SensorProvider> sensor_provider_bindings_;
DISALLOW_COPY_AND_ASSIGN(GenericSensorBrowserTest);
};
......
......@@ -15,9 +15,9 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "content/public/test/test_utils.h"
#include "content/renderer/device_sensors/fake_sensor_and_provider.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "services/device/public/cpp/generic_sensor/motion_data.h"
#include "services/device/public/cpp/test/fake_sensor_and_provider.h"
#include "services/device/public/mojom/sensor.mojom.h"
#include "services/device/public/mojom/sensor_provider.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -27,6 +27,8 @@
namespace content {
using device::FakeSensorProvider;
class MockDeviceMotionListener : public blink::WebDeviceMotionListener {
public:
MockDeviceMotionListener()
......@@ -216,9 +218,9 @@ TEST_F(DeviceMotionEventPumpTest, AllSensorsAreActive) {
ExpectAllThreeSensorsStateToBe(DeviceMotionEventPump::SensorState::ACTIVE);
sensor_provider()->SetAccelerometerData(1, 2, 3);
sensor_provider()->SetLinearAccelerationSensorData(4, 5, 6);
sensor_provider()->SetGyroscopeData(7, 8, 9);
sensor_provider()->UpdateAccelerometerData(1, 2, 3);
sensor_provider()->UpdateLinearAccelerationSensorData(4, 5, 6);
sensor_provider()->UpdateGyroscopeData(7, 8, 9);
FireEvent();
......@@ -262,8 +264,8 @@ TEST_F(DeviceMotionEventPumpTest, TwoSensorsAreActive) {
DeviceMotionEventPump::SensorState::NOT_INITIALIZED);
ExpectGyroscopeStateToBe(DeviceMotionEventPump::SensorState::ACTIVE);
sensor_provider()->SetAccelerometerData(1, 2, 3);
sensor_provider()->SetGyroscopeData(7, 8, 9);
sensor_provider()->UpdateAccelerometerData(1, 2, 3);
sensor_provider()->UpdateGyroscopeData(7, 8, 9);
FireEvent();
......@@ -302,9 +304,9 @@ TEST_F(DeviceMotionEventPumpTest, SomeSensorDataFieldsNotAvailable) {
ExpectAllThreeSensorsStateToBe(DeviceMotionEventPump::SensorState::ACTIVE);
sensor_provider()->SetAccelerometerData(NAN, 2, 3);
sensor_provider()->SetLinearAccelerationSensorData(4, NAN, 6);
sensor_provider()->SetGyroscopeData(7, 8, NAN);
sensor_provider()->UpdateAccelerometerData(NAN, 2, 3);
sensor_provider()->UpdateLinearAccelerationSensorData(4, NAN, 6);
sensor_provider()->UpdateGyroscopeData(7, 8, NAN);
FireEvent();
......@@ -379,15 +381,15 @@ TEST_F(DeviceMotionEventPumpTest,
FireEvent();
EXPECT_FALSE(listener()->did_change_device_motion());
sensor_provider()->SetAccelerometerData(1, 2, 3);
sensor_provider()->UpdateAccelerometerData(1, 2, 3);
FireEvent();
EXPECT_FALSE(listener()->did_change_device_motion());
sensor_provider()->SetLinearAccelerationSensorData(4, 5, 6);
sensor_provider()->UpdateLinearAccelerationSensorData(4, 5, 6);
FireEvent();
EXPECT_FALSE(listener()->did_change_device_motion());
sensor_provider()->SetGyroscopeData(7, 8, 9);
sensor_provider()->UpdateGyroscopeData(7, 8, 9);
FireEvent();
// Event is fired only after all the available sensors have data.
EXPECT_TRUE(listener()->did_change_device_motion());
......@@ -410,9 +412,9 @@ TEST_F(DeviceMotionEventPumpTest, PumpThrottlesEventRate) {
ExpectAllThreeSensorsStateToBe(DeviceMotionEventPump::SensorState::ACTIVE);
sensor_provider()->SetAccelerometerData(1, 2, 3);
sensor_provider()->SetLinearAccelerationSensorData(4, 5, 6);
sensor_provider()->SetGyroscopeData(7, 8, 9);
sensor_provider()->UpdateAccelerometerData(1, 2, 3);
sensor_provider()->UpdateLinearAccelerationSensorData(4, 5, 6);
sensor_provider()->UpdateGyroscopeData(7, 8, 9);
blink::scheduler::GetSingleThreadTaskRunnerForTesting()->PostDelayedTask(
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
......
......@@ -12,9 +12,9 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "content/public/test/test_utils.h"
#include "content/renderer/device_sensors/fake_sensor_and_provider.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "services/device/public/cpp/generic_sensor/orientation_data.h"
#include "services/device/public/cpp/test/fake_sensor_and_provider.h"
#include "services/device/public/mojom/sensor.mojom.h"
#include "services/device/public/mojom/sensor_provider.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -29,6 +29,8 @@ constexpr double kEpsilon = 1e-8;
namespace content {
using device::FakeSensorProvider;
class MockDeviceOrientationListener
: public blink::WebDeviceOrientationListener {
public:
......@@ -344,7 +346,7 @@ TEST_F(DeviceOrientationEventPumpTest, SensorIsActive) {
ExpectRelativeOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetRelativeOrientationSensorData(
sensor_provider()->UpdateRelativeOrientationSensorData(
1 /* alpha */, 2 /* beta */, 3 /* gamma */);
FireEvent();
......@@ -379,7 +381,7 @@ TEST_F(DeviceOrientationEventPumpTest, SensorIsActiveWithSensorFallback) {
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, 5 /* beta */, 6 /* gamma */);
FireEvent();
......@@ -415,7 +417,7 @@ TEST_F(DeviceOrientationEventPumpTest, SomeSensorDataFieldsNotAvailable) {
ExpectRelativeOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetRelativeOrientationSensorData(
sensor_provider()->UpdateRelativeOrientationSensorData(
NAN /* alpha */, 2 /* beta */, 3 /* gamma */);
FireEvent();
......@@ -448,7 +450,7 @@ TEST_F(DeviceOrientationEventPumpTest,
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, NAN /* beta */, 6 /* gamma */);
FireEvent();
......@@ -556,7 +558,7 @@ TEST_F(DeviceOrientationEventPumpTest, UpdateRespectsOrientationThreshold) {
ExpectRelativeOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetRelativeOrientationSensorData(
sensor_provider()->UpdateRelativeOrientationSensorData(
1 /* alpha */, 2 /* beta */, 3 /* gamma */);
FireEvent();
......@@ -576,7 +578,7 @@ TEST_F(DeviceOrientationEventPumpTest, UpdateRespectsOrientationThreshold) {
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetRelativeOrientationSensorData(
sensor_provider()->UpdateRelativeOrientationSensorData(
1 + DeviceOrientationEventPump::kOrientationThreshold / 2.0 /* alpha */,
2 /* beta */, 3 /* gamma */);
......@@ -595,7 +597,7 @@ TEST_F(DeviceOrientationEventPumpTest, UpdateRespectsOrientationThreshold) {
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetRelativeOrientationSensorData(
sensor_provider()->UpdateRelativeOrientationSensorData(
1 + DeviceOrientationEventPump::kOrientationThreshold /* alpha */,
2 /* beta */, 3 /* gamma */);
......@@ -631,7 +633,7 @@ TEST_F(DeviceOrientationEventPumpTest,
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, 5 /* beta */, 6 /* gamma */);
FireEvent();
......@@ -654,7 +656,7 @@ TEST_F(DeviceOrientationEventPumpTest,
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */,
5 + DeviceOrientationEventPump::kOrientationThreshold / 2.0 /* beta */,
6 /* gamma */);
......@@ -674,7 +676,7 @@ TEST_F(DeviceOrientationEventPumpTest,
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */,
5 + DeviceOrientationEventPump::kOrientationThreshold +
kEpsilon /* beta */,
......@@ -845,7 +847,7 @@ TEST_F(DeviceAbsoluteOrientationEventPumpTest, SensorIsActive) {
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, 5 /* beta */, 6 /* gamma */);
FireEvent();
......@@ -875,7 +877,7 @@ TEST_F(DeviceAbsoluteOrientationEventPumpTest,
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, NAN /* beta */, 6 /* gamma */);
FireEvent();
......@@ -948,7 +950,7 @@ TEST_F(DeviceAbsoluteOrientationEventPumpTest,
ExpectAbsoluteOrientationSensorStateToBe(
DeviceOrientationEventPump::SensorState::ACTIVE);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */, 5 /* beta */, 6 /* gamma */);
FireEvent();
......@@ -966,7 +968,7 @@ TEST_F(DeviceAbsoluteOrientationEventPumpTest,
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */,
5 + DeviceOrientationEventPump::kOrientationThreshold / 2.0 /* beta */,
6 /* gamma */);
......@@ -986,7 +988,7 @@ TEST_F(DeviceAbsoluteOrientationEventPumpTest,
listener()->set_did_change_device_orientation(false);
sensor_provider()->SetAbsoluteOrientationSensorData(
sensor_provider()->UpdateAbsoluteOrientationSensorData(
4 /* alpha */,
5 + DeviceOrientationEventPump::kOrientationThreshold +
kEpsilon /* beta */,
......
......@@ -908,6 +908,7 @@ test("content_browsertests") {
"//services/catalog:lib",
"//services/device/public/cpp:device_features",
"//services/device/public/cpp/generic_sensor",
"//services/device/public/cpp/test:test_support",
"//services/device/public/mojom",
"//services/device/public/mojom:generic_sensor",
"//services/network:test_support",
......@@ -1570,8 +1571,6 @@ test("content_unittests") {
"../renderer/child_frame_compositing_helper_unittest.cc",
"../renderer/device_sensors/device_motion_event_pump_unittest.cc",
"../renderer/device_sensors/device_orientation_event_pump_unittest.cc",
"../renderer/device_sensors/fake_sensor_and_provider.cc",
"../renderer/device_sensors/fake_sensor_and_provider.h",
"../renderer/dom_storage/dom_storage_cached_area_unittest.cc",
"../renderer/dom_storage/local_storage_cached_area_unittest.cc",
"../renderer/dom_storage/local_storage_cached_areas_unittest.cc",
......@@ -1721,6 +1720,7 @@ test("content_unittests") {
"//printing",
"//services/catalog:lib",
"//services/device/public/cpp/generic_sensor",
"//services/device/public/cpp/test:test_support",
"//services/device/public/mojom",
"//services/file:lib",
"//services/file/public/mojom",
......
......@@ -37,10 +37,44 @@ double GetSensorMaxAllowedFrequency(SensorType type) {
case SensorType::RELATIVE_ORIENTATION_QUATERNION:
return SensorTraits<
SensorType::RELATIVE_ORIENTATION_QUATERNION>::kMaxAllowedFrequency;
default:
NOTREACHED() << "Unknown sensor type " << type;
return SensorTraits<SensorType::LAST>::kMaxAllowedFrequency;
// No default so the compiler will warn us if a new type is added.
}
NOTREACHED() << "Unknown sensor type " << type;
return SensorTraits<SensorType::LAST>::kMaxAllowedFrequency;
}
double GetSensorDefaultFrequency(mojom::SensorType type) {
switch (type) {
case SensorType::AMBIENT_LIGHT:
return SensorTraits<SensorType::AMBIENT_LIGHT>::kDefaultFrequency;
case SensorType::PROXIMITY:
return SensorTraits<SensorType::PROXIMITY>::kDefaultFrequency;
case SensorType::ACCELEROMETER:
return SensorTraits<SensorType::ACCELEROMETER>::kDefaultFrequency;
case SensorType::LINEAR_ACCELERATION:
return SensorTraits<SensorType::LINEAR_ACCELERATION>::kDefaultFrequency;
case SensorType::GYROSCOPE:
return SensorTraits<SensorType::GYROSCOPE>::kDefaultFrequency;
case SensorType::MAGNETOMETER:
return SensorTraits<SensorType::MAGNETOMETER>::kDefaultFrequency;
case SensorType::PRESSURE:
return SensorTraits<SensorType::PRESSURE>::kDefaultFrequency;
case SensorType::ABSOLUTE_ORIENTATION_EULER_ANGLES:
return SensorTraits<
SensorType::ABSOLUTE_ORIENTATION_EULER_ANGLES>::kDefaultFrequency;
case SensorType::ABSOLUTE_ORIENTATION_QUATERNION:
return SensorTraits<
SensorType::ABSOLUTE_ORIENTATION_QUATERNION>::kDefaultFrequency;
case SensorType::RELATIVE_ORIENTATION_EULER_ANGLES:
return SensorTraits<
SensorType::RELATIVE_ORIENTATION_EULER_ANGLES>::kDefaultFrequency;
case SensorType::RELATIVE_ORIENTATION_QUATERNION:
return SensorTraits<
SensorType::RELATIVE_ORIENTATION_QUATERNION>::kDefaultFrequency;
// No default so the compiler will warn us if a new type is added.
}
NOTREACHED() << "Unknown sensor type " << type;
return SensorTraits<SensorType::LAST>::kDefaultFrequency;
}
} // namespace device
......@@ -30,6 +30,8 @@ struct SensorTraits<mojom::SensorType::MAGNETOMETER> {
double GetSensorMaxAllowedFrequency(mojom::SensorType type);
double GetSensorDefaultFrequency(mojom::SensorType type);
} // namespace device
#endif // SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_TRAITS_H_
......@@ -3,18 +3,25 @@
# found in the LICENSE file.
source_set("test_support") {
testonly = true
sources = [
"fake_sensor_and_provider.cc",
"fake_sensor_and_provider.h",
"test_wake_lock_provider.cc",
"test_wake_lock_provider.h",
]
public_deps = [
"//base",
"//services/device/public/cpp/generic_sensor",
"//services/device/public/mojom",
"//services/service_manager/public/cpp",
]
deps = [
"//mojo/public/cpp/bindings",
"//mojo/public/cpp/system",
"//testing/gtest",
]
}
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_DEVICE_SENSORS_FAKE_SENSOR_AND_PROVIDER_H_
#define CONTENT_RENDERER_DEVICE_SENSORS_FAKE_SENSOR_AND_PROVIDER_H_
#ifndef SERVICES_DEVICE_PUBLIC_CPP_TEST_FAKE_SENSOR_AND_PROVIDER_H_
#define SERVICES_DEVICE_PUBLIC_CPP_TEST_FAKE_SENSOR_AND_PROVIDER_H_
#include "base/macros.h"
#include "mojo/public/cpp/bindings/binding.h"
......@@ -12,125 +12,140 @@
#include "services/device/public/mojom/sensor.mojom.h"
#include "services/device/public/mojom/sensor_provider.mojom.h"
// TODO(juncai): Move this file in a new
// //services/device/public/cpp/generic_sensor:test_support source_set and
// share it with device_sensor_browsertest.cc and generic_sensor_browsertest.cc.
namespace device {
namespace content {
class FakeSensor : public device::mojom::Sensor {
class FakeSensor : public mojom::Sensor {
public:
FakeSensor(device::mojom::SensorType sensor_type);
FakeSensor(mojom::SensorType sensor_type, SensorReadingSharedBuffer* buffer);
~FakeSensor() override;
// device::mojom::Sensor:
void AddConfiguration(
const device::PlatformSensorConfiguration& configuration,
AddConfigurationCallback callback) override;
// mojom::Sensor:
void AddConfiguration(const PlatformSensorConfiguration& configuration,
AddConfigurationCallback callback) override;
void GetDefaultConfiguration(
GetDefaultConfigurationCallback callback) override;
void RemoveConfiguration(
const device::PlatformSensorConfiguration& configuration) override;
const PlatformSensorConfiguration& configuration) override;
void Suspend() override;
void Resume() override;
void ConfigureReadingChangeNotifications(bool enabled) override;
device::PlatformSensorConfiguration GetDefaultConfiguration();
device::mojom::ReportingMode GetReportingMode();
PlatformSensorConfiguration GetDefaultConfiguration();
mojom::ReportingMode GetReportingMode();
double GetMaximumSupportedFrequency();
double GetMinimumSupportedFrequency();
device::mojom::SensorClientRequest GetClient();
mojom::SensorClientRequest GetClient();
mojo::ScopedSharedBufferHandle GetSharedBufferHandle();
uint64_t GetBufferOffset();
void SetReading(device::SensorReading reading);
void SetReading(SensorReading reading);
private:
void SensorReadingChanged();
device::mojom::SensorType sensor_type_;
mojom::SensorType sensor_type_;
SensorReadingSharedBuffer* buffer_;
bool reading_notification_enabled_ = true;
mojo::ScopedSharedBufferHandle shared_buffer_handle_;
mojo::ScopedSharedBufferMapping shared_buffer_mapping_;
device::mojom::SensorClientPtr client_;
device::SensorReading reading_;
mojom::SensorClientPtr client_;
SensorReading reading_;
DISALLOW_COPY_AND_ASSIGN(FakeSensor);
};
class FakeSensorProvider : public device::mojom::SensorProvider {
class FakeSensorProvider : public mojom::SensorProvider {
public:
FakeSensorProvider();
~FakeSensorProvider() override;
// device::mojom::sensorProvider:
void GetSensor(device::mojom::SensorType type,
GetSensorCallback callback) override;
// mojom::sensorProvider:
void GetSensor(mojom::SensorType type, GetSensorCallback callback) override;
void Bind(device::mojom::SensorProviderRequest request);
void Bind(mojom::SensorProviderRequest request);
void set_ambient_light_sensor_is_available(
bool ambient_light_sensor_is_available) {
ambient_light_sensor_is_available_ = ambient_light_sensor_is_available;
}
void set_accelerometer_is_available(bool accelerometer_is_available) {
accelerometer_is_available_ = accelerometer_is_available;
}
void set_linear_acceleration_sensor_is_available(
bool linear_acceleration_sensor_is_available) {
linear_acceleration_sensor_is_available_ =
linear_acceleration_sensor_is_available;
}
void set_gyroscope_is_available(bool gyroscope_is_available) {
gyroscope_is_available_ = gyroscope_is_available;
}
void set_relative_orientation_sensor_is_available(
bool relative_orientation_sensor_is_available) {
relative_orientation_sensor_is_available_ =
relative_orientation_sensor_is_available;
}
void set_absolute_orientation_sensor_is_available(
bool absolute_orientation_sensor_is_available) {
absolute_orientation_sensor_is_available_ =
absolute_orientation_sensor_is_available;
}
void SetAmbientLightSensorData(double value);
void SetAccelerometerData(double x, double y, double z);
void SetLinearAccelerationSensorData(double x, double y, double z);
void SetGyroscopeData(double x, double y, double z);
void SetRelativeOrientationSensorData(double alpha,
double beta,
double gamma);
void SetAbsoluteOrientationSensorData(double alpha,
double beta,
double gamma);
// The Update* functions here write the sensor data to the shared memory and
// notify sensor's client that the sensor data has changed. The Set*
// functions above only set |*_reading_| member variable for corresponding
// sensor which will be the value when the sensor is first created.
void UpdateAmbientLightSensorData(double value);
void UpdateAccelerometerData(double x, double y, double z);
void UpdateLinearAccelerationSensorData(double x, double y, double z);
void UpdateGyroscopeData(double x, double y, double z);
void UpdateRelativeOrientationSensorData(double alpha,
double beta,
double gamma);
void UpdateAbsoluteOrientationSensorData(double alpha,
double beta,
double gamma);
private:
bool CreateSharedBufferIfNeeded();
SensorReadingSharedBuffer* GetSensorReadingSharedBufferForType(
mojom::SensorType type);
// The following sensor pointers are owned by the caller of
// FakeSensorProvider::GetSensor().
FakeSensor* ambient_light_sensor_ = nullptr;
FakeSensor* accelerometer_ = nullptr;
FakeSensor* linear_acceleration_sensor_ = nullptr;
FakeSensor* gyroscope_ = nullptr;
FakeSensor* relative_orientation_sensor_ = nullptr;
FakeSensor* absolute_orientation_sensor_ = nullptr;
SensorReading ambient_light_sensor_reading_;
SensorReading accelerometer_reading_;
SensorReading linear_acceleration_sensor_reading_;
SensorReading gyroscope_reading_;
SensorReading relative_orientation_sensor_reading_;
SensorReading absolute_orientation_sensor_reading_;
bool ambient_light_sensor_is_available_ = true;
bool accelerometer_is_available_ = true;
bool linear_acceleration_sensor_is_available_ = true;
bool gyroscope_is_available_ = true;
bool relative_orientation_sensor_is_available_ = true;
bool absolute_orientation_sensor_is_available_ = true;
mojo::Binding<device::mojom::SensorProvider> binding_;
mojo::Binding<mojom::SensorProvider> binding_;
mojo::ScopedSharedBufferHandle shared_buffer_handle_;
mojo::ScopedSharedBufferMapping shared_buffer_mapping_;
DISALLOW_COPY_AND_ASSIGN(FakeSensorProvider);
};
} // namespace content
} // namespace device
#endif // CONTENT_RENDERER_DEVICE_SENSORS_FAKE_SENSOR_AND_PROVIDER_H_
#endif // SERVICES_DEVICE_PUBLIC_CPP_TEST_FAKE_SENSOR_AND_PROVIDER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment