| -- |
| -- 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 |