~compiz-team/compiz-core/0.9.7

« back to all changes in this revision

Viewing changes to plugins/opengl/src/paint.cpp

  • Committer: Daniel van Vugt
  • Date: 2013-01-03 03:30:42 UTC
  • Revision ID: daniel.van.vugt@canonical.com-20130103033042-gmxp48ykx9hvv41q
Avoid calling code that results in calls to regexec as much as possible.
Regular expression matching is too expensive to do very often and compiz
was spending 31% of its CPU time in regexec().
(LP: #1095001)

Show diffs side-by-side

added added

removed removed

Lines of Context:
324
324
            if (w->alpha ())
325
325
                flags |= FullscreenRegion::Alpha;
326
326
            
 
327
            CompositeWindow *cw = CompositeWindow::get (w);
 
328
 
327
329
            /*
328
330
             * Windows with alpha channels can partially occlude windows
329
331
             * beneath them and so neither should be unredirected in that case.
 
332
             *
 
333
             * Performance note:  unredirectable.evaluate is SLOW because it
 
334
             * involves regex matching. Too slow to do on every window for
 
335
             * every frame. So we only call it if a window is redirected AND
 
336
             * potentially needs unredirecting. This means changes to
 
337
             * unredirect_match while a window is unredirected already may not
 
338
             * take effect until it is un-fullscreened again. But that's better
 
339
             * than the high price of regex matching on every frame.
330
340
             */
331
341
            if (unredirectFS &&
332
342
                !blacklisted &&
333
 
                unredirectable.evaluate (w) &&
334
343
                !(mask & PAINT_SCREEN_TRANSFORMED_MASK) &&
335
344
                !(mask & PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS_MASK) &&
336
 
                fs.isCoveredBy (w->region (), flags))
 
345
                fs.isCoveredBy (w->region (), flags) &&
 
346
                (!cw->redirected () || unredirectable.evaluate (w)))
337
347
            {
338
348
                unredirected.insert (w);
339
349
            }
340
350
            else
341
351
            {
342
 
                CompositeWindow *cw = CompositeWindow::get (w);
343
352
                if (!cw->redirected ())
344
353
                {
345
354
                    if (fs.allowRedirection (w->region ()))