17d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui/* 27d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * Copyright (C) 2015 The Android Open Source Project 37d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * 47d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * Licensed under the Apache License, Version 2.0 (the "License"); 57d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * you may not use this file except in compliance with the License. 67d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * You may obtain a copy of the License at 77d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * 87d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * http://www.apache.org/licenses/LICENSE-2.0 97d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * 107d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * Unless required by applicable law or agreed to in writing, software 117d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * distributed under the License is distributed on an "AS IS" BASIS, 127d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * See the License for the specific language governing permissions and 147d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui * limitations under the License. 157d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui */ 167d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui 177d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cuistatic void CheckMmapRecordDataEqual(const MmapRecord& r1, const MmapRecord& r2) { 187d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(0, memcmp(&r1.data, &r2.data, sizeof(r1.data))); 197d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(r1.filename, r2.filename); 207d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui} 217d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui 227d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cuistatic void CheckCommRecordDataEqual(const CommRecord& r1, const CommRecord& r2) { 237d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(0, memcmp(&r1.data, &r2.data, sizeof(r1.data))); 247d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(r1.comm, r2.comm); 257d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui} 267d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui 278f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cuistatic void CheckBuildIdRecordDataEqual(const BuildIdRecord& r1, const BuildIdRecord& r2) { 288f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui ASSERT_EQ(r1.pid, r2.pid); 298f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui ASSERT_EQ(r1.build_id, r2.build_id); 308f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui ASSERT_EQ(r1.filename, r2.filename); 318f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui} 328f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui 337d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cuistatic void CheckRecordEqual(const Record& r1, const Record& r2) { 347d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(0, memcmp(&r1.header, &r2.header, sizeof(r1.header))); 357d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui ASSERT_EQ(0, memcmp(&r1.sample_id, &r2.sample_id, sizeof(r1.sample_id))); 367d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui if (r1.header.type == PERF_RECORD_MMAP) { 377d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui CheckMmapRecordDataEqual(static_cast<const MmapRecord&>(r1), static_cast<const MmapRecord&>(r2)); 387d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui } else if (r1.header.type == PERF_RECORD_COMM) { 397d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui CheckCommRecordDataEqual(static_cast<const CommRecord&>(r1), static_cast<const CommRecord&>(r2)); 408f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui } else if (r1.header.type == PERF_RECORD_BUILD_ID) { 418f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui CheckBuildIdRecordDataEqual(static_cast<const BuildIdRecord&>(r1), 428f6225147c5b6cb2159a7f5cb0dab952ee0759dfYabin Cui static_cast<const BuildIdRecord&>(r2)); 437d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui } 447d59bb49fb47fbc82ef5c77d7aebf7174fd996e1Yabin Cui} 45