Lines Matching full:job
52 * When the encoding job is done, the worker thread will hold the output lock
84 VncJob *job = g_new0(VncJob, 1); in vnc_job_new() local
87 job->vs = vs; in vnc_job_new()
89 QLIST_INIT(&job->rectangles); in vnc_job_new()
91 return job; in vnc_job_new()
94 int vnc_job_add_rect(VncJob *job, int x, int y, int w, int h) in vnc_job_add_rect() argument
98 trace_vnc_job_add_rect(job->vs, job, x, y, w, h); in vnc_job_add_rect()
106 QLIST_INSERT_HEAD(&job->rectangles, entry, next); in vnc_job_add_rect()
111 void vnc_job_push(VncJob *job) in vnc_job_push() argument
114 if (queue->exit || QLIST_EMPTY(&job->rectangles)) { in vnc_job_push()
115 g_free(job); in vnc_job_push()
117 QTAILQ_INSERT_TAIL(&queue->jobs, job, next); in vnc_job_push()
125 VncJob *job; in vnc_has_job_locked() local
127 QTAILQ_FOREACH(job, &queue->jobs, next) { in vnc_has_job_locked()
128 if (job->vs == vs || !vs) { in vnc_has_job_locked()
202 static bool vnc_worker_clamp_rect(VncState *vs, VncJob *job, VncRect *rect) in vnc_worker_clamp_rect() argument
204 trace_vnc_job_clamp_rect(vs, job, rect->x, rect->y, rect->w, rect->h); in vnc_worker_clamp_rect()
222 trace_vnc_job_clamped_rect(vs, job, rect->x, rect->y, rect->w, rect->h); in vnc_worker_clamp_rect()
226 trace_vnc_job_discard_rect(vs, job, rect->x, rect->y, rect->w, rect->h); in vnc_worker_clamp_rect()
233 VncJob *job; in vnc_worker_thread_loop() local
243 /* Here job can only be NULL if queue->exit is true */ in vnc_worker_thread_loop()
244 job = QTAILQ_FIRST(&queue->jobs); in vnc_worker_thread_loop()
251 assert(job->vs->magic == VNC_MAGIC); in vnc_worker_thread_loop()
252 vc = container_of(job->vs, VncConnection, vs); in vnc_worker_thread_loop()
254 vnc_lock_output(job->vs); in vnc_worker_thread_loop()
255 if (job->vs->ioc == NULL || job->vs->abort == true) { in vnc_worker_thread_loop()
256 vnc_unlock_output(job->vs); in vnc_worker_thread_loop()
259 if (buffer_empty(&job->vs->output)) { in vnc_worker_thread_loop()
265 buffer_move_empty(&vs.output, &job->vs->output); in vnc_worker_thread_loop()
267 vnc_unlock_output(job->vs); in vnc_worker_thread_loop()
270 vnc_async_encoding_start(job->vs, &vs); in vnc_worker_thread_loop()
280 vnc_lock_display(job->vs->vd); in vnc_worker_thread_loop()
281 QLIST_FOREACH_SAFE(entry, &job->rectangles, next, tmp) { in vnc_worker_thread_loop()
284 if (job->vs->ioc == NULL) { in vnc_worker_thread_loop()
285 vnc_unlock_display(job->vs->vd); in vnc_worker_thread_loop()
287 vnc_async_encoding_end(job->vs, &vs); in vnc_worker_thread_loop()
291 if (vnc_worker_clamp_rect(&vs, job, &entry->rect)) { in vnc_worker_thread_loop()
302 trace_vnc_job_nrects(&vs, job, n_rectangles); in vnc_worker_thread_loop()
303 vnc_unlock_display(job->vs->vd); in vnc_worker_thread_loop()
309 vnc_lock_output(job->vs); in vnc_worker_thread_loop()
310 if (job->vs->ioc != NULL) { in vnc_worker_thread_loop()
311 buffer_move(&job->vs->jobs_buffer, &vs.output); in vnc_worker_thread_loop()
313 vnc_async_encoding_end(job->vs, &vs); in vnc_worker_thread_loop()
315 qemu_bh_schedule(job->vs->bh); in vnc_worker_thread_loop()
319 vnc_async_encoding_end(job->vs, &vs); in vnc_worker_thread_loop()
321 vnc_unlock_output(job->vs); in vnc_worker_thread_loop()
325 QTAILQ_REMOVE(&queue->jobs, job, next); in vnc_worker_thread_loop()
328 g_free(job); in vnc_worker_thread_loop()