summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-09-13 18:00:44 +0200
committerFrediano Ziglio <fziglio@redhat.com>2015-11-05 11:13:25 +0000
commit81cf3997db6590a9f52f86307ac5f836ab5e03b2 (patch)
tree6b546aa1b1616891a5a6919394a25b8a38bb1cbe
parent63b8ea5afba5c6eb1b9825b06f2006930c318aed (diff)
downloadspice-81cf3997db6590a9f52f86307ac5f836ab5e03b2.tar.gz
spice-81cf3997db6590a9f52f86307ac5f836ab5e03b2.tar.xz
spice-81cf3997db6590a9f52f86307ac5f836ab5e03b2.zip
worker: minor simplification
Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
-rw-r--r--server/red_worker.c42
-rw-r--r--server/tree.h1
2 files changed, 24 insertions, 19 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index b6be530f..4a431542 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -2957,6 +2957,7 @@ static inline int red_current_add_with_shadow(RedWorker *worker, Ring *ring, Dra
{
#ifdef RED_WORKER_STAT
stat_time_t start_time = stat_now(worker);
+ ++worker->add_with_shadow_count;
#endif
Shadow *shadow = __new_shadow(worker, item, delta);
@@ -3032,24 +3033,8 @@ static inline void red_update_streamable(RedWorker *worker, Drawable *drawable,
drawable->streamable = TRUE;
}
-static inline int red_current_add_qxl(RedWorker *worker, Ring *ring, Drawable *drawable,
- RedDrawable *red_drawable)
+static void red_print_stats(RedWorker *worker)
{
- int ret;
-
- if (has_shadow(red_drawable)) {
- SpicePoint delta;
-
-#ifdef RED_WORKER_STAT
- ++worker->add_with_shadow_count;
-#endif
- delta.x = red_drawable->u.copy_bits.src_pos.x - red_drawable->bbox.left;
- delta.y = red_drawable->u.copy_bits.src_pos.y - red_drawable->bbox.top;
- ret = red_current_add_with_shadow(worker, ring, drawable, &delta);
- } else {
- red_update_streamable(worker, drawable, red_drawable);
- ret = red_current_add(worker, ring, drawable);
- }
#ifdef RED_WORKER_STAT
if ((++worker->add_count % 100) == 0) {
stat_time_t total = worker->add_stat.total;
@@ -3074,6 +3059,26 @@ static inline int red_current_add_qxl(RedWorker *worker, Ring *ring, Drawable *d
stat_reset(&worker->__exclude_stat);
}
#endif
+}
+
+static int red_add_drawable(RedWorker *worker, Drawable *drawable)
+{
+ int ret = FALSE, surface_id = drawable->surface_id;
+ RedDrawable *red_drawable = drawable->red_drawable;
+ Ring *ring = &worker->surfaces[surface_id].current;
+
+ if (has_shadow(red_drawable)) {
+ SpicePoint delta = {
+ .x = red_drawable->u.copy_bits.src_pos.x - red_drawable->bbox.left,
+ .y = red_drawable->u.copy_bits.src_pos.y - red_drawable->bbox.top
+ };
+ ret = red_current_add_with_shadow(worker, ring, drawable, &delta);
+ } else {
+ red_update_streamable(worker, drawable, red_drawable);
+ ret = red_current_add(worker, ring, drawable);
+ }
+
+ red_print_stats(worker);
return ret;
}
@@ -3371,8 +3376,7 @@ static inline void red_process_draw(RedWorker *worker, RedDrawable *red_drawable
goto cleanup;
}
- if (red_current_add_qxl(worker, &worker->surfaces[surface_id].current, drawable,
- red_drawable)) {
+ if (red_add_drawable(worker, drawable)) {
if (drawable->tree_item.effect != QXL_EFFECT_OPAQUE) {
worker->transparent_count++;
}
diff --git a/server/tree.h b/server/tree.h
index 704bf533..82f9ce3b 100644
--- a/server/tree.h
+++ b/server/tree.h
@@ -45,6 +45,7 @@ struct TreeItem {
QRegion rgn;
};
+/* A region "below" a copy, or the src region of the copy */
struct Shadow {
TreeItem base;
QRegion on_hold;