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

Side by Side Diff: content/browser/device_sensors/device_sensor_service.cc

Issue 2410123002: Remove content::BrowserThread knowledge from Device Sensors (Closed)
Patch Set: Handle DeviceSensorService's ThreadChecker 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/device_sensors/device_sensor_service.h" 5 #include "content/browser/device_sensors/device_sensor_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/singleton.h" 9 #include "base/memory/singleton.h"
10 #include "build/build_config.h"
10 #include "content/browser/device_sensors/data_fetcher_shared_memory.h" 11 #include "content/browser/device_sensors/data_fetcher_shared_memory.h"
11 12
13 #if defined(OS_ANDROID)
14 #include "content/browser/device_sensors/sensor_manager_android.h"
15 #endif
16
12 namespace content { 17 namespace content {
13 18
14 DeviceSensorService::DeviceSensorService() 19 DeviceSensorService::DeviceSensorService()
15 : num_light_readers_(0), 20 : num_light_readers_(0),
16 num_motion_readers_(0), 21 num_motion_readers_(0),
17 num_orientation_readers_(0), 22 num_orientation_readers_(0),
18 num_orientation_absolute_readers_(0), 23 num_orientation_absolute_readers_(0),
19 is_shutdown_(false) {} 24 is_shutdown_(false) {}
20 25
21 DeviceSensorService::~DeviceSensorService() {} 26 DeviceSensorService::~DeviceSensorService() {}
(...skipping 17 matching lines...) Expand all
39 void DeviceSensorService::RemoveConsumer(ConsumerType consumer_type) { 44 void DeviceSensorService::RemoveConsumer(ConsumerType consumer_type) {
40 if (!ChangeNumberConsumers(consumer_type, -1)) 45 if (!ChangeNumberConsumers(consumer_type, -1))
41 return; 46 return;
42 47
43 if (GetNumberConsumers(consumer_type) == 0) 48 if (GetNumberConsumers(consumer_type) == 0)
44 data_fetcher_->StopFetchingDeviceData(consumer_type); 49 data_fetcher_->StopFetchingDeviceData(consumer_type);
45 } 50 }
46 51
47 bool DeviceSensorService::ChangeNumberConsumers(ConsumerType consumer_type, 52 bool DeviceSensorService::ChangeNumberConsumers(ConsumerType consumer_type,
48 int delta) { 53 int delta) {
49 DCHECK(thread_checker_.CalledOnValidThread()); 54 DCHECK(io_thread_checker_.CalledOnValidThread());
50 if (is_shutdown_) 55 if (is_shutdown_)
51 return false; 56 return false;
52 57
53 switch (consumer_type) { 58 switch (consumer_type) {
54 case CONSUMER_TYPE_MOTION: 59 case CONSUMER_TYPE_MOTION:
55 num_motion_readers_ += delta; 60 num_motion_readers_ += delta;
56 DCHECK_GE(num_motion_readers_, 0); 61 DCHECK_GE(num_motion_readers_, 0);
57 return true; 62 return true;
58 case CONSUMER_TYPE_ORIENTATION: 63 case CONSUMER_TYPE_ORIENTATION:
59 num_orientation_readers_ += delta; 64 num_orientation_readers_ += delta;
(...skipping 24 matching lines...) Expand all
84 case CONSUMER_TYPE_LIGHT: 89 case CONSUMER_TYPE_LIGHT:
85 return num_light_readers_; 90 return num_light_readers_;
86 default: 91 default:
87 NOTREACHED(); 92 NOTREACHED();
88 } 93 }
89 return 0; 94 return 0;
90 } 95 }
91 96
92 mojo::ScopedSharedBufferHandle DeviceSensorService::GetSharedMemoryHandle( 97 mojo::ScopedSharedBufferHandle DeviceSensorService::GetSharedMemoryHandle(
93 ConsumerType consumer_type) { 98 ConsumerType consumer_type) {
94 DCHECK(thread_checker_.CalledOnValidThread()); 99 DCHECK(io_thread_checker_.CalledOnValidThread());
95 return data_fetcher_->GetSharedMemoryHandle(consumer_type); 100 return data_fetcher_->GetSharedMemoryHandle(consumer_type);
96 } 101 }
97 102
98 void DeviceSensorService::Shutdown() { 103 void DeviceSensorService::InitOnUIThread() {
104 #if defined(OS_ANDROID)
105 SensorManagerAndroid::GetInstance()->InitOnUIThread();
106 #endif
107 }
108
109 void DeviceSensorService::InitOnIOThread() {
timvolodine 2016/10/12 16:28:58 I am slightly confused by the two Init methods, wi
110 // Ensure that the thread checker is associated with the IO thread in case
111 // instantiation of this object occurred on the UI thread.
112 io_thread_checker_.DetachFromThread();
113 ignore_result(io_thread_checker_.CalledOnValidThread());
114 }
115
116 void DeviceSensorService::ShutDownOnUIThread() {
99 if (data_fetcher_) { 117 if (data_fetcher_) {
100 data_fetcher_->Shutdown(); 118 data_fetcher_->ShutDownOnUIThread();
101 data_fetcher_.reset(); 119 data_fetcher_.reset();
102 } 120 }
103 is_shutdown_ = true; 121 is_shutdown_ = true;
104 } 122 }
105 123
106 void DeviceSensorService::SetDataFetcherForTesting( 124 void DeviceSensorService::SetDataFetcherForTesting(
107 DataFetcherSharedMemory* test_data_fetcher) { 125 DataFetcherSharedMemory* test_data_fetcher) {
108 if (data_fetcher_) 126 if (data_fetcher_)
109 data_fetcher_->Shutdown(); 127 data_fetcher_->ShutDownOnUIThread();
110 data_fetcher_.reset(test_data_fetcher); 128 data_fetcher_.reset(test_data_fetcher);
111 } 129 }
112 130
113 } // namespace content 131 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/device_sensors/device_sensor_service.h ('k') | content/browser/device_sensors/sensor_manager_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698