> > To see how many images and data could not be compressed. > --- > server/dcc.c | 32 +++++++++++++++++++++++--------- > server/display-channel.c | 11 +++++++++++ > server/display-channel.h | 1 + > 3 files changed, 35 insertions(+), 9 deletions(-) > > diff --git a/server/dcc.c b/server/dcc.c > index c63f6c1..3e71c36 100644 > --- a/server/dcc.c > +++ b/server/dcc.c > @@ -1191,44 +1191,58 @@ int dcc_compress_image(DisplayChannelClient *dcc, > { > DisplayChannel *display_channel = DCC_TO_DC(dcc); > SpiceImageCompression image_compression; > + stat_start_time_t start_time; > + int success = FALSE; > + > + stat_start_time_init(&start_time, &display_channel->off_stat); > > image_compression = get_compression_for_bitmap(src, > dcc->image_compression, drawable); > switch (image_compression) { > case SPICE_IMAGE_COMPRESSION_OFF: > - return FALSE; > + break; > case SPICE_IMAGE_COMPRESSION_QUIC: > if (can_lossy && display_channel->enable_jpeg && > (src->format != SPICE_BITMAP_FMT_RGBA || > !bitmap_has_extra_stride(src))) { > - return dcc_compress_image_jpeg(dcc, dest, src, o_comp_data); > + success = dcc_compress_image_jpeg(dcc, dest, src, o_comp_data); > + break; > } > - return dcc_compress_image_quic(dcc, dest, src, o_comp_data); > + success = dcc_compress_image_quic(dcc, dest, src, o_comp_data); > + break; > case SPICE_IMAGE_COMPRESSION_GLZ: > if ((src->x * src->y) < > glz_enc_dictionary_get_size(dcc->glz_dict->dict)) { > - int ret, frozen; > + int frozen; > /* using the global dictionary only if it is not frozen */ > pthread_rwlock_rdlock(&dcc->glz_dict->encode_lock); > frozen = dcc->glz_dict->migrate_freeze; > if (!frozen) { > - ret = dcc_compress_image_glz(dcc, dest, src, drawable, > o_comp_data); > + success = dcc_compress_image_glz(dcc, dest, src, drawable, > o_comp_data); > } > pthread_rwlock_unlock(&dcc->glz_dict->encode_lock); > if (!frozen) { > - return ret; > + break; > } > } > #ifdef USE_LZ4 > case SPICE_IMAGE_COMPRESSION_LZ4: > if (red_channel_client_test_remote_cap(&dcc->common.base, > SPICE_DISPLAY_CAP_LZ4_COMPRESSION)) > { > - return dcc_compress_image_lz4(dcc, dest, src, o_comp_data); > + success = dcc_compress_image_lz4(dcc, dest, src, o_comp_data); > + break; > } > #endif > case SPICE_IMAGE_COMPRESSION_LZ: > - return dcc_compress_image_lz(dcc, dest, src, o_comp_data); > + success = dcc_compress_image_lz(dcc, dest, src, o_comp_data); > + break; > default: > spice_error("invalid image compression type %u", image_compression); > } > - return FALSE; > + > + if (!success) { > + uint64_t image_size = src->stride * src->y; > + stat_compress_add(&display_channel->off_stat, start_time, > image_size, image_size); > + } > + > + return success; > } > > #define CLIENT_PALETTE_CACHE > diff --git a/server/display-channel.c b/server/display-channel.c > index 82dbe03..3b5e169 100644 > --- a/server/display-channel.c > +++ b/server/display-channel.c > @@ -36,6 +36,7 @@ void display_channel_compress_stats_reset(DisplayChannel > *display) > { > spice_return_if_fail(display); > > + stat_reset(&display->off_stat); > stat_reset(&display->quic_stat); > stat_reset(&display->lz_stat); > stat_reset(&display->glz_stat); > @@ -58,6 +59,12 @@ void display_channel_compress_stats_print(const > DisplayChannel *display_channel) > > spice_info("==> Compression stats for display %u", > display_channel->common.base.id); > spice_info("Method \t count > \torig_size(MB)\tenc_size(MB)\tenc_time(s)"); > + spice_info("OFF \t%8d\t%13.2f\t%12.2f\t%12.2f", > + display_channel->off_stat.count, > + stat_byte_to_mega(display_channel->off_stat.orig_size), > + stat_byte_to_mega(display_channel->off_stat.comp_size), > + stat_cpu_time_to_sec(display_channel->off_stat.total) > + ); > spice_info("QUIC \t%8d\t%13.2f\t%12.2f\t%12.2f", > display_channel->quic_stat.count, > stat_byte_to_mega(display_channel->quic_stat.orig_size), > @@ -103,18 +110,21 @@ void display_channel_compress_stats_print(const > DisplayChannel *display_channel) > spice_info("-------------------------------------------------------------------"); > spice_info("Total \t%8d\t%13.2f\t%12.2f\t%12.2f", > display_channel->lz_stat.count + > display_channel->glz_stat.count + > + > display_channel->off_stat.count > + > display_channel->quic_stat.count > + > display_channel->jpeg_stat.count > + > display_channel->lz4_stat.count > + > display_channel->jpeg_alpha_stat.count, > stat_byte_to_mega(display_channel->lz_stat.orig_size + > display_channel->glz_stat.orig_size + > + display_channel->off_stat.orig_size + > display_channel->quic_stat.orig_size + > display_channel->jpeg_stat.orig_size + > display_channel->lz4_stat.orig_size + > display_channel->jpeg_alpha_stat.orig_size), > stat_byte_to_mega(display_channel->lz_stat.comp_size + > glz_enc_size + > + display_channel->off_stat.comp_size + > display_channel->quic_stat.comp_size + > display_channel->jpeg_stat.comp_size + > display_channel->lz4_stat.comp_size + > @@ -122,6 +132,7 @@ void display_channel_compress_stats_print(const > DisplayChannel *display_channel) > stat_cpu_time_to_sec(display_channel->lz_stat.total + > display_channel->glz_stat.total + > display_channel->zlib_glz_stat.total + > + display_channel->off_stat.total + > display_channel->quic_stat.total + > display_channel->jpeg_stat.total + > display_channel->lz4_stat.total + > diff --git a/server/display-channel.h b/server/display-channel.h > index 13b13b1..fc993e8 100644 > --- a/server/display-channel.h > +++ b/server/display-channel.h > @@ -213,6 +213,7 @@ struct DisplayChannel { > uint64_t *add_to_cache_counter; > uint64_t *non_cache_counter; > #endif > + stat_info_t off_stat; > stat_info_t lz_stat; > stat_info_t glz_stat; > stat_info_t quic_stat; Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx> Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel