| OLD | NEW |
| 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 "sync/sessions/model_type_registry.h" | 5 #include "sync/sessions/model_type_registry.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
| 9 #include "base/observer_list.h" | 9 #include "base/observer_list.h" |
| 10 #include "sync/engine/directory_commit_contributor.h" | 10 #include "sync/engine/directory_commit_contributor.h" |
| 11 #include "sync/engine/directory_update_handler.h" | 11 #include "sync/engine/directory_update_handler.h" |
| 12 #include "sync/engine/non_blocking_sync_common.h" | 12 #include "sync/engine/non_blocking_sync_common.h" |
| 13 #include "sync/engine/non_blocking_type_processor.h" | 13 #include "sync/engine/non_blocking_type_processor.h" |
| 14 #include "sync/engine/non_blocking_type_processor_core.h" | 14 #include "sync/engine/non_blocking_type_processor_core.h" |
| 15 #include "sync/engine/non_blocking_type_processor_core_interface.h" | 15 #include "sync/engine/non_blocking_type_processor_core_interface.h" |
| 16 #include "sync/sessions/directory_type_debug_info_emitter.h" | 16 #include "sync/sessions/directory_type_debug_info_emitter.h" |
| 17 | 17 |
| 18 namespace syncer { | 18 namespace syncer { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 class NonBlockingTypeProcessorWrapper |
| 23 : public NonBlockingTypeProcessorInterface { |
| 24 public: |
| 25 NonBlockingTypeProcessorWrapper( |
| 26 base::WeakPtr<NonBlockingTypeProcessor> processor, |
| 27 scoped_refptr<base::SequencedTaskRunner> processor_task_runner); |
| 28 virtual ~NonBlockingTypeProcessorWrapper(); |
| 29 |
| 30 virtual void ReceiveCommitResponse( |
| 31 const DataTypeState& type_state, |
| 32 const CommitResponseDataList& response_list) OVERRIDE; |
| 33 virtual void ReceiveUpdateResponse( |
| 34 const DataTypeState& type_state, |
| 35 const UpdateResponseDataList& response_list) OVERRIDE; |
| 36 |
| 37 private: |
| 38 base::WeakPtr<NonBlockingTypeProcessor> processor_; |
| 39 scoped_refptr<base::SequencedTaskRunner> processor_task_runner_; |
| 40 }; |
| 41 |
| 42 NonBlockingTypeProcessorWrapper::NonBlockingTypeProcessorWrapper( |
| 43 base::WeakPtr<NonBlockingTypeProcessor> processor, |
| 44 scoped_refptr<base::SequencedTaskRunner> processor_task_runner) |
| 45 : processor_(processor), processor_task_runner_(processor_task_runner) { |
| 46 } |
| 47 |
| 48 NonBlockingTypeProcessorWrapper::~NonBlockingTypeProcessorWrapper() { |
| 49 } |
| 50 |
| 51 void NonBlockingTypeProcessorWrapper::ReceiveCommitResponse( |
| 52 const DataTypeState& type_state, |
| 53 const CommitResponseDataList& response_list) { |
| 54 processor_task_runner_->PostTask( |
| 55 FROM_HERE, |
| 56 base::Bind(&NonBlockingTypeProcessor::OnCommitCompletion, |
| 57 processor_, |
| 58 type_state, |
| 59 response_list)); |
| 60 } |
| 61 |
| 62 void NonBlockingTypeProcessorWrapper::ReceiveUpdateResponse( |
| 63 const DataTypeState& type_state, |
| 64 const UpdateResponseDataList& response_list) { |
| 65 processor_task_runner_->PostTask( |
| 66 FROM_HERE, |
| 67 base::Bind(&NonBlockingTypeProcessor::OnUpdateReceived, |
| 68 processor_, |
| 69 type_state, |
| 70 response_list)); |
| 71 } |
| 72 |
| 22 class NonBlockingTypeProcessorCoreWrapper | 73 class NonBlockingTypeProcessorCoreWrapper |
| 23 : public NonBlockingTypeProcessorCoreInterface { | 74 : public NonBlockingTypeProcessorCoreInterface { |
| 24 public: | 75 public: |
| 25 NonBlockingTypeProcessorCoreWrapper( | 76 NonBlockingTypeProcessorCoreWrapper( |
| 26 base::WeakPtr<NonBlockingTypeProcessorCore> core, | 77 base::WeakPtr<NonBlockingTypeProcessorCore> core, |
| 27 scoped_refptr<base::SequencedTaskRunner> sync_thread); | 78 scoped_refptr<base::SequencedTaskRunner> sync_thread); |
| 28 virtual ~NonBlockingTypeProcessorCoreWrapper(); | 79 virtual ~NonBlockingTypeProcessorCoreWrapper(); |
| 29 | 80 |
| 30 virtual void RequestCommits(const CommitRequestDataList& list) OVERRIDE; | 81 virtual void RequestCommits(const CommitRequestDataList& list) OVERRIDE; |
| 31 | 82 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 } | 183 } |
| 133 | 184 |
| 134 void ModelTypeRegistry::InitializeNonBlockingType( | 185 void ModelTypeRegistry::InitializeNonBlockingType( |
| 135 ModelType type, | 186 ModelType type, |
| 136 const DataTypeState& data_type_state, | 187 const DataTypeState& data_type_state, |
| 137 scoped_refptr<base::SequencedTaskRunner> type_task_runner, | 188 scoped_refptr<base::SequencedTaskRunner> type_task_runner, |
| 138 base::WeakPtr<NonBlockingTypeProcessor> processor) { | 189 base::WeakPtr<NonBlockingTypeProcessor> processor) { |
| 139 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); | 190 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); |
| 140 | 191 |
| 141 // Initialize CoreProcessor -> Processor communication channel. | 192 // Initialize CoreProcessor -> Processor communication channel. |
| 193 scoped_ptr<NonBlockingTypeProcessorInterface> processor_interface( |
| 194 new NonBlockingTypeProcessorWrapper(processor, type_task_runner)); |
| 142 scoped_ptr<NonBlockingTypeProcessorCore> core( | 195 scoped_ptr<NonBlockingTypeProcessorCore> core( |
| 143 new NonBlockingTypeProcessorCore(type, type_task_runner, processor)); | 196 new NonBlockingTypeProcessorCore( |
| 197 type, data_type_state, processor_interface.Pass())); |
| 144 | 198 |
| 145 // TODO(rlarocque): DataTypeState should be forwarded to core here. | 199 // TODO(rlarocque): DataTypeState should be forwarded to core here. |
| 146 | 200 |
| 147 // Initialize Processor -> CoreProcessor communication channel. | 201 // Initialize Processor -> CoreProcessor communication channel. |
| 148 scoped_ptr<NonBlockingTypeProcessorCoreInterface> core_interface( | 202 scoped_ptr<NonBlockingTypeProcessorCoreInterface> core_interface( |
| 149 new NonBlockingTypeProcessorCoreWrapper( | 203 new NonBlockingTypeProcessorCoreWrapper( |
| 150 core->AsWeakPtr(), | 204 core->AsWeakPtr(), |
| 151 scoped_refptr<base::SequencedTaskRunner>( | 205 scoped_refptr<base::SequencedTaskRunner>( |
| 152 base::MessageLoopProxy::current()))); | 206 base::MessageLoopProxy::current()))); |
| 153 type_task_runner->PostTask(FROM_HERE, | 207 type_task_runner->PostTask(FROM_HERE, |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 ModelTypeSet enabled_off_thread_types; | 295 ModelTypeSet enabled_off_thread_types; |
| 242 for (ScopedVector<NonBlockingTypeProcessorCore>::const_iterator it = | 296 for (ScopedVector<NonBlockingTypeProcessorCore>::const_iterator it = |
| 243 non_blocking_type_processor_cores_.begin(); | 297 non_blocking_type_processor_cores_.begin(); |
| 244 it != non_blocking_type_processor_cores_.end(); ++it) { | 298 it != non_blocking_type_processor_cores_.end(); ++it) { |
| 245 enabled_off_thread_types.Put((*it)->GetModelType()); | 299 enabled_off_thread_types.Put((*it)->GetModelType()); |
| 246 } | 300 } |
| 247 return enabled_off_thread_types; | 301 return enabled_off_thread_types; |
| 248 } | 302 } |
| 249 | 303 |
| 250 } // namespace syncer | 304 } // namespace syncer |
| OLD | NEW |