| stats = {} |
| |
| -- switch this to run on the automated scraper system |
| newline = "\n" |
| -- newline = "\\n" |
| |
| function sk_scrape_startcanvas(c, fileName) |
| canvas = c |
| oldstackstr = "<invalid>" |
| end |
| |
| function sk_scrape_endcanvas(c, fileName) |
| canvas = nil |
| end |
| |
| function string.starts(String,Start) |
| return string.sub(String,1,string.len(Start))==Start |
| end |
| |
| function build_stack_string(stack) |
| local info = "" |
| for i = 1, #stack do |
| local element = stack[i]; |
| info = info .. element["op"] .. ", " .. element["type"] .. ", aa:" .. tostring(element["aa"]) |
| if (element["type"] == "path") then |
| if (element["path"]:getSegmentTypes() == "line" and element["path"]:isConvex()) then |
| info = info .. ", convex_poly " .. element["path"]:countPoints() .. " points" |
| else |
| info = info .. ", fill: " .. element["path"]:getFillType() |
| info = info .. ", segments: (" .. element["path"]:getSegmentTypes() .. ")" |
| info = info .. ", convex:" .. tostring(element["path"]:isConvex()) |
| end |
| end |
| info = info .. newline |
| end |
| return info |
| end |
| |
| function sk_scrape_accumulate(t) |
| if (string.starts(t.verb, "draw")) then |
| local stack = canvas:getReducedClipStack() |
| local stackstr = build_stack_string(stack) |
| if (stackstr ~= "") then |
| if (stats[stackstr] == nil) then |
| stats[stackstr] = {} |
| stats[stackstr].drawCnt = 0 |
| stats[stackstr].instanceCnt = 0 |
| end |
| stats[stackstr].drawCnt = stats[stackstr].drawCnt + 1 |
| if (stackstr ~= oldstackstr) then |
| stats[stackstr].instanceCnt = stats[stackstr].instanceCnt + 1 |
| end |
| end |
| oldstackstr = stackstr |
| end |
| end |
| |
| function print_stats(stats) |
| function sort_by_draw_cnt(a, b) |
| return a.data.drawCnt > b.data.drawCnt |
| end |
| array = {} |
| for k,v in pairs(stats) do |
| array[#array + 1] = { name = k, data = v } |
| end |
| table.sort(array, sort_by_draw_cnt) |
| for i = 1, #array do |
| io.write("\n-------\n", array[i].name, tostring(array[i].data.drawCnt), " draws, ", tostring(array[i].data.instanceCnt), " instances.\n") |
| end |
| end |
| |
| function sk_scrape_summarize() |
| print_stats(stats) |
| --[[ To use the web scraper comment out the print above, run the code below to generate an |
| aggregate table on the automated scraper system. Then use the print_stats function on |
| agg_stats in the aggregator step. |
| for k,v in pairs(stats) do |
| if (v.drawCnt ~= nil) then |
| -- io.write("\n-------\n", k, tostring(v.drawCnt), " draws, ", tostring(v.instanceCnt), " instances.\n") |
| local tableEntry = 'agg_stats["' .. k .. '"]' |
| io.write(tableEntry, " = ", tableEntry, " or {}\n") |
| io.write(tableEntry, ".drawCnt = (", tableEntry, ".drawCnt or 0 ) + ", v.drawCnt, "\n") |
| io.write(tableEntry, ".instanceCnt = (", tableEntry, ".instanceCnt or 0 ) + ", v.instanceCnt, "\n") |
| end |
| end |
| --]] |
| end |