On Mon, Feb 11, 2019 at 11:23:40PM +0300, Alexey Budankov wrote:

SNIP

> +     compress_fn = (record__comp_enabled(rec) ?
> +             perf_session__zstd_compress : perf_session__zstd_copy);
> +
>       if (record__aio_enabled(rec))
>               off = record__aio_get_pos(trace_fd);
>  
> @@ -799,11 +805,21 @@ static int record__mmap_read_evlist(struct record *rec, 
> struct perf_evlist *evli
>                               map->flush = MMAP_FLUSH_DEFAULT;
>                       }
>                       if (!record__aio_enabled(rec)) {
> -                             if (perf_mmap__push(map, rec, record__pushfn) 
> != 0) {
> -                                     if (sync)
> -                                             map->flush = flush;
> -                                     rc = -1;
> -                                     goto out;
> +                             if (!record__comp_enabled(rec)) {
> +                                     if (perf_mmap__push(map, rec, 
> record__pushfn) != 0) {
> +                                             if (sync)
> +                                                     map->flush = flush;
> +                                             rc = -1;
> +                                             goto out;
> +                                     }
> +                             } else {
> +                                     if (perf_mmap__pack(map, rec, 
> record__pushfn,
> +                                                     compress_fn, session) 
> != 0) {
> +                                             if (sync)
> +                                                     map->flush = flush;
> +                                             rc = -1;
> +                                             goto out;
> +                                     }

I really dont like this.. the non-compression flow needs to stay untouched

why don't you overload the record__pushfn function for compression
processing and stash the data in there?

thanks,
jirka

Reply via email to