Home | History | Annotate | Download | only in lua
      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