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

Side by Side Diff: chrome/common/metrics_helpers.cc

Issue 6577013: Crash when we notice a corruption of the histogram range-vector... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/common/metrics_helpers.h" 5 #include "chrome/common/metrics_helpers.h"
6 6
7 #if defined(USE_SYSTEM_LIBBZ2) 7 #if defined(USE_SYSTEM_LIBBZ2)
8 #include <bzlib.h> 8 #include <bzlib.h>
9 #else 9 #else
10 #include "third_party/bzip2/bzlib.h" 10 #include "third_party/bzip2/bzlib.h"
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 } 524 }
525 } 525 }
526 526
527 void HistogramSender::TransmitHistogram(const Histogram& histogram) { 527 void HistogramSender::TransmitHistogram(const Histogram& histogram) {
528 // Get up-to-date snapshot of sample stats. 528 // Get up-to-date snapshot of sample stats.
529 Histogram::SampleSet snapshot; 529 Histogram::SampleSet snapshot;
530 histogram.SnapshotSample(&snapshot); 530 histogram.SnapshotSample(&snapshot);
531 const std::string& histogram_name = histogram.histogram_name(); 531 const std::string& histogram_name = histogram.histogram_name();
532 532
533 int corruption = histogram.FindCorruption(snapshot); 533 int corruption = histogram.FindCorruption(snapshot);
534
535 // Crash if we detect that our histograms have been overwritten. This may be
536 // a fair distance from the memory smasher, but we hope to correlate these
537 // crashes with other events, such as plugins, or usage patterns, etc.
538 if (Histogram::BUCKET_ORDER_ERROR & corruption) {
539 // The checksum should have caught this, so crash separately if it didn't.
540 CHECK_NE(0, Histogram::RANGE_CHECKSUM_ERROR & corruption);
541 CHECK(false); // Crash for the bucket order corruption.
542 }
543 // Checksum corruption might not have caused order corruption.
544 CHECK_EQ(0, Histogram::RANGE_CHECKSUM_ERROR & corruption);
545
534 if (corruption) { 546 if (corruption) {
535 NOTREACHED(); 547 NOTREACHED();
536 InconsistencyDetected(corruption); 548 InconsistencyDetected(corruption);
537 // Don't send corrupt data to metrics survices. 549 // Don't send corrupt data to metrics survices.
538 if (NULL == inconsistencies_.get()) 550 if (NULL == inconsistencies_.get())
539 inconsistencies_.reset(new ProblemMap); 551 inconsistencies_.reset(new ProblemMap);
540 int old_corruption = (*inconsistencies_)[histogram_name]; 552 int old_corruption = (*inconsistencies_)[histogram_name];
541 if (old_corruption == (corruption | old_corruption)) 553 if (old_corruption == (corruption | old_corruption))
542 return; // We've already seen this corruption for this histogram. 554 return; // We've already seen this corruption for this histogram.
543 (*inconsistencies_)[histogram_name] |= corruption; 555 (*inconsistencies_)[histogram_name] |= corruption;
(...skipping 28 matching lines...) Expand all
572 snapshot.Subtract(*already_logged); 584 snapshot.Subtract(*already_logged);
573 } 585 }
574 586
575 // Snapshot now contains only a delta to what we've already_logged. 587 // Snapshot now contains only a delta to what we've already_logged.
576 if (snapshot.redundant_count() > 0) { 588 if (snapshot.redundant_count() > 0) {
577 TransmitHistogramDelta(histogram, snapshot); 589 TransmitHistogramDelta(histogram, snapshot);
578 // Add new data into our running total. 590 // Add new data into our running total.
579 already_logged->Add(snapshot); 591 already_logged->Add(snapshot);
580 } 592 }
581 } 593 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698