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 15draws = 0 16drawPaths = 0 17drawPathsAnti = 0 18drawPathsConvexAnti = 0 19 20clips = 0 21clipPaths = 0 22clipPathsAnti = 0 23clipPathsConvexAnti = 0 24 25usedPath = false 26usedSWPath = false 27 28skpsTotal = 0 29skpsWithPath = 0 30skpsWithSWPath = 0 31 32function sk_scrape_startcanvas(c, fileName) 33 usedPath = false 34 usedSWPath = false 35end 36 37function 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 45end 46 47function string.starts(String,Start) 48 return string.sub(String,1,string.len(Start))==Start 49end 50 51function 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 65end 66 67function 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 108end 109 110function 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"); 124end 125