First cut at threading



I just committed a patch to the 'evince-thread' branch of evince that
moves both the rendering and the thumbnailing to a thread.  There is
some bad lock contention between the thread and mainloop which means
that we are not as smooth resizing as we will be, but there are some
obvious improvements already.  I also broke it for all backends other
than pdf by adding a g_assert(), and disabled the find/index features,
so I don't recommend installing it just yet. (-:

The lock contention exists because we call get_page_size() and
set_scale() (and to a lesser extent, set_page()) quite frequently in
ev-view.c.  These calls are needed, so I'm planning on adding a cache to
cache the sizes of the pages, similar to what's seen in the defunct
ev-page-view.c file.  This will let us pass in the scale with the
EvRenderJob, and avoid most calls on the document directly.  It also
means that we can stop making the awful calls like:

 ev_document_get_size (doc, -1, &width, &height);
 scale = ev_document_get_scale (doc);
 initial_width = width/scale;
 ...

I haven't looked too much into how best to do either search or the index
interface with this model yet.  If anyone wants to give that a look,
that'd be great.

Thanks,
-Jonathan



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]