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

Unified Diff: device/generic_sensor/sensor_provider_impl.cc

Issue 2368193003: [sensors] Introduce asynchronous way to create sensors. (Closed)
Patch Set: Added a temporary dependency for dependent patch that is based on top of this cl. Reason: cannot ha… 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..930083a20ce4c479eab59e88f77f44bb71b690a6 100644
--- a/device/generic_sensor/sensor_provider_impl.cc
+++ b/device/generic_sensor/sensor_provider_impl.cc
@@ -20,6 +20,9 @@ uint64_t GetBufferOffset(mojom::SensorType type) {
mojom::SensorInitParams::kReadBufferSize;
}
+using CreateSensorCallback =
+ base::Callback<void(scoped_refptr<PlatformSensor>)>;
+
} // namespace
// static
@@ -32,7 +35,7 @@ void SensorProviderImpl::Create(mojom::SensorProviderRequest request) {
}
SensorProviderImpl::SensorProviderImpl(PlatformSensorProvider* provider)
- : provider_(provider) {
+ : provider_(provider), weak_ptr_factory_(this) {
DCHECK(provider_);
}
@@ -49,10 +52,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));
+ 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);
+ 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