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

Unified Diff: chrome/browser/metrics/histogram_synchronizer.cc

Issue 4193008: Cleanup histogram syncronizer a bit... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/metrics/histogram_synchronizer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/histogram_synchronizer.cc
===================================================================
--- chrome/browser/metrics/histogram_synchronizer.cc (revision 64486)
+++ chrome/browser/metrics/histogram_synchronizer.cc (working copy)
@@ -22,11 +22,11 @@
callback_task_(NULL),
callback_thread_(NULL),
io_message_loop_(NULL),
- next_available_sequence_number_(0),
- async_sequence_number_(0),
+ next_available_sequence_number_(-2),
+ async_sequence_number_(-2),
async_renderers_pending_(0),
async_callback_start_time_(TimeTicks::Now()),
- synchronous_sequence_number_(0),
+ synchronous_sequence_number_(-2),
synchronous_renderers_pending_(0) {
DCHECK(histogram_synchronizer_ == NULL);
histogram_synchronizer_ = this;
@@ -57,14 +57,15 @@
it.GetCurrentValue()->Send(
new ViewMsg_GetRendererHistograms(sequence_number));
}
+ // Send notification that we're done sending messages to renderers.
+ DecrementPendingRenderers(sequence_number);
TimeTicks start = TimeTicks::Now();
TimeTicks end_time = start + wait_time;
int unresponsive_renderer_count;
{
AutoLock auto_lock(lock_);
- while (synchronous_renderers_pending_ > 0 &&
- TimeTicks::Now() < end_time) {
+ while (synchronous_renderers_pending_ > 0 && TimeTicks::Now() < end_time) {
wait_time = end_time - TimeTicks::Now();
received_all_renderer_histograms_.TimedWait(wait_time);
}
@@ -115,6 +116,8 @@
it.GetCurrentValue()->Send(
new ViewMsg_GetRendererHistograms(sequence_number));
}
+ // Send notification that we're done sending messages to renderers.
+ current_synchronizer->DecrementPendingRenderers(sequence_number);
// Post a task that would be called after waiting for wait_time.
BrowserThread::PostDelayedTask(
@@ -144,13 +147,12 @@
}
// Record that we have received a histogram from renderer process.
- current_synchronizer->RecordRendererHistogram(sequence_number);
+ current_synchronizer->DecrementPendingRenderers(sequence_number);
}
-bool HistogramSynchronizer::RecordRendererHistogram(int sequence_number) {
- DCHECK(IsOnIoThread());
-
+bool HistogramSynchronizer::DecrementPendingRenderers(int sequence_number) {
if (sequence_number == async_sequence_number_) {
+ DCHECK(IsOnIoThread());
if ((async_renderers_pending_ == 0) ||
(--async_renderers_pending_ > 0))
return false;
@@ -248,22 +250,26 @@
DCHECK_NE(next_available_sequence_number_,
chrome::kHistogramSynchronizerReservedSequenceNumber);
if (requester == ASYNC_HISTOGRAMS) {
+ DCHECK(IsOnIoThread());
async_sequence_number_ = next_available_sequence_number_;
- async_renderers_pending_ = 0;
+ async_renderers_pending_ = 1;
} else if (requester == SYNCHRONOUS_HISTOGRAMS) {
synchronous_sequence_number_ = next_available_sequence_number_;
- synchronous_renderers_pending_ = 0;
+ synchronous_renderers_pending_ = 1;
}
return next_available_sequence_number_;
}
void HistogramSynchronizer::IncrementPendingRenderers(
RendererHistogramRequester requester) {
- AutoLock auto_lock(lock_);
if (requester == ASYNC_HISTOGRAMS) {
- async_renderers_pending_++;
+ DCHECK(IsOnIoThread());
+ DCHECK_GT(async_renderers_pending_, 0);
+ ++async_renderers_pending_;
} else {
- synchronous_renderers_pending_++;
+ AutoLock auto_lock(lock_);
+ DCHECK_GT(synchronous_renderers_pending_, 0);
+ ++synchronous_renderers_pending_;
}
}
« no previous file with comments | « chrome/browser/metrics/histogram_synchronizer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698