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

Side by Side Diff: sync/sessions/model_type_registry.cc

Issue 299963002: sync: Implement NonBlockingTypeProcessorCore (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
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 "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
32 private: 83 private:
33 base::WeakPtr<NonBlockingTypeProcessorCore> core_; 84 base::WeakPtr<NonBlockingTypeProcessorCore> core_;
34 scoped_refptr<base::SequencedTaskRunner> sync_thread_; 85 scoped_refptr<base::SequencedTaskRunner> sync_thread_;
35 }; 86 };
36 87
37 NonBlockingTypeProcessorCoreWrapper::NonBlockingTypeProcessorCoreWrapper( 88 NonBlockingTypeProcessorCoreWrapper::NonBlockingTypeProcessorCoreWrapper(
38 base::WeakPtr<NonBlockingTypeProcessorCore> core, 89 base::WeakPtr<NonBlockingTypeProcessorCore> core,
39 scoped_refptr<base::SequencedTaskRunner> sync_thread) 90 scoped_refptr<base::SequencedTaskRunner> sync_thread)
40 : core_(core), sync_thread_(sync_thread) { 91 : core_(core), sync_thread_(sync_thread) {
41 } 92 }
42 93
43 NonBlockingTypeProcessorCoreWrapper::~NonBlockingTypeProcessorCoreWrapper() { 94 NonBlockingTypeProcessorCoreWrapper::~NonBlockingTypeProcessorCoreWrapper() {
44 } 95 }
45 96
46 void NonBlockingTypeProcessorCoreWrapper::RequestCommits( 97 void NonBlockingTypeProcessorCoreWrapper::RequestCommits(
47 const CommitRequestDataList& list) { 98 const CommitRequestDataList& list) {
48 sync_thread_->PostTask( 99 sync_thread_->PostTask(
49 FROM_HERE, 100 FROM_HERE,
50 base::Bind(&NonBlockingTypeProcessorCore::RequestCommits, core_, list)); 101 base::Bind(&NonBlockingTypeProcessorCore::EnqueueForCommit, core_, list));
51 } 102 }
52 103
53 } // namespace 104 } // namespace
54 105
55 ModelTypeRegistry::ModelTypeRegistry() : directory_(NULL) {} 106 ModelTypeRegistry::ModelTypeRegistry() : directory_(NULL) {}
56 107
57 ModelTypeRegistry::ModelTypeRegistry( 108 ModelTypeRegistry::ModelTypeRegistry(
58 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, 109 const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
59 syncable::Directory* directory) 110 syncable::Directory* directory)
60 : directory_(directory) { 111 : directory_(directory) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(
144 197 type, data_type_state, processor_interface.Pass()));
145 // TODO(rlarocque): DataTypeState should be forwarded to core here.
146 198
147 // Initialize Processor -> CoreProcessor communication channel. 199 // Initialize Processor -> CoreProcessor communication channel.
148 scoped_ptr<NonBlockingTypeProcessorCoreInterface> core_interface( 200 scoped_ptr<NonBlockingTypeProcessorCoreInterface> core_interface(
149 new NonBlockingTypeProcessorCoreWrapper( 201 new NonBlockingTypeProcessorCoreWrapper(
150 core->AsWeakPtr(), 202 core->AsWeakPtr(),
151 scoped_refptr<base::SequencedTaskRunner>( 203 scoped_refptr<base::SequencedTaskRunner>(
152 base::MessageLoopProxy::current()))); 204 base::MessageLoopProxy::current())));
153 type_task_runner->PostTask(FROM_HERE, 205 type_task_runner->PostTask(FROM_HERE,
154 base::Bind(&NonBlockingTypeProcessor::OnConnect, 206 base::Bind(&NonBlockingTypeProcessor::OnConnect,
155 processor, 207 processor,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 ModelTypeSet enabled_off_thread_types; 293 ModelTypeSet enabled_off_thread_types;
242 for (ScopedVector<NonBlockingTypeProcessorCore>::const_iterator it = 294 for (ScopedVector<NonBlockingTypeProcessorCore>::const_iterator it =
243 non_blocking_type_processor_cores_.begin(); 295 non_blocking_type_processor_cores_.begin();
244 it != non_blocking_type_processor_cores_.end(); ++it) { 296 it != non_blocking_type_processor_cores_.end(); ++it) {
245 enabled_off_thread_types.Put((*it)->GetModelType()); 297 enabled_off_thread_types.Put((*it)->GetModelType());
246 } 298 }
247 return enabled_off_thread_types; 299 return enabled_off_thread_types;
248 } 300 }
249 301
250 } // namespace syncer 302 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698