| -- | |
| -- Copyright 2014 Google Inc. | |
| -- | |
| -- Use of this source code is governed by a BSD-style license that can be | |
| -- found in the LICENSE file. | |
| -- | |
| -- Path scraping script. | |
| -- This script is designed to count the number of times we fall back to software | |
| -- rendering for a path in a given SKP. However, this script does not count an exact | |
| -- number of uploads, since there is some overlap with clipping: e.g. two clipped paths | |
| -- may cause three uploads to the GPU (set clip 1, set clip 2, unset clip 2/reset clip 1), | |
| -- but these cases are rare. | |
| draws = 0 | |
| drawPaths = 0 | |
| drawPathsAnti = 0 | |
| drawPathsConvexAnti = 0 | |
| clips = 0 | |
| clipPaths = 0 | |
| clipPathsAnti = 0 | |
| clipPathsConvexAnti = 0 | |
| usedPath = false | |
| usedSWPath = false | |
| skpsTotal = 0 | |
| skpsWithPath = 0 | |
| skpsWithSWPath = 0 | |
| function sk_scrape_startcanvas(c, fileName) | |
| usedPath = false | |
| usedSWPath = false | |
| end | |
| function sk_scrape_endcanvas(c, fileName) | |
| skpsTotal = skpsTotal + 1 | |
| if usedPath then | |
| skpsWithPath = skpsWithPath + 1 | |
| if usedSWPath then | |
| skpsWithSWPath = skpsWithSWPath + 1 | |
| end | |
| end | |
| end | |
| function string.starts(String,Start) | |
| return string.sub(String,1,string.len(Start))==Start | |
| end | |
| function isPathValid(path) | |
| if not path then | |
| return false | |
| end | |
| if path:isEmpty() then | |
| return false | |
| end | |
| if path:isRect() then | |
| return false | |
| end | |
| return true | |
| end | |
| function sk_scrape_accumulate(t) | |
| if (string.starts(t.verb, "draw")) then | |
| draws = draws + 1 | |
| end | |
| if (string.starts(t.verb, "clip")) then | |
| clips = clips + 1 | |
| end | |
| if t.verb == "clipPath" then | |
| local path = t.path | |
| if isPathValid(path) then | |
| clipPaths = clipPaths + 1 | |
| usedPath = true | |
| if t.aa then | |
| clipPathsAnti = clipPathsAnti + 1 | |
| if path:isConvex() then | |
| clipPathsConvexAnti = clipPathsConvexAnti + 1 | |
| else | |
| usedSWPath = true | |
| end | |
| end | |
| end | |
| end | |
| if t.verb == "drawPath" then | |
| local path = t.path | |
| local paint = t.paint | |
| if paint and isPathValid(path) then | |
| drawPaths = drawPaths + 1 | |
| usedPath = true | |
| if paint:isAntiAlias() then | |
| drawPathsAnti = drawPathsAnti + 1 | |
| if path:isConvex() then | |
| drawPathsConvexAnti = drawPathsConvexAnti + 1 | |
| else | |
| usedSWPath = true | |
| end | |
| end | |
| end | |
| end | |
| end | |
| function sk_scrape_summarize() | |
| local swDrawPaths = drawPathsAnti - drawPathsConvexAnti | |
| local swClipPaths = clipPathsAnti - clipPathsConvexAnti | |
| io.write("clips = clips + ", clips, "\n"); | |
| io.write("draws = draws + ", draws, "\n"); | |
| io.write("clipPaths = clipPaths + ", clipPaths, "\n"); | |
| io.write("drawPaths = drawPaths + ", drawPaths, "\n"); | |
| io.write("swClipPaths = swClipPaths + ", swClipPaths, "\n"); | |
| io.write("swDrawPaths = swDrawPaths + ", swDrawPaths, "\n"); | |
| io.write("skpsTotal = skpsTotal + ", skpsTotal, "\n"); | |
| io.write("skpsWithPath = skpsWithPath + ", skpsWithPath, "\n"); | |
| io.write("skpsWithSWPath = skpsWithSWPath + ", skpsWithSWPath, "\n"); | |
| end |