diff options
author | Yabin Cui <yabinc@google.com> | 2016-07-07 00:04:18 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2016-07-07 00:04:18 +0000 |
commit | fb1f20eafef81bbd7e225137115b1f5438036a19 (patch) | |
tree | c5f9781287c7e1d6dce57048603fe9b68add3364 | |
parent | 5f99cdc04bdbdb1fe6c472fefcbba2961c19071b (diff) | |
parent | 86d934083f5ad968bc2a6dfaa2cfc53d7bafcbc4 (diff) | |
download | extras-fb1f20eafef81bbd7e225137115b1f5438036a19.tar.gz |
Merge "simpleperf: fix RecordCache."
-rw-r--r-- | simpleperf/record.cpp | 11 | ||||
-rw-r--r-- | simpleperf/record.h | 4 | ||||
-rw-r--r-- | simpleperf/record_test.cpp | 20 |
3 files changed, 24 insertions, 11 deletions
diff --git a/simpleperf/record.cpp b/simpleperf/record.cpp index e9986e50..882dfc35 100644 --- a/simpleperf/record.cpp +++ b/simpleperf/record.cpp @@ -926,12 +926,12 @@ void RecordCache::Push(std::unique_ptr<Record> record) { if (has_timestamp_) { last_time_ = std::max(last_time_, record->Timestamp()); } - queue_.push(CreateRecordWithSeq(record.release())); + queue_.push(RecordWithSeq(cur_seq_++, record.release())); } void RecordCache::Push(std::vector<std::unique_ptr<Record>> records) { for (auto& r : records) { - queue_.push(CreateRecordWithSeq(r.release())); + Push(std::move(r)); } } @@ -957,10 +957,3 @@ std::vector<std::unique_ptr<Record>> RecordCache::PopAll() { } return result; } - -RecordCache::RecordWithSeq RecordCache::CreateRecordWithSeq(Record* r) { - RecordWithSeq result; - result.seq = cur_seq_++; - result.record = r; - return result; -} diff --git a/simpleperf/record.h b/simpleperf/record.h index 3b7a7175..c1d7593d 100644 --- a/simpleperf/record.h +++ b/simpleperf/record.h @@ -511,6 +511,8 @@ class RecordCache { uint32_t seq; Record* record; + RecordWithSeq(uint32_t seq, Record* record) : seq(seq), record(record) { + } bool IsHappensBefore(const RecordWithSeq& other) const; }; @@ -518,8 +520,6 @@ class RecordCache { bool operator()(const RecordWithSeq& r1, const RecordWithSeq& r2); }; - RecordWithSeq CreateRecordWithSeq(Record* r); - bool has_timestamp_; size_t min_cache_size_; uint64_t min_time_diff_in_ns_; diff --git a/simpleperf/record_test.cpp b/simpleperf/record_test.cpp index ecfc4d0b..8c984e9d 100644 --- a/simpleperf/record_test.cpp +++ b/simpleperf/record_test.cpp @@ -113,3 +113,23 @@ TEST_F(RecordTest, RecordCache_FIFO) { CheckRecordEqual(records[i], *out_records[i]); } } + +TEST_F(RecordTest, RecordCache_PushRecordVector) { + event_attr.sample_id_all = 1; + event_attr.sample_type |= PERF_SAMPLE_TIME; + RecordCache cache(true, 2, 2); + MmapRecord r1 = MmapRecord::Create(event_attr, true, 1, 1, 0x100, 0x200, 0x300, "mmap_record1", 0); + MmapRecord r2 = r1; + r1.sample_id.time_data.time = 1; + r2.sample_id.time_data.time = 3; + std::vector<std::unique_ptr<Record>> records; + records.push_back(std::unique_ptr<Record>(new MmapRecord(r1))); + records.push_back(std::unique_ptr<Record>(new MmapRecord(r2))); + cache.Push(std::move(records)); + std::unique_ptr<Record> popped_r = cache.Pop(); + ASSERT_TRUE(popped_r != nullptr); + CheckRecordEqual(r1, *popped_r); + std::vector<std::unique_ptr<Record>> last_records = cache.PopAll(); + ASSERT_EQ(1u, last_records.size()); + CheckRecordEqual(r2, *last_records[0]); +} |