summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Grunt <pgrunt@redhat.com>2015-08-25 18:39:53 +0200
committerPavel Grunt <pgrunt@redhat.com>2015-09-09 09:01:00 +0200
commitc32ca1aa824dd3aa6be5dee4d328f83987412a06 (patch)
tree22b539a018771616cfc590fce66077395f8a128d
parenta99ed1524b075c0cd9e7d82e7877783a1e31d291 (diff)
file-xfer: Simplify time handling
Use g_get_monotonic_time() instead of g_date_time_new_now_local(). g_get_monotonic_time doesn't suffer discontinuities and it is sufficient for our purposes. There is no need for the complexity of GDateTime.
-rw-r--r--src/channel-main.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/src/channel-main.c b/src/channel-main.c
index 145b081..42c9a65 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -71,8 +71,8 @@ typedef struct SpiceFileXferTask {
char buffer[FILE_XFER_CHUNK_SIZE];
uint64_t read_bytes;
uint64_t file_size;
- GDateTime *start_time;
- GDateTime *last_update;
+ gint64 start_time;
+ gint64 last_update;
GError *error;
} SpiceFileXferTask;
@@ -1699,10 +1699,6 @@ static void file_xfer_task_free(SpiceFileXferTask *task)
g_clear_object(&task->channel);
g_clear_object(&task->file);
g_clear_object(&task->file_stream);
- if (spice_util_get_debug()) {
- g_date_time_unref(task->start_time);
- g_date_time_unref(task->last_update);
- }
g_free(task);
}
@@ -1739,10 +1735,9 @@ static void file_xfer_close_cb(GObject *object,
} else {
g_simple_async_result_set_op_res_gboolean(res, TRUE);
if (spice_util_get_debug()) {
- GDateTime *now = g_date_time_new_now_local();
+ gint64 now = g_get_monotonic_time();
gchar *basename = g_file_get_basename(task->file);
- double seconds =
- (double) g_date_time_difference(now, task->start_time) / G_TIME_SPAN_SECOND;
+ double seconds = (double) (now - task->start_time) / G_TIME_SPAN_SECOND;
gchar *file_size_str = g_format_size(task->file_size);
gchar *transfer_speed_str = g_format_size(task->file_size / seconds);
@@ -1753,7 +1748,6 @@ static void file_xfer_close_cb(GObject *object,
g_free(basename);
g_free(file_size_str);
g_free(transfer_speed_str);
- g_date_time_unref(now);
}
}
g_simple_async_result_complete_in_idle(res);
@@ -1779,17 +1773,15 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
if (spice_util_get_debug()) {
const GTimeSpan interval = 20 * G_TIME_SPAN_SECOND;
- GDateTime *now = g_date_time_new_now_local();
+ gint64 now = g_get_monotonic_time();
- if (interval < g_date_time_difference(now, task->last_update)) {
+ if (interval < now - task->last_update) {
gchar *basename = g_file_get_basename(task->file);
- g_date_time_unref(task->last_update);
- task->last_update = g_date_time_ref(now);
+ task->last_update = now;
SPICE_DEBUG("transferred %.2f%% of the file %s",
100.0 * task->read_bytes / task->file_size, basename);
g_free(basename);
}
- g_date_time_unref(now);
}
if (task->progress_callback)
@@ -2958,8 +2950,8 @@ static void file_xfer_send_start_msg_async(SpiceMainChannel *channel,
if (spice_util_get_debug()) {
gchar *basename = g_file_get_basename(task->file);
- task->start_time = g_date_time_new_now_local();
- task->last_update = g_date_time_ref(task->start_time);
+ task->start_time = g_get_monotonic_time();
+ task->last_update = task->start_time;
SPICE_DEBUG("transfer of file %s has started", basename);
g_free(basename);