| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/engine/sync_scheduler_impl.h" | 5 #include "sync/engine/sync_scheduler_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cstring> | 8 #include <cstring> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 &restricted_workers); | 350 &restricted_workers); |
| 351 session_context_->set_routing_info(params.routing_info); | 351 session_context_->set_routing_info(params.routing_info); |
| 352 | 352 |
| 353 // Only reconfigure if we have types to download. | 353 // Only reconfigure if we have types to download. |
| 354 if (!params.types_to_download.Empty()) { | 354 if (!params.types_to_download.Empty()) { |
| 355 DCHECK(!restricted_routes.empty()); | 355 DCHECK(!restricted_routes.empty()); |
| 356 linked_ptr<SyncSession> session(new SyncSession( | 356 linked_ptr<SyncSession> session(new SyncSession( |
| 357 session_context_, | 357 session_context_, |
| 358 this, | 358 this, |
| 359 SyncSourceInfo(params.source, | 359 SyncSourceInfo(params.source, |
| 360 ModelSafeRoutingInfoToPayloadMap( | 360 ModelSafeRoutingInfoToStateMap( |
| 361 restricted_routes, | 361 restricted_routes, |
| 362 std::string())), | 362 std::string())), |
| 363 restricted_routes, | 363 restricted_routes, |
| 364 restricted_workers)); | 364 restricted_workers)); |
| 365 SyncSessionJob job(SyncSessionJob::CONFIGURATION, | 365 SyncSessionJob job(SyncSessionJob::CONFIGURATION, |
| 366 TimeTicks::Now(), | 366 TimeTicks::Now(), |
| 367 session, | 367 session, |
| 368 false, | 368 false, |
| 369 params, | 369 params, |
| 370 FROM_HERE); | 370 FROM_HERE); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 SyncSchedulerImpl::JobProcessDecision SyncSchedulerImpl::DecideOnJob( | 422 SyncSchedulerImpl::JobProcessDecision SyncSchedulerImpl::DecideOnJob( |
| 423 const SyncSessionJob& job) { | 423 const SyncSessionJob& job) { |
| 424 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 424 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 425 | 425 |
| 426 // See if our type is throttled. | 426 // See if our type is throttled. |
| 427 ModelTypeSet throttled_types = | 427 ModelTypeSet throttled_types = |
| 428 session_context_->throttled_data_type_tracker()->GetThrottledTypes(); | 428 session_context_->throttled_data_type_tracker()->GetThrottledTypes(); |
| 429 if (job.purpose == SyncSessionJob::NUDGE && | 429 if (job.purpose == SyncSessionJob::NUDGE && |
| 430 job.session->source().updates_source == GetUpdatesCallerInfo::LOCAL) { | 430 job.session->source().updates_source == GetUpdatesCallerInfo::LOCAL) { |
| 431 ModelTypeSet requested_types; | 431 ModelTypeSet requested_types; |
| 432 for (ModelTypePayloadMap::const_iterator i = | 432 for (ModelTypeStateMap::const_iterator i = |
| 433 job.session->source().types.begin(); | 433 job.session->source().types.begin(); |
| 434 i != job.session->source().types.end(); | 434 i != job.session->source().types.end(); |
| 435 ++i) { | 435 ++i) { |
| 436 requested_types.Put(i->first); | 436 requested_types.Put(i->first); |
| 437 } | 437 } |
| 438 | 438 |
| 439 if (!requested_types.Empty() && throttled_types.HasAll(requested_types)) | 439 if (!requested_types.Empty() && throttled_types.HasAll(requested_types)) |
| 440 return SAVE; | 440 return SAVE; |
| 441 } | 441 } |
| 442 | 442 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 void SyncSchedulerImpl::ScheduleNudgeAsync( | 553 void SyncSchedulerImpl::ScheduleNudgeAsync( |
| 554 const TimeDelta& delay, | 554 const TimeDelta& delay, |
| 555 NudgeSource source, ModelTypeSet types, | 555 NudgeSource source, ModelTypeSet types, |
| 556 const tracked_objects::Location& nudge_location) { | 556 const tracked_objects::Location& nudge_location) { |
| 557 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 557 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 558 SDVLOG_LOC(nudge_location, 2) | 558 SDVLOG_LOC(nudge_location, 2) |
| 559 << "Nudge scheduled with delay " << delay.InMilliseconds() << " ms, " | 559 << "Nudge scheduled with delay " << delay.InMilliseconds() << " ms, " |
| 560 << "source " << GetNudgeSourceString(source) << ", " | 560 << "source " << GetNudgeSourceString(source) << ", " |
| 561 << "types " << ModelTypeSetToString(types); | 561 << "types " << ModelTypeSetToString(types); |
| 562 | 562 |
| 563 ModelTypePayloadMap types_with_payloads = | 563 ModelTypeStateMap type_state_map = |
| 564 ModelTypePayloadMapFromEnumSet(types, std::string()); | 564 ModelTypeStateMapFromEnumSet(types, std::string()); |
| 565 SyncSchedulerImpl::ScheduleNudgeImpl(delay, | 565 SyncSchedulerImpl::ScheduleNudgeImpl(delay, |
| 566 GetUpdatesFromNudgeSource(source), | 566 GetUpdatesFromNudgeSource(source), |
| 567 types_with_payloads, | 567 type_state_map, |
| 568 false, | 568 false, |
| 569 nudge_location); | 569 nudge_location); |
| 570 } | 570 } |
| 571 | 571 |
| 572 void SyncSchedulerImpl::ScheduleNudgeWithPayloadsAsync( | 572 void SyncSchedulerImpl::ScheduleNudgeWithStatesAsync( |
| 573 const TimeDelta& delay, | 573 const TimeDelta& delay, |
| 574 NudgeSource source, const ModelTypePayloadMap& types_with_payloads, | 574 NudgeSource source, const ModelTypeStateMap& type_state_map, |
| 575 const tracked_objects::Location& nudge_location) { | 575 const tracked_objects::Location& nudge_location) { |
| 576 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 576 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 577 SDVLOG_LOC(nudge_location, 2) | 577 SDVLOG_LOC(nudge_location, 2) |
| 578 << "Nudge scheduled with delay " << delay.InMilliseconds() << " ms, " | 578 << "Nudge scheduled with delay " << delay.InMilliseconds() << " ms, " |
| 579 << "source " << GetNudgeSourceString(source) << ", " | 579 << "source " << GetNudgeSourceString(source) << ", " |
| 580 << "payloads " | 580 << "payloads " |
| 581 << ModelTypePayloadMapToString(types_with_payloads); | 581 << ModelTypeStateMapToString(type_state_map); |
| 582 | 582 |
| 583 SyncSchedulerImpl::ScheduleNudgeImpl(delay, | 583 SyncSchedulerImpl::ScheduleNudgeImpl(delay, |
| 584 GetUpdatesFromNudgeSource(source), | 584 GetUpdatesFromNudgeSource(source), |
| 585 types_with_payloads, | 585 type_state_map, |
| 586 false, | 586 false, |
| 587 nudge_location); | 587 nudge_location); |
| 588 } | 588 } |
| 589 | 589 |
| 590 void SyncSchedulerImpl::ScheduleNudgeImpl( | 590 void SyncSchedulerImpl::ScheduleNudgeImpl( |
| 591 const TimeDelta& delay, | 591 const TimeDelta& delay, |
| 592 GetUpdatesCallerInfo::GetUpdatesSource source, | 592 GetUpdatesCallerInfo::GetUpdatesSource source, |
| 593 const ModelTypePayloadMap& types_with_payloads, | 593 const ModelTypeStateMap& type_state_map, |
| 594 bool is_canary_job, const tracked_objects::Location& nudge_location) { | 594 bool is_canary_job, const tracked_objects::Location& nudge_location) { |
| 595 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 595 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 596 | 596 |
| 597 SDVLOG_LOC(nudge_location, 2) | 597 SDVLOG_LOC(nudge_location, 2) |
| 598 << "In ScheduleNudgeImpl with delay " | 598 << "In ScheduleNudgeImpl with delay " |
| 599 << delay.InMilliseconds() << " ms, " | 599 << delay.InMilliseconds() << " ms, " |
| 600 << "source " << GetUpdatesSourceString(source) << ", " | 600 << "source " << GetUpdatesSourceString(source) << ", " |
| 601 << "payloads " | 601 << "payloads " |
| 602 << ModelTypePayloadMapToString(types_with_payloads) | 602 << ModelTypeStateMapToString(type_state_map) |
| 603 << (is_canary_job ? " (canary)" : ""); | 603 << (is_canary_job ? " (canary)" : ""); |
| 604 | 604 |
| 605 SyncSourceInfo info(source, types_with_payloads); | 605 SyncSourceInfo info(source, type_state_map); |
| 606 | 606 |
| 607 SyncSession* session(CreateSyncSession(info)); | 607 SyncSession* session(CreateSyncSession(info)); |
| 608 SyncSessionJob job(SyncSessionJob::NUDGE, TimeTicks::Now() + delay, | 608 SyncSessionJob job(SyncSessionJob::NUDGE, TimeTicks::Now() + delay, |
| 609 make_linked_ptr(session), is_canary_job, | 609 make_linked_ptr(session), is_canary_job, |
| 610 ConfigurationParams(), nudge_location); | 610 ConfigurationParams(), nudge_location); |
| 611 | 611 |
| 612 session = NULL; | 612 session = NULL; |
| 613 if (!ShouldRunJob(job)) | 613 if (!ShouldRunJob(job)) |
| 614 return; | 614 return; |
| 615 | 615 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 SDVLOG(2) << "Done SyncShare looping."; | 773 SDVLOG(2) << "Done SyncShare looping."; |
| 774 | 774 |
| 775 FinishSyncSessionJob(job); | 775 FinishSyncSessionJob(job); |
| 776 } | 776 } |
| 777 | 777 |
| 778 void SyncSchedulerImpl::FinishSyncSessionJob(const SyncSessionJob& job) { | 778 void SyncSchedulerImpl::FinishSyncSessionJob(const SyncSessionJob& job) { |
| 779 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 779 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 780 // Update timing information for how often datatypes are triggering nudges. | 780 // Update timing information for how often datatypes are triggering nudges. |
| 781 base::TimeTicks now = TimeTicks::Now(); | 781 base::TimeTicks now = TimeTicks::Now(); |
| 782 if (!last_sync_session_end_time_.is_null()) { | 782 if (!last_sync_session_end_time_.is_null()) { |
| 783 ModelTypePayloadMap::const_iterator iter; | 783 ModelTypeStateMap::const_iterator iter; |
| 784 for (iter = job.session->source().types.begin(); | 784 for (iter = job.session->source().types.begin(); |
| 785 iter != job.session->source().types.end(); | 785 iter != job.session->source().types.end(); |
| 786 ++iter) { | 786 ++iter) { |
| 787 #define PER_DATA_TYPE_MACRO(type_str) \ | 787 #define PER_DATA_TYPE_MACRO(type_str) \ |
| 788 SYNC_FREQ_HISTOGRAM("Sync.Freq" type_str, \ | 788 SYNC_FREQ_HISTOGRAM("Sync.Freq" type_str, \ |
| 789 now - last_sync_session_end_time_); | 789 now - last_sync_session_end_time_); |
| 790 SYNC_DATA_TYPE_HISTOGRAM(iter->first); | 790 SYNC_DATA_TYPE_HISTOGRAM(iter->first); |
| 791 #undef PER_DATA_TYPE_MACRO | 791 #undef PER_DATA_TYPE_MACRO |
| 792 } | 792 } |
| 793 } | 793 } |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1034 SyncSourceInfo info(source); | 1034 SyncSourceInfo info(source); |
| 1035 SyncSession* session(new SyncSession(session_context_, this, info, | 1035 SyncSession* session(new SyncSession(session_context_, this, info, |
| 1036 session_context_->routing_info(), session_context_->workers())); | 1036 session_context_->routing_info(), session_context_->workers())); |
| 1037 | 1037 |
| 1038 return session; | 1038 return session; |
| 1039 } | 1039 } |
| 1040 | 1040 |
| 1041 void SyncSchedulerImpl::PollTimerCallback() { | 1041 void SyncSchedulerImpl::PollTimerCallback() { |
| 1042 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1042 DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| 1043 ModelSafeRoutingInfo r; | 1043 ModelSafeRoutingInfo r; |
| 1044 ModelTypePayloadMap types_with_payloads = | 1044 ModelTypeStateMap type_state_map = |
| 1045 ModelSafeRoutingInfoToPayloadMap(r, std::string()); | 1045 ModelSafeRoutingInfoToStateMap(r, std::string()); |
| 1046 SyncSourceInfo info(GetUpdatesCallerInfo::PERIODIC, types_with_payloads); | 1046 SyncSourceInfo info(GetUpdatesCallerInfo::PERIODIC, type_state_map); |
| 1047 SyncSession* s = CreateSyncSession(info); | 1047 SyncSession* s = CreateSyncSession(info); |
| 1048 | 1048 |
| 1049 SyncSessionJob job(SyncSessionJob::POLL, TimeTicks::Now(), | 1049 SyncSessionJob job(SyncSessionJob::POLL, TimeTicks::Now(), |
| 1050 make_linked_ptr(s), | 1050 make_linked_ptr(s), |
| 1051 false, | 1051 false, |
| 1052 ConfigurationParams(), | 1052 ConfigurationParams(), |
| 1053 FROM_HERE); | 1053 FROM_HERE); |
| 1054 | 1054 |
| 1055 ScheduleSyncSessionJob(job); | 1055 ScheduleSyncSessionJob(job); |
| 1056 } | 1056 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 | 1147 |
| 1148 #undef SDVLOG_LOC | 1148 #undef SDVLOG_LOC |
| 1149 | 1149 |
| 1150 #undef SDVLOG | 1150 #undef SDVLOG |
| 1151 | 1151 |
| 1152 #undef SLOG | 1152 #undef SLOG |
| 1153 | 1153 |
| 1154 #undef ENUM_CASE | 1154 #undef ENUM_CASE |
| 1155 | 1155 |
| 1156 } // namespace syncer | 1156 } // namespace syncer |
| OLD | NEW |