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

Unified Diff: device/generic_sensor/sensor_provider_impl.cc

Issue 2368193003: [sensors] Introduce asynchronous way to create sensors. (Closed)
Patch Set: Tim's comments Created 4 years, 3 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: device/generic_sensor/sensor_provider_impl.cc
diff --git a/device/generic_sensor/sensor_provider_impl.cc b/device/generic_sensor/sensor_provider_impl.cc
index 2cdb1c5a32d5b32ac3c3b97070d0a3a2f0983d33..51ad6cac2a1a81b731a485a4a96febef08fc65a5 100644
--- a/device/generic_sensor/sensor_provider_impl.cc
+++ b/device/generic_sensor/sensor_provider_impl.cc
@@ -32,7 +32,7 @@ void SensorProviderImpl::Create(mojom::SensorProviderRequest request) {
}
SensorProviderImpl::SensorProviderImpl(PlatformSensorProvider* provider)
- : provider_(provider) {
+ : provider_(provider), weak_ptr_factory_(this) {
DCHECK(provider_);
}
@@ -49,10 +49,25 @@ void SensorProviderImpl::GetSensor(mojom::SensorType type,
scoped_refptr<PlatformSensor> sensor = provider_->GetSensor(type);
if (!sensor) {
- sensor = provider_->CreateSensor(
- type, mojom::SensorInitParams::kReadBufferSize, GetBufferOffset(type));
+ PlatformSensorProviderBase::CreateSensorCallback cb = base::Bind(
+ &SensorProviderImpl::SensorCreated, weak_ptr_factory_.GetWeakPtr(),
+ type, base::Passed(&cloned_handle), base::Passed(&sensor_request),
+ callback);
+ provider_->CreateSensor(type, mojom::SensorInitParams::kReadBufferSize,
+ GetBufferOffset(type), cb);
timvolodine 2016/09/30 18:50:48 you mentioned this is 'synchronous' on android/mac
maksims (do not use this acc) 2016/10/03 12:58:11 It's technically possible, but it would be conside
timvolodine 2016/10/03 17:44:12 I think this should be addressed to some extent to
maksims (do not use this acc) 2016/10/04 07:21:34 Sure. As per discussion with shalamov@, we had the
+ return;
}
+ SensorCreated(type, std::move(cloned_handle), std::move(sensor_request),
+ callback, std::move(sensor));
+}
+
+void SensorProviderImpl::SensorCreated(
+ mojom::SensorType type,
+ mojo::ScopedSharedBufferHandle cloned_handle,
+ mojom::SensorRequest sensor_request,
+ const GetSensorCallback& callback,
+ scoped_refptr<PlatformSensor> sensor) {
if (!sensor) {
callback.Run(nullptr, nullptr);
return;

Powered by Google App Engine
This is Rietveld 408576698