| // Copyright 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/metrics/histogram_delta_serialization.h" | 
 |  | 
 | #include <vector> | 
 |  | 
 | #include "base/metrics/histogram.h" | 
 | #include "base/metrics/histogram_base.h" | 
 | #include "base/metrics/statistics_recorder.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | TEST(HistogramDeltaSerializationTest, DeserializeHistogramAndAddSamples) { | 
 |   StatisticsRecorder statistic_recorder; | 
 |   HistogramDeltaSerialization serializer("HistogramDeltaSerializationTest"); | 
 |   std::vector<std::string> deltas; | 
 |   // Nothing was changed yet. | 
 |   serializer.PrepareAndSerializeDeltas(&deltas); | 
 |   EXPECT_TRUE(deltas.empty()); | 
 |  | 
 |   HistogramBase* histogram = Histogram::FactoryGet( | 
 |       "TestHistogram", 1, 1000, 10, HistogramBase::kIPCSerializationSourceFlag); | 
 |   histogram->Add(1); | 
 |   histogram->Add(10); | 
 |   histogram->Add(100); | 
 |   histogram->Add(1000); | 
 |  | 
 |   serializer.PrepareAndSerializeDeltas(&deltas); | 
 |   EXPECT_FALSE(deltas.empty()); | 
 |  | 
 |   HistogramDeltaSerialization::DeserializeAndAddSamples(deltas); | 
 |  | 
 |   // The histogram has kIPCSerializationSourceFlag. So samples will be ignored. | 
 |   scoped_ptr<HistogramSamples> snapshot(histogram->SnapshotSamples()); | 
 |   EXPECT_EQ(1, snapshot->GetCount(1)); | 
 |   EXPECT_EQ(1, snapshot->GetCount(10)); | 
 |   EXPECT_EQ(1, snapshot->GetCount(100)); | 
 |   EXPECT_EQ(1, snapshot->GetCount(1000)); | 
 |  | 
 |   // Clear kIPCSerializationSourceFlag to emulate multi-process usage. | 
 |   histogram->ClearFlags(HistogramBase::kIPCSerializationSourceFlag); | 
 |   HistogramDeltaSerialization::DeserializeAndAddSamples(deltas); | 
 |  | 
 |   scoped_ptr<HistogramSamples> snapshot2(histogram->SnapshotSamples()); | 
 |   EXPECT_EQ(2, snapshot2->GetCount(1)); | 
 |   EXPECT_EQ(2, snapshot2->GetCount(10)); | 
 |   EXPECT_EQ(2, snapshot2->GetCount(100)); | 
 |   EXPECT_EQ(2, snapshot2->GetCount(1000)); | 
 | } | 
 |  | 
 | }  // namespace base |