On 07.03.2019 14:59, Jiri Olsa wrote: > On Thu, Mar 07, 2019 at 11:26:16AM +0300, Alexey Budankov wrote: >> >> On 05.03.2019 15:26, Jiri Olsa wrote: >>> On Fri, Mar 01, 2019 at 06:58:32PM +0300, Alexey Budankov wrote: >>> >>> SNIP >>> >>>> +static size_t record__process_comp_header(void *record, size_t increment) >>>> +{ >>>> + struct compressed_event *event = record; >>>> + size_t size = sizeof(struct compressed_event); >>>> + >>>> + if (increment) { >>>> + event->header.size += increment; >>>> + return increment; >>>> + } else { >>>> + event->header.type = PERF_RECORD_COMPRESSED; >>>> + event->header.size = size; >>>> + return size; >>>> + } >>> >>> so zstd_compress_stream_to_records calls this in the loop: >>> >>> while (input.pos < input.size) { >>> ... >>> size = process_header(record, 0); >>> ... >>> size = process_header(record, size); >>> } >>> >>> the header.size will get overwritten with every new iteration, no? >> >> Every new record is headed by PERF_RECORD_COMPRESSED header an updated with >> resulted compressed frame size after compression. >> >> process_header(, 0) puts header, then >> compression puts compressed frame, then >> process_header(, N) updates header.size value (+=). > > and then process_header(, 0) is called again no?
Yes, in the next iteration these three steps repeat for the next record. ~Alexey > > jirka >