11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/metrics/histogram_delta_serialization.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <vector> 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/metrics/histogram.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/metrics/histogram_base.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/metrics/statistics_recorder.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace base { 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(HistogramDeltaSerializationTest, DeserializeHistogramAndAddSamples) { 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) StatisticsRecorder statistic_recorder; 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) HistogramDeltaSerialization serializer("HistogramDeltaSerializationTest"); 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::vector<std::string> deltas; 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Nothing was changed yet. 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) serializer.PrepareAndSerializeDeltas(&deltas); 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(deltas.empty()); 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) HistogramBase* histogram = Histogram::FactoryGet( 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "TestHistogram", 1, 1000, 10, HistogramBase::kIPCSerializationSourceFlag); 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) histogram->Add(1); 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) histogram->Add(10); 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) histogram->Add(100); 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) histogram->Add(1000); 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) serializer.PrepareAndSerializeDeltas(&deltas); 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(deltas.empty()); 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) HistogramDeltaSerialization::DeserializeAndAddSamples(deltas); 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The histogram has kIPCSerializationSourceFlag. So samples will be ignored. 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<HistogramSamples> snapshot(histogram->SnapshotSamples()); 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, snapshot->GetCount(1)); 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, snapshot->GetCount(10)); 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, snapshot->GetCount(100)); 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, snapshot->GetCount(1000)); 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Clear kIPCSerializationSourceFlag to emulate multi-process usage. 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) histogram->ClearFlags(HistogramBase::kIPCSerializationSourceFlag); 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) HistogramDeltaSerialization::DeserializeAndAddSamples(deltas); 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<HistogramSamples> snapshot2(histogram->SnapshotSamples()); 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, snapshot2->GetCount(1)); 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, snapshot2->GetCount(10)); 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, snapshot2->GetCount(100)); 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, snapshot2->GetCount(1000)); 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace base 55