Blame SOURCES/0011-file-xfer-Add-debug-messages-about-a-file-transfer-p.patch

67137c
From 4a4afa2901f8b71eb4e999a62746188d65e73864 Mon Sep 17 00:00:00 2001
67137c
From: Pavel Grunt <pgrunt@redhat.com>
67137c
Date: Tue, 25 Aug 2015 16:32:47 +0200
67137c
Subject: [PATCH 11/11] file-xfer: Add debug messages about a file transfer
67137c
 progress
67137c
67137c
During the file transfer debug messages about the progress are printed
67137c
every 20 seconds for each of the file transfer tasks.
67137c
67137c
Fixes:
67137c
https://bugzilla.redhat.com/show_bug.cgi?id=1140512
67137c
67137c
Acked-by: Frediano Ziglio <fziglio@redhat.com>
67137c
---
67137c
 gtk/channel-main.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
67137c
 1 file changed, 46 insertions(+)
67137c
67137c
diff --git a/gtk/channel-main.c b/gtk/channel-main.c
67137c
index 7ab3407..ae22333 100644
67137c
--- a/gtk/channel-main.c
67137c
+++ b/gtk/channel-main.c
67137c
@@ -70,6 +70,8 @@ typedef struct SpiceFileXferTask {
67137c
     char                           buffer[FILE_XFER_CHUNK_SIZE];
67137c
     uint64_t                       read_bytes;
67137c
     uint64_t                       file_size;
67137c
+    GDateTime                      *start_time;
67137c
+    GDateTime                      *last_update;
67137c
     GError                         *error;
67137c
 } SpiceFileXferTask;
67137c
 
67137c
@@ -1559,6 +1561,10 @@ static void file_xfer_task_free(SpiceFileXferTask *task)
67137c
     g_clear_object(&task->channel);
67137c
     g_clear_object(&task->file);
67137c
     g_clear_object(&task->file_stream);
67137c
+    if (spice_util_get_debug()) {
67137c
+        g_date_time_unref(task->start_time);
67137c
+        g_date_time_unref(task->last_update);
67137c
+    }
67137c
     g_free(task);
67137c
 }
67137c
 
67137c
@@ -1594,6 +1600,23 @@ static void file_xfer_close_cb(GObject      *object,
67137c
         g_simple_async_result_set_op_res_gboolean(res, FALSE);
67137c
     } else {
67137c
         g_simple_async_result_set_op_res_gboolean(res, TRUE);
67137c
+        if (spice_util_get_debug()) {
67137c
+            GDateTime *now = g_date_time_new_now_local();
67137c
+            gchar *basename = g_file_get_basename(task->file);
67137c
+            double seconds =
67137c
+                (double) g_date_time_difference(now, task->start_time) / G_TIME_SPAN_SECOND;
67137c
+            gchar *file_size_str = g_format_size(task->file_size);
67137c
+            gchar *transfer_speed_str = g_format_size(task->file_size / seconds);
67137c
+
67137c
+            g_warn_if_fail(task->read_bytes == task->file_size);
67137c
+            SPICE_DEBUG("transferred file %s of %s size in %.1f seconds (%s/s)",
67137c
+                        basename, file_size_str, seconds, transfer_speed_str);
67137c
+
67137c
+            g_free(basename);
67137c
+            g_free(file_size_str);
67137c
+            g_free(transfer_speed_str);
67137c
+            g_date_time_unref(now);
67137c
+        }
67137c
     }
67137c
     g_simple_async_result_complete_in_idle(res);
67137c
     g_object_unref(res);
67137c
@@ -1616,6 +1639,21 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
67137c
         return;
67137c
     }
67137c
 
67137c
+    if (spice_util_get_debug()) {
67137c
+        const GTimeSpan interval = 20 * G_TIME_SPAN_SECOND;
67137c
+        GDateTime *now = g_date_time_new_now_local();
67137c
+
67137c
+        if (interval < g_date_time_difference(now, task->last_update)) {
67137c
+            gchar *basename = g_file_get_basename(task->file);
67137c
+            g_date_time_unref(task->last_update);
67137c
+            task->last_update = g_date_time_ref(now);
67137c
+            SPICE_DEBUG("transferred %.2f%% of the file %s",
67137c
+                        100.0 * task->read_bytes / task->file_size, basename);
67137c
+            g_free(basename);
67137c
+        }
67137c
+        g_date_time_unref(now);
67137c
+    }
67137c
+
67137c
     if (task->progress_callback)
67137c
         task->progress_callback(task->read_bytes, task->file_size,
67137c
                                 task->progress_callback_data);
67137c
@@ -2775,6 +2813,14 @@ static void file_xfer_send_start_msg_async(SpiceMainChannel *channel,
67137c
         task->callback = callback;
67137c
         task->user_data = user_data;
67137c
 
67137c
+        if (spice_util_get_debug()) {
67137c
+            gchar *basename = g_file_get_basename(task->file);
67137c
+            task->start_time = g_date_time_new_now_local();
67137c
+            task->last_update = g_date_time_ref(task->start_time);
67137c
+
67137c
+            SPICE_DEBUG("transfer of file %s has started", basename);
67137c
+            g_free(basename);
67137c
+        }
67137c
         CHANNEL_DEBUG(task->channel, "Insert a xfer task:%d to task list", task->id);
67137c
         g_hash_table_insert(c->file_xfer_tasks, GUINT_TO_POINTER(task->id), task);
67137c
 
67137c
-- 
67137c
2.4.3
67137c