OSDN Git Service

ANRdaemon: move trace result from /sdcard to /data am: d93aa41807
[android-x86/system-extras.git] / simpleperf / record_file_test.cpp
index e2467a4..4648a64 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <memory>
 
+#include <android-base/test_utils.h>
+
 #include "environment.h"
 #include "event_attr.h"
 #include "event_type.h"
@@ -32,10 +34,6 @@ using namespace PerfFileFormat;
 
 class RecordFileTest : public ::testing::Test {
  protected:
-  virtual void SetUp() {
-    filename_ = "temporary.record_file";
-  }
-
   void AddEventType(const std::string& event_type_str) {
     std::unique_ptr<EventTypeAndModifier> event_type_modifier = ParseEventType(event_type_str);
     ASSERT_TRUE(event_type_modifier != nullptr);
@@ -47,14 +45,14 @@ class RecordFileTest : public ::testing::Test {
     attr_ids_.push_back(attr_id);
   }
 
-  std::string filename_;
+  TemporaryFile tmpfile_;
   std::vector<std::unique_ptr<perf_event_attr>> attrs_;
   std::vector<AttrWithId> attr_ids_;
 };
 
 TEST_F(RecordFileTest, smoke) {
   // Write to a record file.
-  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(filename_);
+  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(writer != nullptr);
 
   // Write attr section.
@@ -66,12 +64,6 @@ TEST_F(RecordFileTest, smoke) {
                                             0x3000, "mmap_record_example");
   ASSERT_TRUE(writer->WriteData(mmap_record.BinaryFormat()));
 
-  // Check data section that has been written.
-  std::vector<std::unique_ptr<Record>> records;
-  ASSERT_TRUE(writer->ReadDataSection(&records));
-  ASSERT_EQ(1u, records.size());
-  CheckRecordEqual(mmap_record, *records[0]);
-
   // Write feature section.
   ASSERT_TRUE(writer->WriteFeatureHeader(1));
   char p[BuildId::Size()];
@@ -84,38 +76,31 @@ TEST_F(RecordFileTest, smoke) {
   ASSERT_TRUE(writer->Close());
 
   // Read from a record file.
-  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(filename_);
+  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(reader != nullptr);
-  const FileHeader* file_header = reader->FileHeader();
-  ASSERT_TRUE(file_header != nullptr);
-  std::vector<const FileAttr*> file_attrs = reader->AttrSection();
+  const std::vector<FileAttr>& file_attrs = reader->AttrSection();
   ASSERT_EQ(1u, file_attrs.size());
-  ASSERT_EQ(0, memcmp(&file_attrs[0]->attr, attr_ids_[0].attr, sizeof(perf_event_attr)));
-  std::vector<uint64_t> ids = reader->IdsForAttr(file_attrs[0]);
+  ASSERT_EQ(0, memcmp(&file_attrs[0].attr, attr_ids_[0].attr, sizeof(perf_event_attr)));
+  std::vector<uint64_t> ids;
+  ASSERT_TRUE(reader->ReadIdsForAttr(file_attrs[0], &ids));
   ASSERT_EQ(ids, attr_ids_[0].ids);
 
   // Read and check data section.
-  records = reader->DataSection();
+  std::vector<std::unique_ptr<Record>> records = reader->DataSection();
   ASSERT_EQ(1u, records.size());
   CheckRecordEqual(mmap_record, *records[0]);
 
   // Read and check feature section.
-  ASSERT_TRUE(file_header->features[FEAT_BUILD_ID / 8] & (1 << (FEAT_BUILD_ID % 8)));
-  std::map<int, SectionDesc> sections = reader->FeatureSectionDescriptors();
-  ASSERT_EQ(1u, sections.size());
-  ASSERT_TRUE(sections.find(FEAT_BUILD_ID) != sections.end());
-  const perf_event_header* header = reinterpret_cast<const perf_event_header*>(
-      reader->DataAtOffset(sections[FEAT_BUILD_ID].offset));
-  ASSERT_TRUE(header != nullptr);
-  ASSERT_EQ(sections[FEAT_BUILD_ID].size, header->size);
-  CheckRecordEqual(build_id_record, BuildIdRecord(header));
+  std::vector<BuildIdRecord> build_id_records = reader->ReadBuildIdFeature();
+  ASSERT_EQ(1u, build_id_records.size());
+  CheckRecordEqual(build_id_record, build_id_records[0]);
 
   ASSERT_TRUE(reader->Close());
 }
 
 TEST_F(RecordFileTest, records_sorted_by_time) {
   // Write to a record file.
-  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(filename_);
+  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(writer != nullptr);
 
   // Write attr section.
@@ -138,7 +123,7 @@ TEST_F(RecordFileTest, records_sorted_by_time) {
   ASSERT_TRUE(writer->Close());
 
   // Read from a record file.
-  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(filename_);
+  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(reader != nullptr);
   std::vector<std::unique_ptr<Record>> records = reader->DataSection();
   ASSERT_EQ(3u, records.size());
@@ -151,7 +136,7 @@ TEST_F(RecordFileTest, records_sorted_by_time) {
 
 TEST_F(RecordFileTest, record_more_than_one_attr) {
   // Write to a record file.
-  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(filename_);
+  std::unique_ptr<RecordFileWriter> writer = RecordFileWriter::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(writer != nullptr);
 
   // Write attr section.
@@ -163,13 +148,14 @@ TEST_F(RecordFileTest, record_more_than_one_attr) {
   ASSERT_TRUE(writer->Close());
 
   // Read from a record file.
-  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(filename_);
+  std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(tmpfile_.path);
   ASSERT_TRUE(reader != nullptr);
-  std::vector<const FileAttr*> file_attrs = reader->AttrSection();
+  const std::vector<FileAttr>& file_attrs = reader->AttrSection();
   ASSERT_EQ(3u, file_attrs.size());
   for (size_t i = 0; i < file_attrs.size(); ++i) {
-    ASSERT_EQ(0, memcmp(&file_attrs[i]->attr, attr_ids_[i].attr, sizeof(perf_event_attr)));
-    std::vector<uint64_t> ids = reader->IdsForAttr(file_attrs[i]);
+    ASSERT_EQ(0, memcmp(&file_attrs[i].attr, attr_ids_[i].attr, sizeof(perf_event_attr)));
+    std::vector<uint64_t> ids;
+    ASSERT_TRUE(reader->ReadIdsForAttr(file_attrs[i], &ids));
     ASSERT_EQ(ids, attr_ids_[i].ids);
   }
 }