diff options
Diffstat (limited to 'chromium/services/device')
27 files changed, 130 insertions, 118 deletions
diff --git a/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.cc b/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.cc index 3f69846b8db..166f9951490 100644 --- a/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.cc +++ b/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.cc @@ -12,10 +12,11 @@ using ::testing::_; namespace device { -FakePlatformSensor::FakePlatformSensor(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, - PlatformSensorProvider* provider) - : PlatformSensor(type, std::move(mapping), provider) { +FakePlatformSensor::FakePlatformSensor( + mojom::SensorType type, + SensorReadingSharedBuffer* reading_buffer, + PlatformSensorProvider* provider) + : PlatformSensor(type, reading_buffer, provider) { ON_CALL(*this, StartSensor(_)) .WillByDefault( Invoke([this](const PlatformSensorConfiguration& configuration) { @@ -68,18 +69,20 @@ FakePlatformSensorProvider::FakePlatformSensorProvider() { FakePlatformSensorProvider::~FakePlatformSensorProvider() = default; -mojo::ScopedSharedBufferMapping FakePlatformSensorProvider::GetMapping( +SensorReadingSharedBuffer* FakePlatformSensorProvider::GetSensorReadingBuffer( mojom::SensorType type) { - return CreateSharedBufferIfNeeded() ? MapSharedBufferForType(type) : nullptr; + return CreateSharedBufferIfNeeded() + ? GetSensorReadingSharedBufferForType(type) + : nullptr; } void FakePlatformSensorProvider::CreateSensorInternal( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { DCHECK(type >= mojom::SensorType::FIRST && type <= mojom::SensorType::LAST); auto sensor = - base::MakeRefCounted<FakePlatformSensor>(type, std::move(mapping), this); + base::MakeRefCounted<FakePlatformSensor>(type, reading_buffer, this); DoCreateSensorInternal(type, std::move(sensor), callback); } diff --git a/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.h b/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.h index 53c646ced72..79cf9cd1fc1 100644 --- a/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.h +++ b/chromium/services/device/generic_sensor/fake_platform_sensor_and_provider.h @@ -15,7 +15,7 @@ namespace device { class FakePlatformSensor : public PlatformSensor { public: FakePlatformSensor(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider); // PlatformSensor: @@ -51,11 +51,11 @@ class FakePlatformSensorProvider : public PlatformSensorProvider { scoped_refptr<PlatformSensor>, const CreateSensorCallback&)); - mojo::ScopedSharedBufferMapping GetMapping(mojom::SensorType type); + SensorReadingSharedBuffer* GetSensorReadingBuffer(mojom::SensorType type); private: void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) override; DISALLOW_COPY_AND_ASSIGN(FakePlatformSensorProvider); diff --git a/chromium/services/device/generic_sensor/platform_sensor.cc b/chromium/services/device/generic_sensor/platform_sensor.cc index 36b22f4182a..7bc6b95fba3 100644 --- a/chromium/services/device/generic_sensor/platform_sensor.cc +++ b/chromium/services/device/generic_sensor/platform_sensor.cc @@ -16,10 +16,10 @@ namespace device { PlatformSensor::PlatformSensor(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider) : task_runner_(base::ThreadTaskRunnerHandle::Get()), - shared_buffer_mapping_(std::move(mapping)), + reading_buffer_(reading_buffer), type_(type), provider_(provider), weak_factory_(this) {} @@ -103,10 +103,8 @@ void PlatformSensor::RemoveClient(Client* client) { bool PlatformSensor::GetLatestReading(SensorReading* result) { if (!shared_buffer_reader_) { - const auto* buffer = static_cast<const device::SensorReadingSharedBuffer*>( - shared_buffer_mapping_.get()); shared_buffer_reader_ = - std::make_unique<SensorReadingSharedBufferReader>(buffer); + std::make_unique<SensorReadingSharedBufferReader>(reading_buffer_); } return shared_buffer_reader_->GetReading(result); @@ -121,8 +119,7 @@ void PlatformSensor::UpdateSharedBufferAndNotifyClients( } void PlatformSensor::UpdateSharedBuffer(const SensorReading& reading) { - ReadingBuffer* buffer = - static_cast<ReadingBuffer*>(shared_buffer_mapping_.get()); + ReadingBuffer* buffer = reading_buffer_; auto& seqlock = buffer->seqlock.value(); seqlock.WriteBegin(); buffer->reading = reading; diff --git a/chromium/services/device/generic_sensor/platform_sensor.h b/chromium/services/device/generic_sensor/platform_sensor.h index 7387f8d2d7a..76aac492cd0 100644 --- a/chromium/services/device/generic_sensor/platform_sensor.h +++ b/chromium/services/device/generic_sensor/platform_sensor.h @@ -78,7 +78,7 @@ class PlatformSensor : public base::RefCountedThreadSafe<PlatformSensor> { protected: virtual ~PlatformSensor(); PlatformSensor(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider); using ReadingBuffer = SensorReadingSharedBuffer; @@ -106,7 +106,7 @@ class PlatformSensor : public base::RefCountedThreadSafe<PlatformSensor> { private: friend class base::RefCountedThreadSafe<PlatformSensor>; - const mojo::ScopedSharedBufferMapping shared_buffer_mapping_; + SensorReadingSharedBuffer* reading_buffer_; // NOTE: Owned by |provider_|. std::unique_ptr<SensorReadingSharedBufferReader> shared_buffer_reader_; mojom::SensorType type_; ConfigMap config_map_; diff --git a/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.cc b/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.cc index 8c1696c71bd..1d0afc6fc80 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.cc @@ -35,9 +35,9 @@ namespace device { using mojom::SensorType; PlatformSensorAccelerometerMac::PlatformSensorAccelerometerMac( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider) - : PlatformSensor(SensorType::ACCELEROMETER, std::move(mapping), provider), + : PlatformSensor(SensorType::ACCELEROMETER, reading_buffer, provider), sudden_motion_sensor_(SuddenMotionSensor::Create()) {} PlatformSensorAccelerometerMac::~PlatformSensorAccelerometerMac() = default; diff --git a/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.h b/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.h index 41a662ca69f..8e8dbb03ab6 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.h +++ b/chromium/services/device/generic_sensor/platform_sensor_accelerometer_mac.h @@ -23,7 +23,7 @@ class PlatformSensorAccelerometerMac : public PlatformSensor { public: // Construct a platform sensor of type ACCELEROMETER, given a buffer |mapping| // where readings will be written. - PlatformSensorAccelerometerMac(mojo::ScopedSharedBufferMapping mapping, + PlatformSensorAccelerometerMac(SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider); mojom::ReportingMode GetReportingMode() override; diff --git a/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.cc b/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.cc index b99ed16d9fa..c20fd92073b 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.cc @@ -50,9 +50,9 @@ enum LmuFunctionIndex { }; PlatformSensorAmbientLightMac::PlatformSensorAmbientLightMac( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider) - : PlatformSensor(SensorType::AMBIENT_LIGHT, std::move(mapping), provider), + : PlatformSensor(SensorType::AMBIENT_LIGHT, reading_buffer, provider), light_sensor_port_(nullptr), current_lux_(0.0) {} diff --git a/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.h b/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.h index 86c4871e2a4..012647b41fc 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.h +++ b/chromium/services/device/generic_sensor/platform_sensor_ambient_light_mac.h @@ -21,7 +21,7 @@ class PlatformSensorAmbientLightMac : public PlatformSensor { public: // Construct a platform sensor of AMBIENT_LIGHT, given a buffer |mapping| // to write the result back. - PlatformSensorAmbientLightMac(mojo::ScopedSharedBufferMapping mapping, + PlatformSensorAmbientLightMac(SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider); mojom::ReportingMode GetReportingMode() override; diff --git a/chromium/services/device/generic_sensor/platform_sensor_android.cc b/chromium/services/device/generic_sensor/platform_sensor_android.cc index 85db6a70388..1be0f539a72 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_android.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_android.cc @@ -14,10 +14,10 @@ namespace device { PlatformSensorAndroid::PlatformSensorAndroid( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, const JavaRef<jobject>& java_sensor) - : PlatformSensor(type, std::move(mapping), provider) { + : PlatformSensor(type, reading_buffer, provider) { JNIEnv* env = AttachCurrentThread(); j_object_.Reset(java_sensor); diff --git a/chromium/services/device/generic_sensor/platform_sensor_android.h b/chromium/services/device/generic_sensor/platform_sensor_android.h index fecf930987a..7e3dd3d470d 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_android.h +++ b/chromium/services/device/generic_sensor/platform_sensor_android.h @@ -14,7 +14,7 @@ namespace device { class PlatformSensorAndroid : public PlatformSensor { public: PlatformSensorAndroid(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, const base::android::JavaRef<jobject>& java_sensor); diff --git a/chromium/services/device/generic_sensor/platform_sensor_fusion.cc b/chromium/services/device/generic_sensor/platform_sensor_fusion.cc index bf4b9805506..d7168a2b224 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_fusion.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_fusion.cc @@ -14,11 +14,11 @@ namespace device { class PlatformSensorFusion::Factory : public base::RefCounted<Factory> { public: static void CreateSensorFusion( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, const PlatformSensorProviderBase::CreateSensorCallback& callback, PlatformSensorProvider* provider) { - scoped_refptr<Factory> factory(new Factory(std::move(mapping), + scoped_refptr<Factory> factory(new Factory(reading_buffer, std::move(fusion_algorithm), std::move(callback), provider)); factory->FetchSources(); @@ -27,20 +27,20 @@ class PlatformSensorFusion::Factory : public base::RefCounted<Factory> { private: friend class base::RefCounted<Factory>; - Factory(mojo::ScopedSharedBufferMapping mapping, + Factory(SensorReadingSharedBuffer* reading_buffer, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, const PlatformSensorProviderBase::CreateSensorCallback& callback, PlatformSensorProvider* provider) : fusion_algorithm_(std::move(fusion_algorithm)), result_callback_(std::move(callback)), - mapping_(std::move(mapping)), + reading_buffer_(reading_buffer), provider_(provider) { const auto& types = fusion_algorithm_->source_types(); DCHECK(!types.empty()); // Make sure there are no dups. DCHECK(std::adjacent_find(types.begin(), types.end()) == types.end()); DCHECK(result_callback_); - DCHECK(mapping_); + DCHECK(reading_buffer_); DCHECK(provider_); } @@ -74,7 +74,7 @@ class PlatformSensorFusion::Factory : public base::RefCounted<Factory> { sources_map_[type] = std::move(sensor); if (sources_map_.size() == fusion_algorithm_->source_types().size()) { scoped_refptr<PlatformSensor> fusion_sensor(new PlatformSensorFusion( - std::move(mapping_), provider_, std::move(fusion_algorithm_), + reading_buffer_, provider_, std::move(fusion_algorithm_), std::move(sources_map_))); std::move(result_callback_).Run(fusion_sensor); } @@ -82,29 +82,27 @@ class PlatformSensorFusion::Factory : public base::RefCounted<Factory> { std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm_; PlatformSensorProviderBase::CreateSensorCallback result_callback_; - mojo::ScopedSharedBufferMapping mapping_; + SensorReadingSharedBuffer* reading_buffer_; // NOTE: Owned by |provider_|. PlatformSensorProvider* provider_; PlatformSensorFusion::SourcesMap sources_map_; }; // static void PlatformSensorFusion::Create( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, const PlatformSensorProviderBase::CreateSensorCallback& callback) { - Factory::CreateSensorFusion(std::move(mapping), std::move(fusion_algorithm), + Factory::CreateSensorFusion(reading_buffer, std::move(fusion_algorithm), callback, provider); } PlatformSensorFusion::PlatformSensorFusion( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, PlatformSensorFusion::SourcesMap sources) - : PlatformSensor(fusion_algorithm->fused_type(), - std::move(mapping), - provider), + : PlatformSensor(fusion_algorithm->fused_type(), reading_buffer, provider), fusion_algorithm_(std::move(fusion_algorithm)), source_sensors_(std::move(sources)), reporting_mode_(mojom::ReportingMode::CONTINUOUS) { diff --git a/chromium/services/device/generic_sensor/platform_sensor_fusion.h b/chromium/services/device/generic_sensor/platform_sensor_fusion.h index 2f7ff71cd74..0ce3d9fb60f 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_fusion.h +++ b/chromium/services/device/generic_sensor/platform_sensor_fusion.h @@ -38,7 +38,7 @@ class PlatformSensorFusion : public PlatformSensor, // |callback| call: it can be either newly created object on success or // nullptr on failure. static void Create( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, const PlatformSensorProviderBase::CreateSensorCallback& callback); @@ -64,7 +64,7 @@ class PlatformSensorFusion : public PlatformSensor, using SourcesMapEntry = std::pair<mojom::SensorType, scoped_refptr<PlatformSensor>>; PlatformSensorFusion( - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm, SourcesMap sources); diff --git a/chromium/services/device/generic_sensor/platform_sensor_fusion_unittest.cc b/chromium/services/device/generic_sensor/platform_sensor_fusion_unittest.cc index 01d89bb54d6..91106d5734d 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_fusion_unittest.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_fusion_unittest.cc @@ -85,8 +85,9 @@ class PlatformSensorFusionTest : public DeviceServiceTestBase { base::Bind(&PlatformSensorFusionTest::PlatformSensorFusionCallback, base::Unretained(this)); SensorType type = fusion_algorithm->fused_type(); - PlatformSensorFusion::Create(provider_->GetMapping(type), provider_.get(), - std::move(fusion_algorithm), callback); + PlatformSensorFusion::Create(provider_->GetSensorReadingBuffer(type), + provider_.get(), std::move(fusion_algorithm), + callback); EXPECT_TRUE(platform_sensor_fusion_callback_called_); } diff --git a/chromium/services/device/generic_sensor/platform_sensor_linux.cc b/chromium/services/device/generic_sensor/platform_sensor_linux.cc index b250981100c..19874eae972 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_linux.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_linux.cc @@ -25,11 +25,11 @@ bool HaveValuesChanged(const SensorReading& lhs, const SensorReading& rhs) { PlatformSensorLinux::PlatformSensorLinux( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, const SensorInfoLinux* sensor_device, scoped_refptr<base::SingleThreadTaskRunner> polling_thread_task_runner) - : PlatformSensor(type, std::move(mapping), provider), + : PlatformSensor(type, reading_buffer, provider), default_configuration_( PlatformSensorConfiguration(sensor_device->device_frequency)), reporting_mode_(sensor_device->reporting_mode), diff --git a/chromium/services/device/generic_sensor/platform_sensor_linux.h b/chromium/services/device/generic_sensor/platform_sensor_linux.h index 310c8a17bee..7d2337ed25f 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_linux.h +++ b/chromium/services/device/generic_sensor/platform_sensor_linux.h @@ -20,7 +20,7 @@ class PlatformSensorLinux : public PlatformSensor { public: PlatformSensorLinux( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, const SensorInfoLinux* sensor_device, scoped_refptr<base::SingleThreadTaskRunner> polling_thread_task_runner); diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_android.cc b/chromium/services/device/generic_sensor/platform_sensor_provider_android.cc index f45b87103a9..44500357a44 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_android.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_android.cc @@ -45,7 +45,7 @@ void PlatformSensorProviderAndroid::SetSensorManagerToNullForTesting() { void PlatformSensorProviderAndroid::CreateSensorInternal( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { JNIEnv* env = AttachCurrentThread(); @@ -54,16 +54,13 @@ void PlatformSensorProviderAndroid::CreateSensorInternal( // option. switch (type) { case mojom::SensorType::ABSOLUTE_ORIENTATION_EULER_ANGLES: - CreateAbsoluteOrientationEulerAnglesSensor(env, std::move(mapping), - callback); + CreateAbsoluteOrientationEulerAnglesSensor(env, reading_buffer, callback); break; case mojom::SensorType::ABSOLUTE_ORIENTATION_QUATERNION: - CreateAbsoluteOrientationQuaternionSensor(env, std::move(mapping), - callback); + CreateAbsoluteOrientationQuaternionSensor(env, reading_buffer, callback); break; case mojom::SensorType::RELATIVE_ORIENTATION_EULER_ANGLES: - CreateRelativeOrientationEulerAnglesSensor(env, std::move(mapping), - callback); + CreateRelativeOrientationEulerAnglesSensor(env, reading_buffer, callback); break; default: { ScopedJavaLocalRef<jobject> sensor = @@ -76,7 +73,7 @@ void PlatformSensorProviderAndroid::CreateSensorInternal( } auto concrete_sensor = base::MakeRefCounted<PlatformSensorAndroid>( - type, std::move(mapping), this, sensor); + type, reading_buffer, this, sensor); callback.Run(concrete_sensor); break; } @@ -93,7 +90,7 @@ void PlatformSensorProviderAndroid::CreateSensorInternal( // C: Combination of ACCELEROMETER and MAGNETOMETER void PlatformSensorProviderAndroid::CreateAbsoluteOrientationEulerAnglesSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { if (static_cast<bool>(Java_PlatformSensorProvider_hasSensorType( env, j_object_, @@ -105,7 +102,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationEulerAnglesSensor( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(sensor_fusion_algorithm), callback); } else { auto sensor_fusion_algorithm = std::make_unique< @@ -113,7 +110,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationEulerAnglesSensor( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(sensor_fusion_algorithm), callback); } } @@ -125,7 +122,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationEulerAnglesSensor( // B: ABSOLUTE_ORIENTATION_EULER_ANGLES void PlatformSensorProviderAndroid::CreateAbsoluteOrientationQuaternionSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { ScopedJavaLocalRef<jobject> sensor = Java_PlatformSensorProvider_createSensor( env, j_object_, @@ -133,7 +130,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationQuaternionSensor( if (sensor.obj()) { auto concrete_sensor = base::MakeRefCounted<PlatformSensorAndroid>( - mojom::SensorType::ABSOLUTE_ORIENTATION_QUATERNION, std::move(mapping), + mojom::SensorType::ABSOLUTE_ORIENTATION_QUATERNION, reading_buffer, this, sensor); callback.Run(concrete_sensor); @@ -144,7 +141,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationQuaternionSensor( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(sensor_fusion_algorithm), callback); } } @@ -153,7 +150,7 @@ void PlatformSensorProviderAndroid::CreateAbsoluteOrientationQuaternionSensor( // (if it uses TYPE_GAME_ROTATION_VECTOR directly). void PlatformSensorProviderAndroid::CreateRelativeOrientationEulerAnglesSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { if (static_cast<bool>(Java_PlatformSensorProvider_hasSensorType( env, j_object_, @@ -165,7 +162,7 @@ void PlatformSensorProviderAndroid::CreateRelativeOrientationEulerAnglesSensor( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(sensor_fusion_algorithm), callback); } else { callback.Run(nullptr); diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_android.h b/chromium/services/device/generic_sensor/platform_sensor_provider_android.h index 365694e3b42..5c4a311af9b 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_android.h +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_android.h @@ -22,21 +22,21 @@ class PlatformSensorProviderAndroid : public PlatformSensorProvider { protected: void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) override; private: void CreateAbsoluteOrientationEulerAnglesSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback); void CreateAbsoluteOrientationQuaternionSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback); void CreateRelativeOrientationEulerAnglesSensor( JNIEnv* env, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback); // Java object org.chromium.device.sensors.PlatformSensorProvider diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_base.cc b/chromium/services/device/generic_sensor/platform_sensor_provider_base.cc index 898989e9c86..887d84ee79b 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_base.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_base.cc @@ -35,8 +35,9 @@ void PlatformSensorProviderBase::CreateSensor( return; } - mojo::ScopedSharedBufferMapping mapping = MapSharedBufferForType(type); - if (!mapping) { + SensorReadingSharedBuffer* reading_buffer = + GetSensorReadingSharedBufferForType(type); + if (!reading_buffer) { callback.Run(nullptr); return; } @@ -48,7 +49,7 @@ void PlatformSensorProviderBase::CreateSensor( requests_map_[type] = CallbackQueue({callback}); CreateSensorInternal( - type, std::move(mapping), + type, reading_buffer, base::Bind(&PlatformSensorProviderBase::NotifySensorCreated, base::Unretained(this), type)); } @@ -66,18 +67,30 @@ scoped_refptr<PlatformSensor> PlatformSensorProviderBase::GetSensor( bool PlatformSensorProviderBase::CreateSharedBufferIfNeeded() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (shared_buffer_handle_.is_valid()) + if (shared_buffer_mapping_.get()) return true; - shared_buffer_handle_ = - mojo::SharedBufferHandle::Create(kSharedBufferSizeInBytes); - return shared_buffer_handle_.is_valid(); + if (!shared_buffer_handle_.is_valid()) { + shared_buffer_handle_ = + mojo::SharedBufferHandle::Create(kSharedBufferSizeInBytes); + if (!shared_buffer_handle_.is_valid()) + return false; + } + + // Create a writable mapping for the buffer as soon as possible, that will be + // used by all platform sensor implementations that want to update it. Note + // that on Android, cloning the shared memory handle readonly (as performed + // by CloneSharedBufferHandle()) will seal the region read-only, preventing + // future writable mappings to be created (but this one will survive). + shared_buffer_mapping_ = shared_buffer_handle_->Map(kSharedBufferSizeInBytes); + return shared_buffer_mapping_.get() != nullptr; } void PlatformSensorProviderBase::FreeResourcesIfNeeded() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (sensor_map_.empty() && requests_map_.empty()) { FreeResources(); + shared_buffer_mapping_.reset(); shared_buffer_handle_.reset(); } } @@ -147,13 +160,16 @@ PlatformSensorProviderBase::GetPendingRequestTypes() { return request_types; } -mojo::ScopedSharedBufferMapping -PlatformSensorProviderBase::MapSharedBufferForType(mojom::SensorType type) { - mojo::ScopedSharedBufferMapping mapping = shared_buffer_handle_->MapAtOffset( - kReadingBufferSize, SensorReadingSharedBuffer::GetOffset(type)); - if (mapping) - memset(mapping.get(), 0, kReadingBufferSize); - return mapping; +SensorReadingSharedBuffer* +PlatformSensorProviderBase::GetSensorReadingSharedBufferForType( + mojom::SensorType type) { + auto* ptr = static_cast<char*>(shared_buffer_mapping_.get()); + if (!ptr) + return nullptr; + + ptr += SensorReadingSharedBuffer::GetOffset(type); + memset(ptr, 0, kReadingBufferSize); + return reinterpret_cast<SensorReadingSharedBuffer*>(ptr); } } // namespace device diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_base.h b/chromium/services/device/generic_sensor/platform_sensor_provider_base.h index baed45c5bf2..de534d0b743 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_base.h +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_base.h @@ -45,7 +45,7 @@ class PlatformSensorProviderBase { // Method that must be implemented by platform specific classes. virtual void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) = 0; // Implementations might override this method to free resources when there @@ -59,7 +59,7 @@ class PlatformSensorProviderBase { bool CreateSharedBufferIfNeeded(); - mojo::ScopedSharedBufferMapping MapSharedBufferForType( + SensorReadingSharedBuffer* GetSensorReadingSharedBufferForType( mojom::SensorType type); THREAD_CHECKER(thread_checker_); @@ -76,6 +76,7 @@ class PlatformSensorProviderBase { std::map<mojom::SensorType, PlatformSensor*> sensor_map_; std::map<mojom::SensorType, CallbackQueue> requests_map_; mojo::ScopedSharedBufferHandle shared_buffer_handle_; + mojo::ScopedSharedBufferMapping shared_buffer_mapping_; DISALLOW_COPY_AND_ASSIGN(PlatformSensorProviderBase); }; diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_linux.cc b/chromium/services/device/generic_sensor/platform_sensor_provider_linux.cc index f346de961ca..4746313891d 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_linux.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_linux.cc @@ -53,7 +53,7 @@ PlatformSensorProviderLinux::~PlatformSensorProviderLinux() { void PlatformSensorProviderLinux::CreateSensorInternal( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { if (!sensor_device_manager_) sensor_device_manager_.reset(new SensorDeviceManager()); @@ -61,7 +61,7 @@ void PlatformSensorProviderLinux::CreateSensorInternal( if (IsFusionSensorType(type)) { // For sensor fusion the device nodes initialization will happen // during fetching the source sensors. - CreateFusionSensor(type, std::move(mapping), callback); + CreateFusionSensor(type, reading_buffer, callback); return; } @@ -81,12 +81,12 @@ void PlatformSensorProviderLinux::CreateSensorInternal( return; } - SensorDeviceFound(type, std::move(mapping), callback, sensor_device); + SensorDeviceFound(type, reading_buffer, callback, sensor_device); } void PlatformSensorProviderLinux::SensorDeviceFound( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const PlatformSensorProviderBase::CreateSensorCallback& callback, const SensorInfoLinux* sensor_device) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -98,7 +98,7 @@ void PlatformSensorProviderLinux::SensorDeviceFound( } scoped_refptr<PlatformSensorLinux> sensor = - new PlatformSensorLinux(type, std::move(mapping), this, sensor_device, + new PlatformSensorLinux(type, reading_buffer, this, sensor_device, polling_thread_->task_runner()); callback.Run(sensor); } @@ -201,11 +201,11 @@ void PlatformSensorProviderLinux::CreateSensorAndNotify( SensorInfoLinux* sensor_device) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); scoped_refptr<PlatformSensorLinux> sensor; - mojo::ScopedSharedBufferMapping mapping = MapSharedBufferForType(type); - if (sensor_device && mapping && StartPollingThread()) { - sensor = - new PlatformSensorLinux(type, std::move(mapping), this, sensor_device, - polling_thread_->task_runner()); + SensorReadingSharedBuffer* reading_buffer = + GetSensorReadingSharedBufferForType(type); + if (sensor_device && reading_buffer && StartPollingThread()) { + sensor = new PlatformSensorLinux(type, reading_buffer, this, sensor_device, + polling_thread_->task_runner()); } NotifySensorCreated(type, sensor); } @@ -243,7 +243,7 @@ void PlatformSensorProviderLinux::OnDeviceRemoved( void PlatformSensorProviderLinux::CreateFusionSensor( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { DCHECK(IsFusionSensorType(type)); std::unique_ptr<PlatformSensorFusionAlgorithm> fusion_algorithm; @@ -266,7 +266,7 @@ void PlatformSensorProviderLinux::CreateFusionSensor( } DCHECK(fusion_algorithm); - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(fusion_algorithm), callback); } diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_linux.h b/chromium/services/device/generic_sensor/platform_sensor_provider_linux.h index 11396719099..e308233d196 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_linux.h +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_linux.h @@ -37,7 +37,7 @@ class PlatformSensorProviderLinux : public PlatformSensorProvider, ~PlatformSensorProviderLinux() override; void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) override; void FreeResources() override; @@ -55,7 +55,7 @@ class PlatformSensorProviderLinux : public PlatformSensorProvider, void SensorDeviceFound( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const PlatformSensorProviderBase::CreateSensorCallback& callback, const SensorInfoLinux* sensor_device); @@ -92,7 +92,7 @@ class PlatformSensorProviderLinux : public PlatformSensorProvider, const std::string& device_node) override; void CreateFusionSensor(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback); // Set to true when enumeration is ready. diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_mac.cc b/chromium/services/device/generic_sensor/platform_sensor_provider_mac.cc index dd77644d2af..8cbdbc1f264 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_mac.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_mac.cc @@ -27,19 +27,19 @@ PlatformSensorProviderMac::~PlatformSensorProviderMac() = default; void PlatformSensorProviderMac::CreateSensorInternal( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { // Create Sensors here. switch (type) { case mojom::SensorType::AMBIENT_LIGHT: { scoped_refptr<PlatformSensor> sensor = - new PlatformSensorAmbientLightMac(std::move(mapping), this); + new PlatformSensorAmbientLightMac(reading_buffer, this); callback.Run(std::move(sensor)); break; } case mojom::SensorType::ACCELEROMETER: { callback.Run(base::MakeRefCounted<PlatformSensorAccelerometerMac>( - std::move(mapping), this)); + reading_buffer, this)); break; } case mojom::SensorType::RELATIVE_ORIENTATION_EULER_ANGLES: { @@ -47,7 +47,7 @@ void PlatformSensorProviderMac::CreateSensorInternal( RelativeOrientationEulerAnglesFusionAlgorithmUsingAccelerometer>(); // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. - PlatformSensorFusion::Create(std::move(mapping), this, + PlatformSensorFusion::Create(reading_buffer, this, std::move(fusion_algorithm), callback); break; } @@ -59,7 +59,7 @@ void PlatformSensorProviderMac::CreateSensorInternal( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. PlatformSensorFusion::Create( - std::move(mapping), this, + reading_buffer, this, std::move(orientation_quaternion_fusion_algorithm_using_euler_angles), callback); break; diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_mac.h b/chromium/services/device/generic_sensor/platform_sensor_provider_mac.h index 809a4f21609..79d11b1ff35 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_mac.h +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_mac.h @@ -18,7 +18,7 @@ class PlatformSensorProviderMac : public PlatformSensorProvider { protected: void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) override; private: diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_win.cc b/chromium/services/device/generic_sensor/platform_sensor_provider_win.cc index 212b393c1e1..15602986141 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_win.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_win.cc @@ -61,7 +61,7 @@ PlatformSensorProviderWin::~PlatformSensorProviderWin() = default; void PlatformSensorProviderWin::CreateSensorInternal( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (!StartSensorThread()) { @@ -77,8 +77,8 @@ void PlatformSensorProviderWin::CreateSensorInternal( // If this PlatformSensorFusion object is successfully initialized, // |callback| will be run with a reference to this object. PlatformSensorFusion::Create( - std::move(mapping), this, - std::move(linear_acceleration_fusion_algorithm), callback); + reading_buffer, this, std::move(linear_acceleration_fusion_algorithm), + callback); break; } @@ -89,8 +89,7 @@ void PlatformSensorProviderWin::CreateSensorInternal( base::Bind(&PlatformSensorProviderWin::CreateSensorReader, base::Unretained(this), type), base::Bind(&PlatformSensorProviderWin::SensorReaderCreated, - base::Unretained(this), type, base::Passed(&mapping), - callback)); + base::Unretained(this), type, reading_buffer, callback)); break; } } @@ -119,7 +118,7 @@ void PlatformSensorProviderWin::StopSensorThread() { void PlatformSensorProviderWin::SensorReaderCreated( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback, std::unique_ptr<PlatformSensorReaderWin> sensor_reader) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -129,7 +128,7 @@ void PlatformSensorProviderWin::SensorReaderCreated( } scoped_refptr<PlatformSensor> sensor = new PlatformSensorWin( - type, std::move(mapping), this, sensor_thread_->task_runner(), + type, reading_buffer, this, sensor_thread_->task_runner(), std::move(sensor_reader)); callback.Run(sensor); } diff --git a/chromium/services/device/generic_sensor/platform_sensor_provider_win.h b/chromium/services/device/generic_sensor/platform_sensor_provider_win.h index 208667d0e6d..6b621b79809 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_provider_win.h +++ b/chromium/services/device/generic_sensor/platform_sensor_provider_win.h @@ -39,7 +39,7 @@ class PlatformSensorProviderWin final : public PlatformSensorProvider { // PlatformSensorProvider interface implementation. void FreeResources() override; void CreateSensorInternal(mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback) override; private: @@ -52,7 +52,7 @@ class PlatformSensorProviderWin final : public PlatformSensorProvider { mojom::SensorType type); void SensorReaderCreated( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, const CreateSensorCallback& callback, std::unique_ptr<PlatformSensorReaderWin> sensor_reader); diff --git a/chromium/services/device/generic_sensor/platform_sensor_win.cc b/chromium/services/device/generic_sensor/platform_sensor_win.cc index d85535cd8c9..d1ee11459c5 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_win.cc +++ b/chromium/services/device/generic_sensor/platform_sensor_win.cc @@ -14,11 +14,11 @@ constexpr double kDefaultSensorReportingFrequency = 5.0; PlatformSensorWin::PlatformSensorWin( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, scoped_refptr<base::SingleThreadTaskRunner> sensor_thread_runner, std::unique_ptr<PlatformSensorReaderWin> sensor_reader) - : PlatformSensor(type, std::move(mapping), provider), + : PlatformSensor(type, reading_buffer, provider), sensor_thread_runner_(sensor_thread_runner), sensor_reader_(sensor_reader.release()), weak_factory_(this) { diff --git a/chromium/services/device/generic_sensor/platform_sensor_win.h b/chromium/services/device/generic_sensor/platform_sensor_win.h index b2bd4c223cf..bae519df27f 100644 --- a/chromium/services/device/generic_sensor/platform_sensor_win.h +++ b/chromium/services/device/generic_sensor/platform_sensor_win.h @@ -27,7 +27,7 @@ class PlatformSensorWin final : public PlatformSensor, public: PlatformSensorWin( mojom::SensorType type, - mojo::ScopedSharedBufferMapping mapping, + SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider, scoped_refptr<base::SingleThreadTaskRunner> sensor_thread_runner, std::unique_ptr<PlatformSensorReaderWin> sensor_reader); |