skia2/tools/lua/classify_rrect_clips.lua
commit-bot@chromium.org c530208ab0 Add point count to lua SkPath.
Add some scripts for classifying rrects and counting complex clip combinations.

R=reed@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/181843004

git-svn-id: http://skia.googlecode.com/svn/trunk@13601 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-02-26 21:38:47 +00:00

110 lines
3.3 KiB
Lua

function sk_scrape_startcanvas(c, fileName) end
function sk_scrape_endcanvas(c, fileName) end
function classify_rrect(rrect)
if (rrect:type() == "simple") then
local x, y = rrect:radii(0)
if (x == y) then
return "simple_circle"
else
return "simple_oval"
end
elseif (rrect:type() == "complex") then
local numNotSquare = 0
local rx, ry
local same = true;
local first_not_square_corner
local last_not_square_corner
for i = 1, 4 do
local x, y = rrect:radii(i-1)
if (x ~= 0 and y ~= 0) then
if (numNotSquare == 0) then
rx = x
ry = y
first_not_square_corner = i
else
last_not_square_corner = i
if (rx ~= x or ry ~=y) then
same = false
end
end
numNotSquare = numNotSquare + 1
end
end
local numSquare = 4 - numNotSquare
if (numSquare > 0 and same) then
local corners = "corners"
if (numSquare == 2) then
if ((last_not_square_corner - 1 == first_not_square_corner) or
(1 == first_not_square_corner and 4 == last_not_square_corner )) then
corners = "adjacent_" .. corners
else
corners = "opposite_" .. corners
end
elseif (1 == numSquare) then
corners = "corner"
end
if (rx == ry) then
return "circles_with_" .. numSquare .. "_square_" .. corners
else
return "ovals_with_" .. numSquare .. "_square_" .. corners
end
end
return "complex_unclassified"
elseif (rrect:type() == "rect") then
return "rect"
elseif (rrect:type() == "oval") then
local x, y = rrect:radii(0)
if (x == y) then
return "circle"
else
return "oval"
end
elseif (rrect:type() == "empty") then
return "empty"
else
return "unknown"
end
end
function print_classes(class_table)
function sort_classes(a, b)
return a.count > b.count
end
array = {}
for k, v in pairs(class_table) do
if (type(v) == "number") then
array[#array + 1] = {class = k, count = v};
end
end
table.sort(array, sort_classes)
local i
for i = 1, #array do
io.write(array[i].class, ": ", array[i].count, " (", array[i].count/class_table["total"] * 100, "%)\n");
end
end
function sk_scrape_accumulate(t)
if (t.verb == "clipRRect") then
local rrect = t.rrect
table["total"] = (table["total"] or 0) + 1
local class = classify_rrect(rrect)
table[class] = (table[class] or 0) + 1
end
end
function sk_scrape_summarize()
print_classes(table)
--[[ To use the web scraper comment out the above call to print_classes, run the code below,
and in the aggregator pass agg_table to print_classes.
for k, v in pairs(table) do
if (type(v) == "number") then
local t = "agg_table[\"" .. k .. "\"]"
io.write(t, " = (", t, " or 0) + ", table[k], "\n" );
end
end
--]]
end