~compiz-team/compiz-core/0.9.7

« back to all changes in this revision

Viewing changes to plugins/opengl/src/screen.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:
603
603
    rootPixmapSize (),
604
604
    glVendor (NULL),
605
605
    glRenderer (NULL),
606
 
    glVersion (NULL)
 
606
    glVersion (NULL),
 
607
    prevRegex (),
 
608
    prevBlacklisted (false)
607
609
{
608
610
    ScreenInterface::setHandler (screen);
609
611
}
1306
1308
bool
1307
1309
PrivateGLScreen::driverIsBlacklisted (const char *regex) const
1308
1310
{
1309
 
    return blacklisted (regex, glVendor, glRenderer, glVersion);
 
1311
    /*
 
1312
     * regex matching is VERY expensive, so only do it when the result might
 
1313
     * be different to last time. The gl* variables never change value...
 
1314
     */
 
1315
    if (prevRegex != regex)
 
1316
    {
 
1317
        prevBlacklisted = blacklisted (regex, glVendor, glRenderer, glVersion);
 
1318
        prevRegex = regex;
 
1319
    }
 
1320
    return prevBlacklisted;
1310
1321
}
1311
1322
 
1312
1323
GLTexture::BindPixmapHandle