| Index: tools/filtermain.cpp
|
| ===================================================================
|
| --- tools/filtermain.cpp (revision 8462)
|
| +++ tools/filtermain.cpp (working copy)
|
| @@ -536,12 +536,26 @@
|
| debugCanvas.deleteDrawCommandAt(debugCanvas.getSize()-1);
|
| }
|
|
|
| - for (int i = 0; i < debugCanvas.getSize(); ++i) {
|
| - for (size_t opt = 0; opt < SK_ARRAY_COUNT(gOptTable); ++opt) {
|
| - if ((*gOptTable[opt].fCheck)(&debugCanvas, i)) {
|
| - (*gOptTable[opt].fApply)(&debugCanvas, i);
|
| - ++gOptTable[opt].fNumTimesApplied;
|
| - ++localCount[opt];
|
| + bool changed = true;
|
| +
|
| + while (changed) {
|
| + changed = false;
|
| + for (int i = 0; i < debugCanvas.getSize(); ++i) {
|
| + for (size_t opt = 0; opt < SK_ARRAY_COUNT(gOptTable); ++opt) {
|
| + if ((*gOptTable[opt].fCheck)(&debugCanvas, i)) {
|
| + (*gOptTable[opt].fApply)(&debugCanvas, i);
|
| +
|
| + ++gOptTable[opt].fNumTimesApplied;
|
| + ++localCount[opt];
|
| +
|
| + if (debugCanvas.getSize() == i) {
|
| + // the optimization removed all the remaining operations
|
| + break;
|
| + }
|
| +
|
| + opt = 0; // try all the opts all over again
|
| + changed = true;
|
| + }
|
| }
|
| }
|
| }
|
|
|