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

Side by Side Diff: chrome/browser/metrics/metrics_service.cc

Issue 8603013: base::Bind() conversion for MetricsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 10 // A MetricsService instance is typically created at application startup. It
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 // load. 257 // load.
258 int instances; 258 int instances;
259 259
260 ChildProcessInfo::ProcessType process_type; 260 ChildProcessInfo::ProcessType process_type;
261 }; 261 };
262 262
263 // Handles asynchronous fetching of memory details. 263 // Handles asynchronous fetching of memory details.
264 // Will run the provided task after finished. 264 // Will run the provided task after finished.
265 class MetricsMemoryDetails : public MemoryDetails { 265 class MetricsMemoryDetails : public MemoryDetails {
266 public: 266 public:
267 explicit MetricsMemoryDetails(Task* completion) : completion_(completion) {} 267 explicit MetricsMemoryDetails(const base::Closure& callback)
268 : callback_(callback) {}
268 269
269 virtual void OnDetailsAvailable() { 270 virtual void OnDetailsAvailable() {
270 MessageLoop::current()->PostTask(FROM_HERE, completion_); 271 MessageLoop::current()->PostTask(FROM_HERE, callback_);
271 } 272 }
272 273
273 private: 274 private:
274 ~MetricsMemoryDetails() {} 275 ~MetricsMemoryDetails() {}
275 276
276 Task* completion_; 277 base::Closure callback_;
277 DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); 278 DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails);
278 }; 279 };
279 280
280 // static 281 // static
281 void MetricsService::RegisterPrefs(PrefService* local_state) { 282 void MetricsService::RegisterPrefs(PrefService* local_state) {
282 DCHECK(IsSingleThreaded()); 283 DCHECK(IsSingleThreaded());
283 local_state->RegisterStringPref(prefs::kMetricsClientID, ""); 284 local_state->RegisterStringPref(prefs::kMetricsClientID, "");
284 local_state->RegisterInt64Pref(prefs::kMetricsClientIDTimestamp, 0); 285 local_state->RegisterInt64Pref(prefs::kMetricsClientIDTimestamp, 0);
285 local_state->RegisterInt64Pref(prefs::kStabilityLaunchTimeSec, 0); 286 local_state->RegisterInt64Pref(prefs::kStabilityLaunchTimeSec, 0);
286 local_state->RegisterInt64Pref(prefs::kStabilityLastTimestampSec, 0); 287 local_state->RegisterInt64Pref(prefs::kStabilityLastTimestampSec, 0);
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 // If reporting has been turned off, the scheduler doesn't need to run. 869 // If reporting has been turned off, the scheduler doesn't need to run.
869 if (!reporting_active() || !recording_active()) { 870 if (!reporting_active() || !recording_active()) {
870 scheduler_->Stop(); 871 scheduler_->Stop();
871 scheduler_->UploadCancelled(); 872 scheduler_->UploadCancelled();
872 return; 873 return;
873 } 874 }
874 875
875 DCHECK(!waiting_for_asynchronus_reporting_step_); 876 DCHECK(!waiting_for_asynchronus_reporting_step_);
876 waiting_for_asynchronus_reporting_step_ = true; 877 waiting_for_asynchronus_reporting_step_ = true;
877 878
878 Task* task = log_sender_factory_. 879 base::Closure callback =
879 NewRunnableMethod(&MetricsService::OnMemoryDetailCollectionDone); 880 base::Bind(&MetricsService::OnMemoryDetailCollectionDone,
881 log_sender_factory_.GetWeakPtr());
880 882
881 scoped_refptr<MetricsMemoryDetails> details(new MetricsMemoryDetails(task)); 883 scoped_refptr<MetricsMemoryDetails> details(
884 new MetricsMemoryDetails(callback));
882 details->StartFetch(); 885 details->StartFetch();
883 886
884 // Collect WebCore cache information to put into a histogram. 887 // Collect WebCore cache information to put into a histogram.
885 for (content::RenderProcessHost::iterator i( 888 for (content::RenderProcessHost::iterator i(
886 content::RenderProcessHost::AllHostsIterator()); 889 content::RenderProcessHost::AllHostsIterator());
887 !i.IsAtEnd(); i.Advance()) 890 !i.IsAtEnd(); i.Advance())
888 i.GetCurrentValue()->Send(new ChromeViewMsg_GetCacheResourceStats()); 891 i.GetCurrentValue()->Send(new ChromeViewMsg_GetCacheResourceStats());
889 } 892 }
890 893
891 void MetricsService::OnMemoryDetailCollectionDone() { 894 void MetricsService::OnMemoryDetailCollectionDone() {
892 DCHECK(IsSingleThreaded()); 895 DCHECK(IsSingleThreaded());
893 // This function should only be called as the callback from an ansynchronous 896 // This function should only be called as the callback from an ansynchronous
894 // step. 897 // step.
895 DCHECK(waiting_for_asynchronus_reporting_step_); 898 DCHECK(waiting_for_asynchronus_reporting_step_);
896 899
897 // Right before the UMA transmission gets started, there's one more thing we'd 900 // Right before the UMA transmission gets started, there's one more thing we'd
898 // like to record: the histogram of memory usage, so we spawn a task to 901 // like to record: the histogram of memory usage, so we spawn a task to
899 // collect the memory details and when that task is finished, it will call 902 // collect the memory details and when that task is finished, it will call
900 // OnMemoryDetailCollectionDone, which will call HistogramSynchronization to 903 // OnMemoryDetailCollectionDone, which will call HistogramSynchronization to
901 // collect histograms from all renderers and then we will call 904 // collect histograms from all renderers and then we will call
902 // OnHistogramSynchronizationDone to continue processing. 905 // OnHistogramSynchronizationDone to continue processing.
903 906
904 // Create a callback_task for OnHistogramSynchronizationDone. 907 // Create a callback_task for OnHistogramSynchronizationDone.
905 Task* callback_task = log_sender_factory_.NewRunnableMethod( 908 base::Closure callback = base::Bind(
906 &MetricsService::OnHistogramSynchronizationDone); 909 &MetricsService::OnHistogramSynchronizationDone,
910 log_sender_factory_.GetWeakPtr());
907 911
908 base::StatisticsRecorder::CollectHistogramStats("Browser"); 912 base::StatisticsRecorder::CollectHistogramStats("Browser");
909 913
910 // Set up the callback to task to call after we receive histograms from all 914 // Set up the callback to task to call after we receive histograms from all
911 // renderer processes. Wait time specifies how long to wait before absolutely 915 // renderer processes. Wait time specifies how long to wait before absolutely
912 // calling us back on the task. 916 // calling us back on the task.
913 HistogramSynchronizer::FetchRendererHistogramsAsynchronously( 917 HistogramSynchronizer::FetchRendererHistogramsAsynchronously(
914 MessageLoop::current(), callback_task, 918 MessageLoop::current(), callback,
915 kMaxHistogramGatheringWaitDuration); 919 kMaxHistogramGatheringWaitDuration);
916 } 920 }
917 921
918 void MetricsService::OnHistogramSynchronizationDone() { 922 void MetricsService::OnHistogramSynchronizationDone() {
919 DCHECK(IsSingleThreaded()); 923 DCHECK(IsSingleThreaded());
920 924
921 // If somehow there is a fetch in progress, we return and hope things work 925 // If somehow there is a fetch in progress, we return and hope things work
922 // out. The scheduler isn't informed since if this happens, the scheduler 926 // out. The scheduler isn't informed since if this happens, the scheduler
923 // will get a response from the upload. 927 // will get a response from the upload.
924 DCHECK(!current_fetch_.get()); 928 DCHECK(!current_fetch_.get());
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 if (local_state) { 1552 if (local_state) {
1549 const PrefService::Preference* uma_pref = 1553 const PrefService::Preference* uma_pref =
1550 local_state->FindPreference(prefs::kMetricsReportingEnabled); 1554 local_state->FindPreference(prefs::kMetricsReportingEnabled);
1551 if (uma_pref) { 1555 if (uma_pref) {
1552 bool success = uma_pref->GetValue()->GetAsBoolean(&result); 1556 bool success = uma_pref->GetValue()->GetAsBoolean(&result);
1553 DCHECK(success); 1557 DCHECK(success);
1554 } 1558 }
1555 } 1559 }
1556 return result; 1560 return result;
1557 } 1561 }
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698