Home | History | Annotate | Download | only in simpleperf

Lines Matching full:record

17 #include "record.h"
102 LOG(DEBUG) << "Record SampleId part has " << end - p << " bytes left\n";
168 Record::Record() {
172 Record::Record(const perf_event_header* pheader) {
176 void Record::Dump(size_t indent) const {
177 PrintIndented(indent, "record %s: type %u, misc %u, size %u\n",
183 uint64_t Record::Timestamp() const {
188 : Record(pheader) {
220 : Record(pheader) {
256 : Record(pheader) {
282 : Record(pheader) {
305 : Record(pheader) {
382 LOG(DEBUG) << "Record has " << end - p << " bytes left\n";
444 // If record command does stack unwinding, sample records' size may be decreased.
452 LOG(DEBUG) << "Record (type " << RecordTypeToString(header.type) << ") size is changed from "
534 BuildIdRecord::BuildIdRecord(const perf_event_header* pheader) : Record(pheader) {
563 UnknownRecord::UnknownRecord(const perf_event_header* pheader) : Record(pheader) {
580 static std::unique_ptr<Record> ReadRecordFromBuffer(const perf_event_attr& attr,
584 return std::unique_ptr<Record>(new MmapRecord(attr, pheader));
586 return std::unique_ptr<Record>(new Mmap2Record(attr, pheader));
588 return std::unique_ptr<Record>(new CommRecord(attr, pheader));
590 return std::unique_ptr<Record>(new ExitRecord(attr, pheader));
592 return std::unique_ptr<Record>(new ForkRecord(attr, pheader));
594 return std::unique_ptr<Record>(new SampleRecord(attr, pheader));
596 return std::unique_ptr<Record>(new UnknownRecord(pheader));
600 std::vector<std::unique_ptr<Record>> ReadRecordsFromBuffer(const perf_event_attr& attr,
602 std::vector<std::unique_ptr<Record>> result;
615 std::unique_ptr<Record> ReadRecordFromFile(const perf_event_attr& attr, FILE* fp) {
619 PLOG(ERROR) << "Failed to read record file";
625 PLOG(ERROR) << "Failed to read record file";
634 MmapRecord record;
635 record.header.type = PERF_RECORD_MMAP;
636 record.header.misc = (in_kernel ? PERF_RECORD_MISC_KERNEL : PERF_RECORD_MISC_USER);
637 record.data.pid = pid;
638 record.data.tid = tid;
639 record.data.addr = addr;
640 record.data.len = len;
641 record.data.pgoff = pgoff;
642 record.filename = filename;
643 size_t sample_id_size = record.sample_id.CreateContent(attr);
644 record.header.size = sizeof(record.header) + sizeof(record.data) +
645 ALIGN(record.filename.size() + 1, 8) + sample_id_size;
646 return record;
651 CommRecord record;
652 record.header.type = PERF_RECORD_COMM;
653 record.header.misc = 0;
654 record.data.pid = pid;
655 record.data.tid = tid;
656 record.comm = comm;
657 size_t sample_id_size = record.sample_id.CreateContent(attr);
658 record.header.size = sizeof(record.header) + sizeof(record.data) +
659 ALIGN(record.comm.size() + 1, 8) + sample_id_size;
660 return record;
665 ForkRecord record;
666 record.header.type = PERF_RECORD_FORK;
667 record.header.misc = 0;
668 record.data.pid = pid;
669 record.data.ppid = ppid;
670 record.data.tid = tid;
671 record.data.ptid = ptid;
672 record.data.time = 0;
673 size_t sample_id_size = record.sample_id.CreateContent(attr);
674 record.header.size = sizeof(record.header) + sizeof(record.data) + sample_id_size;
675 return record;
680 BuildIdRecord record;
681 record.header.type = PERF_RECORD_BUILD_ID;
682 record.header.misc = (in_kernel ? PERF_RECORD_MISC_KERNEL : PERF_RECORD_MISC_USER);
683 record.pid = pid;
684 record.build_id = build_id;
685 record.filename = filename;
686 record.header.size = sizeof(record.header) + sizeof(record.pid) +
687 ALIGN(record.build_id.Size(), 8) + ALIGN(filename.size() + 1, 64);
688 return record;
692 bool is_sample = (record->header.type == PERF_RECORD_SAMPLE);
693 bool is_other_sample = (other.record->header.type == PERF_RECORD_SAMPLE);
694 uint64_t time = record->Timestamp();
695 uint64_t other_time = other.record->Timestamp();
696 // The record with smaller time happens first.
730 std::vector<std::unique_ptr<Record>> records = ReadRecordsFromBuffer(attr_, data, size);
741 void RecordCache::Push(std::unique_ptr<Record> record) {
742 queue_.push(CreateRecordWithSeq(record.release()));
745 std::unique_ptr<Record> RecordCache::Pop() {
749 Record* r = queue_.top().record;
756 return std::unique_ptr<Record>(r);
759 std::vector<std::unique_ptr<Record>> RecordCache::PopAll() {
760 std::vector<std::unique_ptr<Record>> result;
762 result.emplace_back(queue_.top().record);
768 RecordCache::RecordWithSeq RecordCache::CreateRecordWithSeq(Record *r) {
771 result.record = r;