1 -- 2 -- Copyright 2014 Google Inc. 3 -- 4 -- Use of this source code is governed by a BSD-style license that can be 5 -- found in the LICENSE file. 6 -- 7 8 -- Path scraping script. 9 -- This script is designed to count the number of times we fall back to software 10 -- rendering for a path in a given SKP. However, this script does not count an exact 11 -- number of uploads, since there is some overlap with clipping: e.g. two clipped paths 12 -- may cause three uploads to the GPU (set clip 1, set clip 2, unset clip 2/reset clip 1), 13 -- but these cases are rare. 14 15 draws = 0 16 drawPaths = 0 17 drawPathsAnti = 0 18 drawPathsConvexAnti = 0 19 20 clips = 0 21 clipPaths = 0 22 clipPathsAnti = 0 23 clipPathsConvexAnti = 0 24 25 usedPath = false 26 usedSWPath = false 27 28 skpsTotal = 0 29 skpsWithPath = 0 30 skpsWithSWPath = 0 31 32 function sk_scrape_startcanvas(c, fileName) 33 usedPath = false 34 usedSWPath = false 35 end 36 37 function sk_scrape_endcanvas(c, fileName) 38 skpsTotal = skpsTotal + 1 39 if usedPath then 40 skpsWithPath = skpsWithPath + 1 41 if usedSWPath then 42 skpsWithSWPath = skpsWithSWPath + 1 43 end 44 end 45 end 46 47 function string.starts(String,Start) 48 return string.sub(String,1,string.len(Start))==Start 49 end 50 51 function isPathValid(path) 52 if not path then 53 return false 54 end 55 56 if path:isEmpty() then 57 return false 58 end 59 60 if path:isRect() then 61 return false 62 end 63 64 return true 65 end 66 67 function sk_scrape_accumulate(t) 68 if (string.starts(t.verb, "draw")) then 69 draws = draws + 1 70 end 71 72 if (string.starts(t.verb, "clip")) then 73 clips = clips + 1 74 end 75 76 if t.verb == "clipPath" then 77 local path = t.path 78 if isPathValid(path) then 79 clipPaths = clipPaths + 1 80 usedPath = true 81 if t.aa then 82 clipPathsAnti = clipPathsAnti + 1 83 if path:isConvex() then 84 clipPathsConvexAnti = clipPathsConvexAnti + 1 85 else 86 usedSWPath = true 87 end 88 end 89 end 90 end 91 92 if t.verb == "drawPath" then 93 local path = t.path 94 local paint = t.paint 95 if paint and isPathValid(path) then 96 drawPaths = drawPaths + 1 97 usedPath = true 98 if paint:isAntiAlias() then 99 drawPathsAnti = drawPathsAnti + 1 100 if path:isConvex() then 101 drawPathsConvexAnti = drawPathsConvexAnti + 1 102 else 103 usedSWPath = true 104 end 105 end 106 end 107 end 108 end 109 110 function sk_scrape_summarize() 111 local swDrawPaths = drawPathsAnti - drawPathsConvexAnti 112 local swClipPaths = clipPathsAnti - clipPathsConvexAnti 113 114 io.write("clips = clips + ", clips, "\n"); 115 io.write("draws = draws + ", draws, "\n"); 116 io.write("clipPaths = clipPaths + ", clipPaths, "\n"); 117 io.write("drawPaths = drawPaths + ", drawPaths, "\n"); 118 io.write("swClipPaths = swClipPaths + ", swClipPaths, "\n"); 119 io.write("swDrawPaths = swDrawPaths + ", swDrawPaths, "\n"); 120 121 io.write("skpsTotal = skpsTotal + ", skpsTotal, "\n"); 122 io.write("skpsWithPath = skpsWithPath + ", skpsWithPath, "\n"); 123 io.write("skpsWithSWPath = skpsWithSWPath + ", skpsWithSWPath, "\n"); 124 end 125