// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_ #define CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_ #include <stdint.h> #include <map> #include <string> #include <vector> #include "compat/string.h" #include "compat/test.h" #include "file_utils.h" #include "perf_parser.h" namespace quipper { extern const char* kSupportedMetadata[]; // Container for all the metadata from one perf report. The key is the metadata // type, as shown in |kSupportedMetadata|. The value is a vector of all the // occurrences of that type. For some types, there is only one occurrence. typedef std::map<string, std::vector<string> > MetadataSet; // Path to the perf executable. string GetPerfPath(); // Converts a perf data filename to the full path. string GetTestInputFilePath(const string& filename); // Returns the size of a file in bytes. int64_t GetFileSize(const string& filename); // Returns true if the contents of the two files are the same, false otherwise. bool CompareFileContents(const string& filename1, const string& filename2); template <typename T> void CompareTextProtoFiles(const string& filename1, const string& filename2) { std::vector<char> file1_contents; std::vector<char> file2_contents; ASSERT_TRUE(FileToBuffer(filename1, &file1_contents)); ASSERT_TRUE(FileToBuffer(filename2, &file2_contents)); ArrayInputStream arr1(file1_contents.data(), file1_contents.size()); ArrayInputStream arr2(file2_contents.data(), file2_contents.size()); T proto1, proto2; ASSERT_TRUE(TextFormat::Parse(&arr1, &proto1)); ASSERT_TRUE(TextFormat::Parse(&arr2, &proto2)); EXPECT_TRUE(EqualsProto(proto1, proto2)); } // Given a perf data file, get the list of build ids and create a map from // filenames to build ids. bool GetPerfBuildIDMap(const string& filename, std::map<string, string>* output); bool CheckPerfDataAgainstBaseline(const string& filename); // Returns true if the perf buildid-lists are the same. bool ComparePerfBuildIDLists(const string& file1, const string& file2); // Returns options suitable for correctness tests. PerfParserOptions GetTestOptions(); template <typename T> bool EqualsProto(T actual, T expected) { MessageDifferencer differencer; differencer.set_message_field_comparison(MessageDifferencer::EQUAL); return differencer.Compare(expected, actual); } template <typename T> bool PartiallyEqualsProto(T actual, T expected) { MessageDifferencer differencer; differencer.set_message_field_comparison(MessageDifferencer::EQUAL); differencer.set_scope(MessageDifferencer::PARTIAL); return differencer.Compare(expected, actual); } } // namespace quipper #endif // CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_