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

Side by Side Diff: components/metrics/metrics_service.cc

Issue 1474483004: WebView Metrics client implementation (Chromium part) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move client back to browser layer, make it a Leaky global, and some cleanup Created 5 years 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
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 //------------------------------------------------------------------------------ 5 //------------------------------------------------------------------------------
6 // Description of the life cycle of a instance of MetricsService. 6 // Description of the life cycle of a instance of MetricsService.
7 // 7 //
8 // OVERVIEW 8 // OVERVIEW
9 // 9 //
10 // A MetricsService instance is typically created at application startup. It is 10 // A MetricsService instance is typically created at application startup. It is
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 if (install_date == 0) 311 if (install_date == 0)
312 local_state_->SetInt64(prefs::kInstallDate, base::Time::Now().ToTimeT()); 312 local_state_->SetInt64(prefs::kInstallDate, base::Time::Now().ToTimeT());
313 } 313 }
314 314
315 MetricsService::~MetricsService() { 315 MetricsService::~MetricsService() {
316 DisableRecording(); 316 DisableRecording();
317 } 317 }
318 318
319 void MetricsService::InitializeMetricsRecordingState() { 319 void MetricsService::InitializeMetricsRecordingState() {
320 InitializeMetricsState(); 320 InitializeMetricsState();
321 321 LOG(WARNING) << "metrix InitializeMetricsRecordingState";
322 base::Closure upload_callback = 322 base::Closure upload_callback =
323 base::Bind(&MetricsService::StartScheduledUpload, 323 base::Bind(&MetricsService::StartScheduledUpload,
324 self_ptr_factory_.GetWeakPtr()); 324 self_ptr_factory_.GetWeakPtr());
325 scheduler_.reset( 325 scheduler_.reset(
326 new MetricsReportingScheduler( 326 new MetricsReportingScheduler(
327 upload_callback, 327 upload_callback,
328 // MetricsServiceClient outlives MetricsService, and 328 // MetricsServiceClient outlives MetricsService, and
329 // MetricsReportingScheduler is tied to the lifetime of |this|. 329 // MetricsReportingScheduler is tied to the lifetime of |this|.
330 base::Bind(&MetricsServiceClient::GetStandardUploadInterval, 330 base::Bind(&MetricsServiceClient::GetStandardUploadInterval,
331 base::Unretained(client_)))); 331 base::Unretained(client_))));
332 } 332 }
333 333
334 void MetricsService::Start() { 334 void MetricsService::Start() {
335 LOG(WARNING) << "metrix starting metrics service";
335 HandleIdleSinceLastTransmission(false); 336 HandleIdleSinceLastTransmission(false);
336 EnableRecording(); 337 EnableRecording();
337 EnableReporting(); 338 EnableReporting();
338 } 339 }
339 340
340 void MetricsService::StartRecordingForTests() { 341 void MetricsService::StartRecordingForTests() {
341 test_mode_active_ = true; 342 test_mode_active_ = true;
342 EnableRecording(); 343 EnableRecording();
343 DisableReporting(); 344 DisableReporting();
344 } 345 }
345 346
346 void MetricsService::Stop() { 347 void MetricsService::Stop() {
348 LOG(WARNING) << "metrix stopping metrics service";
347 HandleIdleSinceLastTransmission(false); 349 HandleIdleSinceLastTransmission(false);
348 DisableReporting(); 350 DisableReporting();
349 DisableRecording(); 351 DisableRecording();
350 } 352 }
351 353
352 void MetricsService::EnableReporting() { 354 void MetricsService::EnableReporting() {
355 LOG(WARNING) << "metrix enablereporting";
353 if (reporting_active_) 356 if (reporting_active_)
354 return; 357 return;
355 reporting_active_ = true; 358 reporting_active_ = true;
356 StartSchedulerIfNecessary(); 359 StartSchedulerIfNecessary();
357 } 360 }
358 361
359 void MetricsService::DisableReporting() { 362 void MetricsService::DisableReporting() {
360 reporting_active_ = false; 363 reporting_active_ = false;
361 } 364 }
362 365
(...skipping 15 matching lines...) Expand all
378 381
379 scoped_ptr<const base::FieldTrial::EntropyProvider> 382 scoped_ptr<const base::FieldTrial::EntropyProvider>
380 MetricsService::CreateEntropyProvider() { 383 MetricsService::CreateEntropyProvider() {
381 // TODO(asvitkine): Refactor the code so that MetricsService does not expose 384 // TODO(asvitkine): Refactor the code so that MetricsService does not expose
382 // this method. 385 // this method.
383 return state_manager_->CreateEntropyProvider(); 386 return state_manager_->CreateEntropyProvider();
384 } 387 }
385 388
386 void MetricsService::EnableRecording() { 389 void MetricsService::EnableRecording() {
387 DCHECK(IsSingleThreaded()); 390 DCHECK(IsSingleThreaded());
388 391 LOG(WARNING) << "metrix EnableRecording " << recording_state_;
389 if (recording_state_ == ACTIVE) 392 if (recording_state_ == ACTIVE)
390 return; 393 return;
391 recording_state_ = ACTIVE; 394 recording_state_ = ACTIVE;
392 395
393 state_manager_->ForceClientIdCreation(); 396 state_manager_->ForceClientIdCreation();
394 client_->SetMetricsClientId(state_manager_->client_id()); 397 client_->SetMetricsClientId(state_manager_->client_id());
395 if (!log_manager_.current_log()) 398 if (!log_manager_.current_log())
396 OpenNewLog(); 399 OpenNewLog();
397 400
398 for (size_t i = 0; i < metrics_providers_.size(); ++i) 401 for (size_t i = 0; i < metrics_providers_.size(); ++i)
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 636
634 // Bookkeeping for the uninstall metrics. 637 // Bookkeeping for the uninstall metrics.
635 IncrementLongPrefsValue(prefs::kUninstallLaunchCount); 638 IncrementLongPrefsValue(prefs::kUninstallLaunchCount);
636 639
637 // Kick off the process of saving the state (so the uptime numbers keep 640 // Kick off the process of saving the state (so the uptime numbers keep
638 // getting updated) every n minutes. 641 // getting updated) every n minutes.
639 ScheduleNextStateSave(); 642 ScheduleNextStateSave();
640 } 643 }
641 644
642 void MetricsService::OnUserAction(const std::string& action) { 645 void MetricsService::OnUserAction(const std::string& action) {
646 LOG(INFO) << "metrix metrics::MetricsService::OnUserAction action=" << action;
647
643 if (!ShouldLogEvents()) 648 if (!ShouldLogEvents())
644 return; 649 return;
645 650
646 log_manager_.current_log()->RecordUserAction(action); 651 log_manager_.current_log()->RecordUserAction(action);
647 HandleIdleSinceLastTransmission(false); 652 HandleIdleSinceLastTransmission(false);
648 } 653 }
649 654
650 void MetricsService::FinishedInitTask() { 655 void MetricsService::FinishedInitTask() {
656 LOG(WARNING) << "metrix FinishedInitTask";
651 DCHECK_EQ(INIT_TASK_SCHEDULED, state_); 657 DCHECK_EQ(INIT_TASK_SCHEDULED, state_);
652 state_ = INIT_TASK_DONE; 658 state_ = INIT_TASK_DONE;
653 659
654 // Create the initial log. 660 // Create the initial log.
655 if (!initial_metrics_log_.get()) { 661 if (!initial_metrics_log_.get()) {
656 initial_metrics_log_ = CreateLog(MetricsLog::ONGOING_LOG); 662 initial_metrics_log_ = CreateLog(MetricsLog::ONGOING_LOG);
657 NotifyOnDidCreateMetricsLog(); 663 NotifyOnDidCreateMetricsLog();
658 } 664 }
659 665
660 scheduler_->InitTaskComplete(); 666 scheduler_->InitTaskComplete();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 state_ = INIT_TASK_SCHEDULED; 727 state_ = INIT_TASK_SCHEDULED;
722 728
723 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 729 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
724 FROM_HERE, base::Bind(&MetricsService::StartInitTask, 730 FROM_HERE, base::Bind(&MetricsService::StartInitTask,
725 self_ptr_factory_.GetWeakPtr()), 731 self_ptr_factory_.GetWeakPtr()),
726 base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); 732 base::TimeDelta::FromSeconds(kInitializationDelaySeconds));
727 } 733 }
728 } 734 }
729 735
730 void MetricsService::StartInitTask() { 736 void MetricsService::StartInitTask() {
737 LOG(WARNING) << "metrix StartInitTask";
731 client_->InitializeSystemProfileMetrics( 738 client_->InitializeSystemProfileMetrics(
732 base::Bind(&MetricsService::FinishedInitTask, 739 base::Bind(&MetricsService::FinishedInitTask,
733 self_ptr_factory_.GetWeakPtr())); 740 self_ptr_factory_.GetWeakPtr()));
734 } 741 }
735 742
736 void MetricsService::CloseCurrentLog() { 743 void MetricsService::CloseCurrentLog() {
737 if (!log_manager_.current_log()) 744 if (!log_manager_.current_log())
738 return; 745 return;
739 746
740 // TODO(jar): Integrate bounds on log recording more consistently, so that we 747 // TODO(jar): Integrate bounds on log recording more consistently, so that we
(...skipping 29 matching lines...) Expand all
770 return; // We didn't and still don't have time to get plugin list etc. 777 return; // We didn't and still don't have time to get plugin list etc.
771 778
772 CloseCurrentLog(); 779 CloseCurrentLog();
773 log_manager_.PersistUnsentLogs(); 780 log_manager_.PersistUnsentLogs();
774 } 781 }
775 782
776 //------------------------------------------------------------------------------ 783 //------------------------------------------------------------------------------
777 // Transmission of logs methods 784 // Transmission of logs methods
778 785
779 void MetricsService::StartSchedulerIfNecessary() { 786 void MetricsService::StartSchedulerIfNecessary() {
787 LOG(WARNING) << "metrix StartSchedulerIfNecessary";
780 // Never schedule cutting or uploading of logs in test mode. 788 // Never schedule cutting or uploading of logs in test mode.
781 if (test_mode_active_) 789 if (test_mode_active_)
782 return; 790 return;
783 791
784 // Even if reporting is disabled, the scheduler is needed to trigger the 792 // Even if reporting is disabled, the scheduler is needed to trigger the
785 // creation of the initial log, which must be done in order for any logs to be 793 // creation of the initial log, which must be done in order for any logs to be
786 // persisted on shutdown or backgrounding. 794 // persisted on shutdown or backgrounding.
787 if (recording_active() && 795 if (recording_active() &&
788 (reporting_active() || state_ < SENDING_LOGS)) { 796 (reporting_active() || state_ < SENDING_LOGS)) {
789 scheduler_->Start(); 797 scheduler_->Start();
790 } 798 }
791 } 799 }
792 800
793 void MetricsService::StartScheduledUpload() { 801 void MetricsService::StartScheduledUpload() {
794 DCHECK(state_ >= INIT_TASK_DONE); 802 DCHECK(state_ >= INIT_TASK_DONE);
803 LOG(WARNING) << " metrix StartScheduledUpload " << idle_since_last_transmissi on_
804 << " " << recording_active() << " " << state_;
795 // If we're getting no notifications, then the log won't have much in it, and 805 // If we're getting no notifications, then the log won't have much in it, and
796 // it's possible the computer is about to go to sleep, so don't upload and 806 // it's possible the computer is about to go to sleep, so don't upload and
797 // stop the scheduler. 807 // stop the scheduler.
798 // If recording has been turned off, the scheduler doesn't need to run. 808 // If recording has been turned off, the scheduler doesn't need to run.
799 // If reporting is off, proceed if the initial log hasn't been created, since 809 // If reporting is off, proceed if the initial log hasn't been created, since
800 // that has to happen in order for logs to be cut and stored when persisting. 810 // that has to happen in order for logs to be cut and stored when persisting.
801 // TODO(stuartmorgan): Call Stop() on the scheduler when reporting and/or 811 // TODO(stuartmorgan): Call Stop() on the scheduler when reporting and/or
802 // recording are turned off instead of letting it fire and then aborting. 812 // recording are turned off instead of letting it fire and then aborting.
803 if (idle_since_last_transmission_ || 813 if (idle_since_last_transmission_ ||
804 !recording_active() || 814 !recording_active() ||
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 } else { 850 } else {
841 DCHECK_EQ(SENDING_LOGS, state_); 851 DCHECK_EQ(SENDING_LOGS, state_);
842 CloseCurrentLog(); 852 CloseCurrentLog();
843 OpenNewLog(); 853 OpenNewLog();
844 } 854 }
845 SendNextLog(); 855 SendNextLog();
846 } 856 }
847 857
848 void MetricsService::SendNextLog() { 858 void MetricsService::SendNextLog() {
849 DCHECK_EQ(SENDING_LOGS, state_); 859 DCHECK_EQ(SENDING_LOGS, state_);
860 LOG(WARNING) << "metrix SendNextLog";
850 if (!reporting_active()) { 861 if (!reporting_active()) {
851 scheduler_->Stop(); 862 scheduler_->Stop();
852 scheduler_->UploadCancelled(); 863 scheduler_->UploadCancelled();
853 return; 864 return;
854 } 865 }
855 if (!log_manager_.has_unsent_logs()) { 866 if (!log_manager_.has_unsent_logs()) {
856 // Should only get here if serializing the log failed somehow. 867 // Should only get here if serializing the log failed somehow.
857 // Just tell the scheduler it was uploaded and wait for the next log 868 // Just tell the scheduler it was uploaded and wait for the next log
858 // interval. 869 // interval.
859 scheduler_->UploadFinished(true, log_manager_.has_unsent_logs()); 870 scheduler_->UploadFinished(true, log_manager_.has_unsent_logs());
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 log_manager_.ResumePausedLog(); 944 log_manager_.ResumePausedLog();
934 945
935 // Store unsent logs, including the initial log that was just saved, so 946 // Store unsent logs, including the initial log that was just saved, so
936 // that they're not lost in case of a crash before upload time. 947 // that they're not lost in case of a crash before upload time.
937 log_manager_.PersistUnsentLogs(); 948 log_manager_.PersistUnsentLogs();
938 949
939 state_ = SENDING_LOGS; 950 state_ = SENDING_LOGS;
940 } 951 }
941 952
942 void MetricsService::SendStagedLog() { 953 void MetricsService::SendStagedLog() {
954 LOG(WARNING) << "metrix SendStagedLog";
943 DCHECK(log_manager_.has_staged_log()); 955 DCHECK(log_manager_.has_staged_log());
944 if (!log_manager_.has_staged_log()) 956 if (!log_manager_.has_staged_log())
945 return; 957 return;
946 958
947 DCHECK(!log_upload_in_progress_); 959 DCHECK(!log_upload_in_progress_);
948 log_upload_in_progress_ = true; 960 log_upload_in_progress_ = true;
949 961
950 if (!ShouldUploadLog()) { 962 if (!ShouldUploadLog()) {
951 SkipAndDiscardUpload(); 963 SkipAndDiscardUpload();
952 return; 964 return;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 base::Time::Now().ToTimeT()); 1155 base::Time::Now().ToTimeT());
1144 } 1156 }
1145 1157
1146 void MetricsService::SkipAndDiscardUpload() { 1158 void MetricsService::SkipAndDiscardUpload() {
1147 log_manager_.DiscardStagedLog(); 1159 log_manager_.DiscardStagedLog();
1148 scheduler_->UploadCancelled(); 1160 scheduler_->UploadCancelled();
1149 log_upload_in_progress_ = false; 1161 log_upload_in_progress_ = false;
1150 } 1162 }
1151 1163
1152 } // namespace metrics 1164 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698