[Spice-devel] [PATCH v6 2/9] server: api: add spice_qxl_* calls based on QXLWorker contents

Alon Levy alevy at redhat.com
Wed Jul 20 02:53:14 PDT 2011


On Wed, Jul 20, 2011 at 11:33:39AM +0200, Christophe Fergeau wrote:
> On Wed, Jul 20, 2011 at 12:10:07PM +0300, Alon Levy wrote:
> > On Wed, Jul 20, 2011 at 10:53:49AM +0200, Christophe Fergeau wrote:
> > > On Wed, Jul 20, 2011 at 11:19:52AM +0300, Alon Levy wrote:
> > > > -static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
> > > > +static void red_dispatcher_update_area(RedDispatcher *dispatcher, uint32_t surface_id,
> > > >                                     QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
> > > >                                     uint32_t num_dirty_rects, uint32_t clear_dirty_region)
> > > >  {
> > > > -    RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
> > > >      RedWorkerMessage message = RED_WORKER_MESSAGE_UPDATE;
> > > >      SpiceRect *dirty_rects = spice_new0(SpiceRect, num_dirty_rects);
> > > >      SpiceRect *area = spice_new0(SpiceRect, 1);
> > > > @@ -241,9 +240,16 @@ static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
> > > >      free(area);
> > > >  }
> > > >  
> > > > -static void qxl_worker_add_memslot(QXLWorker *qxl_worker, QXLDevMemSlot *mem_slot)
> > > > +static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
> > > > +                                   QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
> > > > +                                   uint32_t num_dirty_rects, uint32_t clear_dirty_region)
> > > > +{
> > > > +    red_dispatcher_update_area((RedDispatcher*)qxl_worker, surface_id, qxl_area,
> > > > +                               qxl_dirty_rects, num_dirty_rects, clear_dirty_region);
> > > > +}
> > > 
> > > 
> > > Aren't red_dispatcher_update_area/qxl_worker_update_area redundant? Can't
> > > we just keep the old qxl_worker_update_area and do the cast in there?
> > 
> > red_disptacher_update_area is used twice - once by qxl_worker_update_area which must remain
> > for backward compatibility (QXLWorker.update_area is set to it), and second by spice_qxl_update_area
> > which goes directly from the QXLInstance to the RedDispatcher without going through QXLWorker.
> 
> Given the (RedDispatcher*)qxl_worker cast, in this case a RedDispatcher
> will also be a QXLWorker and vice versa, so I don't understand why we need
> a wrapper whose only added value is an obvious cast.
> 
> > > Will the function pointer above go away? My understanding is that the
> > > functions added below are meant to replace these?
> > 
> > They can't go away as long as we want to maintain backwards compatibility.
> 
> Ok, I'd have gone with using these to implement spice_qxl_wakeup et al:
> void spice_qxl_wakeup(QXLInstance *instance)
> {
>     QXLWorker *worker = (QXLWorker *)instance->st->dispatcher;
>     ASSERT(worker->wakeup != NULL)
>     worker->wakeup(worker);
> }
> 
> or something like that
> 
> But maybe that's something kraxel wanted to avoid.
> 

I dunno, both would work. None look particularily pretty. Do you mind
if I don't do another rewrite?

> Christophe



> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list