diff options
author | 2013-04-01 19:10:21 +0000 | |
---|---|---|
committer | 2013-04-01 19:10:21 +0000 | |
commit | d9c1853fb88ef02f74d003a5abd5531315a726db (patch) | |
tree | 065de5e21129c28201547891d806bff2f60bb646 | |
parent | 58e30fe8649deb1ffc5bda3627945228b028c439 (diff) |
Add looping over optimizations to filter tool
https://codereview.chromium.org/13261018/
git-svn-id: http://skia.googlecode.com/svn/trunk@8465 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | tools/filtermain.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/tools/filtermain.cpp b/tools/filtermain.cpp index 24887c5554..00cf6f0282 100644 --- a/tools/filtermain.cpp +++ b/tools/filtermain.cpp @@ -536,12 +536,26 @@ static int filter_picture(const SkString& inFile, const SkString& outFile) { 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; + } } } } |