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

Side by Side Diff: device/generic_sensor/sensor_provider_impl.cc

Issue 2395853003: [Sensors] Improvements in shared buffer managing (Closed)
Patch Set: Test compilation fix + comment from Ken Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/generic_sensor/sensor_provider_impl.h" 5 #include "device/generic_sensor/sensor_provider_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "device/generic_sensor/platform_sensor_provider.h" 9 #include "device/generic_sensor/platform_sensor_provider.h"
10 #include "device/generic_sensor/sensor_impl.h" 10 #include "device/generic_sensor/sensor_impl.h"
11 #include "mojo/public/cpp/bindings/strong_binding.h" 11 #include "mojo/public/cpp/bindings/strong_binding.h"
12 12
13 namespace device { 13 namespace device {
14 14
15 namespace { 15 namespace {
16 16
17 uint64_t GetBufferOffset(mojom::SensorType type) {
18 return (static_cast<uint64_t>(mojom::SensorType::LAST) -
19 static_cast<uint64_t>(type)) *
20 mojom::SensorInitParams::kReadBufferSize;
21 }
22
23 void RunCallback(mojom::SensorInitParamsPtr init_params, 17 void RunCallback(mojom::SensorInitParamsPtr init_params,
24 SensorImpl* sensor, 18 SensorImpl* sensor,
25 const SensorProviderImpl::GetSensorCallback& callback) { 19 const SensorProviderImpl::GetSensorCallback& callback) {
26 callback.Run(std::move(init_params), sensor->GetClient()); 20 callback.Run(std::move(init_params), sensor->GetClient());
27 } 21 }
28 22
29 void NotifySensorCreated( 23 void NotifySensorCreated(
30 mojom::SensorInitParamsPtr init_params, 24 mojom::SensorInitParamsPtr init_params,
31 SensorImpl* sensor, 25 SensorImpl* sensor,
32 const SensorProviderImpl::GetSensorCallback& callback) { 26 const SensorProviderImpl::GetSensorCallback& callback) {
(...skipping 28 matching lines...) Expand all
61 NotifySensorCreated(nullptr, nullptr, callback); 55 NotifySensorCreated(nullptr, nullptr, callback);
62 return; 56 return;
63 } 57 }
64 58
65 scoped_refptr<PlatformSensor> sensor = provider_->GetSensor(type); 59 scoped_refptr<PlatformSensor> sensor = provider_->GetSensor(type);
66 if (!sensor) { 60 if (!sensor) {
67 PlatformSensorProviderBase::CreateSensorCallback cb = base::Bind( 61 PlatformSensorProviderBase::CreateSensorCallback cb = base::Bind(
68 &SensorProviderImpl::SensorCreated, weak_ptr_factory_.GetWeakPtr(), 62 &SensorProviderImpl::SensorCreated, weak_ptr_factory_.GetWeakPtr(),
69 type, base::Passed(&cloned_handle), base::Passed(&sensor_request), 63 type, base::Passed(&cloned_handle), base::Passed(&sensor_request),
70 callback); 64 callback);
71 provider_->CreateSensor(type, mojom::SensorInitParams::kReadBufferSize, 65 provider_->CreateSensor(type, cb);
72 GetBufferOffset(type), cb);
73 return; 66 return;
74 } 67 }
75 68
76 SensorCreated(type, std::move(cloned_handle), std::move(sensor_request), 69 SensorCreated(type, std::move(cloned_handle), std::move(sensor_request),
77 callback, std::move(sensor)); 70 callback, std::move(sensor));
78 } 71 }
79 72
80 void SensorProviderImpl::SensorCreated( 73 void SensorProviderImpl::SensorCreated(
81 mojom::SensorType type, 74 mojom::SensorType type,
82 mojo::ScopedSharedBufferHandle cloned_handle, 75 mojo::ScopedSharedBufferHandle cloned_handle,
83 mojom::SensorRequest sensor_request, 76 mojom::SensorRequest sensor_request,
84 const GetSensorCallback& callback, 77 const GetSensorCallback& callback,
85 scoped_refptr<PlatformSensor> sensor) { 78 scoped_refptr<PlatformSensor> sensor) {
86 if (!sensor) { 79 if (!sensor) {
87 NotifySensorCreated(nullptr, nullptr, callback); 80 NotifySensorCreated(nullptr, nullptr, callback);
88 return; 81 return;
89 } 82 }
90 83
91 auto sensor_impl = base::MakeUnique<SensorImpl>(sensor); 84 auto sensor_impl = base::MakeUnique<SensorImpl>(sensor);
92 85
93 auto init_params = mojom::SensorInitParams::New(); 86 auto init_params = mojom::SensorInitParams::New();
94 init_params->memory = std::move(cloned_handle); 87 init_params->memory = std::move(cloned_handle);
95 init_params->buffer_offset = GetBufferOffset(type); 88 init_params->buffer_offset = SensorReadingSharedBuffer::GetOffset(type);
96 init_params->mode = sensor->GetReportingMode(); 89 init_params->mode = sensor->GetReportingMode();
97 init_params->default_configuration = sensor->GetDefaultConfiguration(); 90 init_params->default_configuration = sensor->GetDefaultConfiguration();
98 91
99 NotifySensorCreated(std::move(init_params), sensor_impl.get(), callback); 92 NotifySensorCreated(std::move(init_params), sensor_impl.get(), callback);
100 93
101 mojo::MakeStrongBinding(std::move(sensor_impl), std::move(sensor_request)); 94 mojo::MakeStrongBinding(std::move(sensor_impl), std::move(sensor_request));
102 } 95 }
103 96
104 } // namespace device 97 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698