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

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

Issue 294473017: WIP: Towards 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
« no previous file with comments | « sync/protocol/proto_value_conversions.cc ('k') | sync/sync_core.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
(...skipping 100 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(
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
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
OLDNEW
« no previous file with comments | « sync/protocol/proto_value_conversions.cc ('k') | sync/sync_core.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698