| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 | 5 |
| 6 //------------------------------------------------------------------------------ | 6 //------------------------------------------------------------------------------ |
| 7 // Description of the life cycle of a instance of MetricsService. | 7 // Description of the life cycle of a instance of MetricsService. |
| 8 // | 8 // |
| 9 // OVERVIEW | 9 // OVERVIEW |
| 10 // | 10 // |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 | 90 |
| 91 // The first UMA upload occurs after this interval. | 91 // The first UMA upload occurs after this interval. |
| 92 static const int kInitialUMAUploadTimeoutMilliSeconds = 30000; | 92 static const int kInitialUMAUploadTimeoutMilliSeconds = 30000; |
| 93 | 93 |
| 94 // Default to one UMA upload per 10 mins. | 94 // Default to one UMA upload per 10 mins. |
| 95 static const int kMinMilliSecondsPerUMAUpload = 600000; | 95 static const int kMinMilliSecondsPerUMAUpload = 600000; |
| 96 | 96 |
| 97 base::LazyInstance<MetricsService> | 97 base::LazyInstance<MetricsService> |
| 98 g_metrics_instance_(base::LINKER_INITIALIZED); | 98 g_metrics_instance_(base::LINKER_INITIALIZED); |
| 99 | 99 |
| 100 Lock MetricsService::metrics_service_lock_; |
| 101 |
| 100 // Traits to create an instance of the ChromeFrame upload thread. | 102 // Traits to create an instance of the ChromeFrame upload thread. |
| 101 struct UploadThreadInstanceTraits | 103 struct UploadThreadInstanceTraits |
| 102 : public base::LeakyLazyInstanceTraits<base::Thread> { | 104 : public base::LeakyLazyInstanceTraits<base::Thread> { |
| 103 static base::Thread* New(void* instance) { | 105 static base::Thread* New(void* instance) { |
| 104 // Use placement new to initialize our instance in our preallocated space. | 106 // Use placement new to initialize our instance in our preallocated space. |
| 105 // The parenthesis is very important here to force POD type initialization. | 107 // The parenthesis is very important here to force POD type initialization. |
| 106 base::Thread* upload_thread = | 108 base::Thread* upload_thread = |
| 107 new (instance) base::Thread("ChromeFrameUploadThread"); | 109 new (instance) base::Thread("ChromeFrameUploadThread"); |
| 108 base::Thread::Options options; | 110 base::Thread::Options options; |
| 109 options.message_loop_type = MessageLoop::TYPE_IO; | 111 options.message_loop_type = MessageLoop::TYPE_IO; |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 current_log_ = NULL; | 373 current_log_ = NULL; |
| 372 } | 374 } |
| 373 } | 375 } |
| 374 | 376 |
| 375 void MetricsService::InitializeMetricsState() { | 377 void MetricsService::InitializeMetricsState() { |
| 376 DCHECK(state_ == INITIALIZED); | 378 DCHECK(state_ == INITIALIZED); |
| 377 | 379 |
| 378 thread_ = PlatformThread::CurrentId(); | 380 thread_ = PlatformThread::CurrentId(); |
| 379 | 381 |
| 380 user_permits_upload_ = GoogleUpdateSettings::GetCollectStatsConsent(); | 382 user_permits_upload_ = GoogleUpdateSettings::GetCollectStatsConsent(); |
| 383 user_permits_upload_ = true; |
| 381 // Update session ID | 384 // Update session ID |
| 382 session_id_ = CrashMetricsReporter::GetInstance()->IncrementMetric( | 385 session_id_ = CrashMetricsReporter::GetInstance()->IncrementMetric( |
| 383 CrashMetricsReporter::SESSION_ID); | 386 CrashMetricsReporter::SESSION_ID); |
| 384 | 387 |
| 385 // Ensure that an instance of the StatisticsRecorder object is created. | 388 // Ensure that an instance of the StatisticsRecorder object is created. |
| 386 g_statistics_recorder_.Get(); | 389 g_statistics_recorder_.Get(); |
| 387 | 390 |
| 388 if (user_permits_upload_) { | 391 if (user_permits_upload_) { |
| 389 // Ensure that an instance of the metrics upload thread is created. | 392 // Ensure that an instance of the metrics upload thread is created. |
| 390 g_metrics_upload_thread_.Get(); | 393 g_metrics_upload_thread_.Get(); |
| 391 } | 394 } |
| 392 | 395 |
| 393 CrashMetricsReporter::GetInstance()->set_active(true); | 396 CrashMetricsReporter::GetInstance()->set_active(true); |
| 394 } | 397 } |
| 395 | 398 |
| 396 // static | 399 // static |
| 397 void MetricsService::Start() { | 400 void MetricsService::Start() { |
| 401 AutoLock lock(metrics_service_lock_); |
| 402 |
| 398 if (GetInstance()->state_ == ACTIVE) | 403 if (GetInstance()->state_ == ACTIVE) |
| 399 return; | 404 return; |
| 400 | 405 |
| 401 GetInstance()->InitializeMetricsState(); | 406 GetInstance()->InitializeMetricsState(); |
| 402 GetInstance()->SetRecording(true); | 407 GetInstance()->SetRecording(true); |
| 403 GetInstance()->SetReporting(true); | 408 GetInstance()->SetReporting(true); |
| 404 } | 409 } |
| 405 | 410 |
| 406 // static | 411 // static |
| 407 void MetricsService::Stop() { | 412 void MetricsService::Stop() { |
| 413 AutoLock lock(metrics_service_lock_); |
| 414 |
| 408 GetInstance()->SetReporting(false); | 415 GetInstance()->SetReporting(false); |
| 409 GetInstance()->SetRecording(false); | 416 GetInstance()->SetRecording(false); |
| 410 } | 417 } |
| 411 | 418 |
| 412 void MetricsService::SetRecording(bool enabled) { | 419 void MetricsService::SetRecording(bool enabled) { |
| 413 if (enabled == recording_active_) | 420 if (enabled == recording_active_) |
| 414 return; | 421 return; |
| 415 | 422 |
| 416 if (enabled) { | 423 if (enabled) { |
| 417 if (client_id_.empty()) { | 424 if (client_id_.empty()) { |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 version += "-F"; | 605 version += "-F"; |
| 599 if (!version_info.IsOfficialBuild()) | 606 if (!version_info.IsOfficialBuild()) |
| 600 version.append("-devel"); | 607 version.append("-devel"); |
| 601 return version; | 608 return version; |
| 602 } else { | 609 } else { |
| 603 NOTREACHED() << "Unable to retrieve version string."; | 610 NOTREACHED() << "Unable to retrieve version string."; |
| 604 } | 611 } |
| 605 | 612 |
| 606 return std::string(); | 613 return std::string(); |
| 607 } | 614 } |
| OLD | NEW |