Index: chrome/browser/sync/engine/syncer.cc |
=================================================================== |
--- chrome/browser/sync/engine/syncer.cc (revision 30121) |
+++ chrome/browser/sync/engine/syncer.cc (working copy) |
@@ -5,6 +5,8 @@ |
#include "chrome/browser/sync/engine/syncer.h" |
#include "base/format_macros.h" |
+#include "base/message_loop.h" |
+#include "chrome/browser/chrome_thread.h" |
#include "chrome/browser/sync/engine/apply_updates_command.h" |
#include "chrome/browser/sync/engine/build_and_process_conflict_sets_command.h" |
#include "chrome/browser/sync/engine/build_commit_command.h" |
@@ -66,12 +68,24 @@ |
syncer_event_channel_.reset(new SyncerEventChannel(shutdown)); |
shutdown_channel_.reset(new ShutdownChannel(this)); |
+ extensions_monitor_ = new ExtensionsActivityMonitor( |
+ ChromeThread::GetMessageLoop(ChromeThread::UI)); |
+ |
ScopedDirLookup dir(dirman_, account_name_); |
// The directory must be good here. |
CHECK(dir.good()); |
} |
-Syncer::~Syncer() {} |
+Syncer::~Syncer() { |
+ MessageLoop* ui_loop = ChromeThread::GetMessageLoop(ChromeThread::UI); |
+ if (ui_loop) { |
+ ui_loop->DeleteSoon(FROM_HERE, extensions_monitor_); |
+ } else { |
+ NOTREACHED(); |
+ delete extensions_monitor_; |
+ } |
+ extensions_monitor_ = NULL; |
+} |
void Syncer::RequestNudge(int milliseconds) { |
SyncerEvent event; |
@@ -92,6 +106,17 @@ |
SyncerSession session(&cycle_state, process_state); |
session.set_source(TestAndSetUpdatesSource()); |
session.set_notifications_enabled(notifications_enabled()); |
+ // This isn't perfect, as we can end up bundling extensions activity |
+ // intended for the next session into the current one. We could do a |
+ // test-and-reset as with the source, but note that also falls short if |
+ // the commit request fails (due to lost connection, for example), as we will |
+ // fall all the way back to the syncer thread main loop in that case, and |
+ // wind up creating a new session when a connection is established, losing |
+ // the records set here on the original attempt. This should provide us |
+ // with the right data "most of the time", and we're only using this for |
+ // analysis purposes, so Law of Large Numbers FTW. |
+ extensions_monitor_->GetAndClearRecords( |
+ session.mutable_extensions_activity()); |
SyncShare(&session, SYNCER_BEGIN, SYNCER_END); |
return session.HasMoreToSync(); |
} |
@@ -205,7 +230,8 @@ |
} |
case PROCESS_COMMIT_RESPONSE: { |
LOG(INFO) << "Processing the commit response"; |
- ProcessCommitResponseCommand process_response_command; |
+ ProcessCommitResponseCommand process_response_command( |
+ extensions_monitor_); |
process_response_command.Execute(session); |
next_step = BUILD_AND_PROCESS_CONFLICT_SETS; |
break; |