Fix inadvertent O(N^2) loop within do_paint() which I just
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 12 Mar 2006 14:53:18 +0000 (14:53 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 12 Mar 2006 14:53:18 +0000 (14:53 +0000)
discovered when profiling IPBT.

git-svn-id: svn://svn.tartarus.org/sgt/putty@6602 cda61777-01e9-0310-a592-d414129be87e

terminal.c

index db61a1a..72ff9f9 100644 (file)
@@ -4822,10 +4822,12 @@ static void do_paint(Terminal *term, Context ctx, int may_optimise)
                != newline[j].attr) {
                int k;
 
-               for (k = laststart; k < j; k++)
-                   term->disptext[i]->chars[k].attr |= ATTR_INVALID;
+               if (!dirtyrect) {
+                   for (k = laststart; k < j; k++)
+                       term->disptext[i]->chars[k].attr |= ATTR_INVALID;
 
-               dirtyrect = TRUE;
+                   dirtyrect = TRUE;
+               }
            }
 
            if (dirtyrect)