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