diff options
Diffstat (limited to 'simpleperf/RecordReadThread.cpp')
-rw-r--r-- | simpleperf/RecordReadThread.cpp | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/simpleperf/RecordReadThread.cpp b/simpleperf/RecordReadThread.cpp index 16af9292..dfcc1a9e 100644 --- a/simpleperf/RecordReadThread.cpp +++ b/simpleperf/RecordReadThread.cpp @@ -33,16 +33,17 @@ static constexpr size_t kDefaultLowBufferLevel = 10 * 1024 * 1024u; static constexpr size_t kDefaultCriticalBufferLevel = 5 * 1024 * 1024u; RecordBuffer::RecordBuffer(size_t buffer_size) - : read_head_(0), write_head_(0), buffer_size_(buffer_size), buffer_(new char[buffer_size]) {} + : read_head_(0), write_head_(0), buffer_size_(buffer_size), buffer_(new char[buffer_size]) { +} size_t RecordBuffer::GetFreeSize() const { - size_t write_head = write_head_.load(std::memory_order_relaxed); - size_t read_head = read_head_.load(std::memory_order_relaxed); - size_t write_tail = read_head > 0 ? read_head - 1 : buffer_size_ - 1; - if (write_head <= write_tail) { - return write_tail - write_head; - } - return buffer_size_ - write_head + write_tail; + size_t write_head = write_head_.load(std::memory_order_relaxed); + size_t read_head = read_head_.load(std::memory_order_relaxed); + size_t write_tail = read_head > 0 ? read_head - 1 : buffer_size_ - 1; + if (write_head <= write_tail) { + return write_tail - write_head; + } + return buffer_size_ - write_head + write_tail; } char* RecordBuffer::AllocWriteSpace(size_t record_size) { @@ -120,13 +121,13 @@ RecordParser::RecordParser(const perf_event_attr& attr) pos += sizeof(uint64_t); } mask = PERF_SAMPLE_ADDR | PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID | PERF_SAMPLE_CPU | - PERF_SAMPLE_PERIOD; + PERF_SAMPLE_PERIOD; pos += __builtin_popcountll(sample_type_ & mask) * sizeof(uint64_t); callchain_pos_in_sample_records_ = pos; if ((sample_type_ & PERF_SAMPLE_TIME) && attr.sample_id_all) { mask = PERF_SAMPLE_IDENTIFIER | PERF_SAMPLE_CPU | PERF_SAMPLE_STREAM_ID | PERF_SAMPLE_ID; - time_rpos_in_non_sample_records_ = - (__builtin_popcountll(sample_type_ & mask) + 1) * sizeof(uint64_t); + time_rpos_in_non_sample_records_ = (__builtin_popcountll(sample_type_ & mask) + 1) * + sizeof(uint64_t); } } @@ -142,7 +143,7 @@ size_t RecordParser::GetTimePos(const perf_event_header& header) const { } size_t RecordParser::GetStackSizePos( - const std::function<void(size_t, size_t, void*)>& read_record_fn) const { + const std::function<void(size_t,size_t,void*)>& read_record_fn) const{ size_t pos = callchain_pos_in_sample_records_; if (sample_type_ & PERF_SAMPLE_CALLCHAIN) { uint64_t ip_nr; @@ -271,13 +272,10 @@ bool RecordReadThread::SyncKernelBuffer() { } bool RecordReadThread::StopReadThread() { - bool result = true; - if (read_thread_ != nullptr) { - result = SendCmdToReadThread(CMD_STOP_THREAD, nullptr); - if (result) { - read_thread_->join(); - read_thread_ = nullptr; - } + bool result = SendCmdToReadThread(CMD_STOP_THREAD, nullptr); + if (result) { + read_thread_->join(); + read_thread_ = nullptr; } return result; } @@ -288,8 +286,8 @@ bool RecordReadThread::SendCmdToReadThread(Cmd cmd, void* cmd_arg) { cmd_ = cmd; cmd_arg_ = cmd_arg; } - char unused = 0; - if (TEMP_FAILURE_RETRY(write(write_cmd_fd_, &unused, 1)) != 1) { + char dummy = 0; + if (TEMP_FAILURE_RETRY(write(write_cmd_fd_, &dummy, 1)) != 1) { return false; } std::unique_lock<std::mutex> lock(cmd_mutex_); @@ -312,8 +310,8 @@ std::unique_ptr<Record> RecordReadThread::GetRecord() { return r; } if (has_data_notification_) { - char unused; - TEMP_FAILURE_RETRY(read(read_data_fd_, &unused, 1)); + char dummy; + TEMP_FAILURE_RETRY(read(read_data_fd_, &dummy, 1)); has_data_notification_ = false; } return nullptr; @@ -344,8 +342,8 @@ RecordReadThread::Cmd RecordReadThread::GetCmd() { } bool RecordReadThread::HandleCmd(IOEventLoop& loop) { - char unused; - TEMP_FAILURE_RETRY(read(read_cmd_fd_, &unused, 1)); + char dummy; + TEMP_FAILURE_RETRY(read(read_cmd_fd_, &dummy, 1)); bool result = true; switch (GetCmd()) { case CMD_ADD_EVENT_FDS: @@ -425,9 +423,10 @@ bool RecordReadThread::HandleAddEventFds(IOEventLoop& loop, bool RecordReadThread::HandleRemoveEventFds(const std::vector<EventFd*>& event_fds) { for (auto& event_fd : event_fds) { if (event_fd->HasMappedBuffer()) { - auto it = std::find_if( - kernel_record_readers_.begin(), kernel_record_readers_.end(), - [&](const KernelRecordReader& reader) { return reader.GetEventFd() == event_fd; }); + auto it = std::find_if(kernel_record_readers_.begin(), kernel_record_readers_.end(), + [&](const KernelRecordReader& reader) { + return reader.GetEventFd() == event_fd; + }); if (it != kernel_record_readers_.end()) { kernel_record_readers_.erase(it); event_fd->StopPolling(); @@ -519,10 +518,10 @@ void RecordReadThread::PushRecordToRecordBuffer(KernelRecordReader* kernel_recor // the call chain joiner can complete the callchains. stack_size_limit = 1024; } - size_t stack_size_pos = - record_parser_.GetStackSizePos([&](size_t pos, size_t size, void* dest) { + size_t stack_size_pos = record_parser_.GetStackSizePos( + [&](size_t pos, size_t size, void* dest) { return kernel_record_reader->ReadRecord(pos, size, dest); - }); + }); uint64_t stack_size; kernel_record_reader->ReadRecord(stack_size_pos, sizeof(stack_size), &stack_size); if (stack_size > 0) { @@ -619,8 +618,8 @@ void RecordReadThread::ReadAuxDataFromKernelBuffer(bool* has_data) { bool RecordReadThread::SendDataNotificationToMainThread() { if (!has_data_notification_.load(std::memory_order_relaxed)) { has_data_notification_ = true; - char unused = 0; - if (TEMP_FAILURE_RETRY(write(write_data_fd_, &unused, 1)) != 1) { + char dummy = 0; + if (TEMP_FAILURE_RETRY(write(write_data_fd_, &dummy, 1)) != 1) { PLOG(ERROR) << "write"; return false; } |