diff --git a/metrics/metrics.gyp b/metrics/metrics.gyp index 60e2d1a95..31305097f 100644 --- a/metrics/metrics.gyp +++ b/metrics/metrics.gyp @@ -3,10 +3,6 @@ 'variables': { 'deps': [ 'dbus-1', - 'dbus-glib-1', - 'glib-2.0', - 'gobject-2.0', - 'gthread-2.0', 'libchrome-<(libbase_ver)', 'libchromeos-<(libbase_ver)', ] diff --git a/metrics/uploader/system_profile_cache.cc b/metrics/uploader/system_profile_cache.cc index 28e0f0923..d16b1dd58 100644 --- a/metrics/uploader/system_profile_cache.cc +++ b/metrics/uploader/system_profile_cache.cc @@ -4,7 +4,6 @@ #include "metrics/uploader/system_profile_cache.h" -#include #include #include diff --git a/metrics/uploader/upload_service.cc b/metrics/uploader/upload_service.cc index cdec91e41..dd49d1f67 100644 --- a/metrics/uploader/upload_service.cc +++ b/metrics/uploader/upload_service.cc @@ -4,11 +4,12 @@ #include "metrics/uploader/upload_service.h" -#include #include +#include #include #include +#include #include #include #include @@ -28,14 +29,29 @@ UploadService::UploadService(SystemProfileSetter* setter, const std::string& server) : system_profile_setter_(setter), histogram_snapshot_manager_(this), - sender_(new HttpSender(server)) { + sender_(new HttpSender(server)), + testing_(false) { +} + +UploadService::UploadService(SystemProfileSetter* setter, + const std::string& server, + bool testing) + : UploadService(setter, server) { + testing_ = testing; } void UploadService::Init(const base::TimeDelta& upload_interval, const std::string& metrics_file) { base::StatisticsRecorder::Initialize(); metrics_file_ = metrics_file; - g_timeout_add_seconds(upload_interval.InSeconds(), &UploadEventStatic, this); + + if (!testing_) { + base::MessageLoop::current()->PostDelayedTask(FROM_HERE, + base::Bind(&UploadService::UploadEventCallback, + base::Unretained(this), + upload_interval), + upload_interval); + } } void UploadService::StartNewLog() { @@ -46,12 +62,14 @@ void UploadService::StartNewLog() { current_log_.reset(log); } -// static -int UploadService::UploadEventStatic(void* uploader) { - CHECK(uploader); - // This is called by glib with a pointer to an UploadEvent object. - static_cast(uploader)->UploadEvent(); - return 1; +void UploadService::UploadEventCallback(const base::TimeDelta& interval) { + UploadEvent(); + + base::MessageLoop::current()->PostDelayedTask(FROM_HERE, + base::Bind(&UploadService::UploadEventCallback, + base::Unretained(this), + interval), + interval); } void UploadService::UploadEvent() { diff --git a/metrics/uploader/upload_service.h b/metrics/uploader/upload_service.h index 3611794e3..0b087de12 100644 --- a/metrics/uploader/upload_service.h +++ b/metrics/uploader/upload_service.h @@ -64,9 +64,8 @@ class UploadService : public base::HistogramFlattener { // launch as it is destroyed when staging the log. void StartNewLog(); - // Glib takes a function pointer and passes the object as a void*. - // Uploader is expected to be an UploaderService. - static int UploadEventStatic(void* uploader); + // Event callback for handling MessageLoop events. + void UploadEventCallback(const base::TimeDelta& interval); // Triggers an upload event. void UploadEvent(); @@ -98,6 +97,11 @@ class UploadService : public base::HistogramFlattener { FRIEND_TEST(UploadServiceTest, UnknownCrashIgnored); FRIEND_TEST(UploadServiceTest, ValuesInConfigFileAreSent); + // Private constructor for use in unit testing. + UploadService(SystemProfileSetter* setter, + const std::string& server, + bool testing); + // If a staged log fails to upload more than kMaxFailedUpload times, it // will be discarded. static const int kMaxFailedUpload; @@ -137,6 +141,8 @@ class UploadService : public base::HistogramFlattener { scoped_ptr staged_log_; std::string metrics_file_; + + bool testing_; }; #endif // METRICS_UPLOADER_UPLOAD_SERVICE_H_ diff --git a/metrics/uploader/upload_service_test.cc b/metrics/uploader/upload_service_test.cc index 363c8c18a..ca90e85ea 100644 --- a/metrics/uploader/upload_service_test.cc +++ b/metrics/uploader/upload_service_test.cc @@ -26,7 +26,7 @@ class UploadServiceTest : public testing::Test { protected: UploadServiceTest() : cache_(true, "/"), - upload_service_(new MockSystemProfileSetter(), kMetricsServer), + upload_service_(new MockSystemProfileSetter(), kMetricsServer, true), exit_manager_(new base::AtExitManager()) { sender_ = new SenderMock; upload_service_.sender_.reset(sender_);