diff options
-rw-r--r-- | include/core/SkCanvas.h | 1 | ||||
-rw-r--r-- | include/utils/SkLua.h | 6 | ||||
-rw-r--r-- | src/utils/SkLua.cpp | 100 | ||||
-rw-r--r-- | tools/lua/count_reduced_clipstacks.lua | 87 | ||||
-rw-r--r-- | tools/lua/dump_clipstack_at_restore.lua | 33 |
5 files changed, 1 insertions, 226 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 02e46e767a..c259477633 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1557,7 +1557,6 @@ private: friend class SkDrawIter; // needs setupDrawForLayerDevice() friend class AutoDrawLooper; - friend class SkLua; // needs top layer size and offset friend class SkDebugCanvas; // needs experimental fAllowSimplifyClip friend class SkSurface_Raster; // needs getDevice() friend class SkRecorder; // resetForNextPicture diff --git a/include/utils/SkLua.h b/include/utils/SkLua.h index ad6f996ac3..ea3e166b04 100644 --- a/include/utils/SkLua.h +++ b/include/utils/SkLua.h @@ -8,7 +8,6 @@ #ifndef SkLua_DEFINED #define SkLua_DEFINED -#include "SkClipStack.h" #include "SkColor.h" #include "SkPathEffect.h" #include "SkScalar.h" @@ -59,13 +58,8 @@ public: void pushPaint(const SkPaint&, const char tableKey[] = NULL); void pushPath(const SkPath&, const char tableKey[] = NULL); void pushCanvas(SkCanvas*, const char tableKey[] = NULL); - void pushClipStack(const SkClipStack&, const char tableKey[] = NULL); - void pushClipStackElement(const SkClipStack::Element& element, const char tableKey[] = NULL); void pushTextBlob(const SkTextBlob*, const char tableKey[] = NULL); - // This SkCanvas lua methods is declared here to benefit from SkLua's friendship with SkCanvas. - static int lcanvas_getReducedClipStack(lua_State* L); - private: lua_State* fL; SkString fTermCode; diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp index 27127df6a8..7ba98e5669 100644 --- a/src/utils/SkLua.cpp +++ b/src/utils/SkLua.cpp @@ -8,7 +8,7 @@ #include "SkLua.h" #if SK_SUPPORT_GPU -#include "GrReducedClip.h" +//#include "GrReducedClip.h" #endif #include "SkBlurImageFilter.h" @@ -349,73 +349,6 @@ void SkLua::pushTextBlob(const SkTextBlob* blob, const char key[]) { CHECK_SETFIELD(key); } -static const char* element_type(SkClipStack::Element::Type type) { - switch (type) { - case SkClipStack::Element::kEmpty_Type: - return "empty"; - case SkClipStack::Element::kRect_Type: - return "rect"; - case SkClipStack::Element::kRRect_Type: - return "rrect"; - case SkClipStack::Element::kPath_Type: - return "path"; - } - return "unknown"; -} - -static const char* region_op(SkRegion::Op op) { - switch (op) { - case SkRegion::kDifference_Op: - return "difference"; - case SkRegion::kIntersect_Op: - return "intersect"; - case SkRegion::kUnion_Op: - return "union"; - case SkRegion::kXOR_Op: - return "xor"; - case SkRegion::kReverseDifference_Op: - return "reverse-difference"; - case SkRegion::kReplace_Op: - return "replace"; - } - return "unknown"; -} - -void SkLua::pushClipStack(const SkClipStack& stack, const char* key) { - lua_newtable(fL); - SkClipStack::B2TIter iter(stack); - const SkClipStack::Element* element; - int i = 0; - while ((element = iter.next())) { - this->pushClipStackElement(*element); - lua_rawseti(fL, -2, ++i); - } - CHECK_SETFIELD(key); -} - -void SkLua::pushClipStackElement(const SkClipStack::Element& element, const char* key) { - lua_newtable(fL); - SkClipStack::Element::Type type = element.getType(); - this->pushString(element_type(type), "type"); - switch (type) { - case SkClipStack::Element::kEmpty_Type: - break; - case SkClipStack::Element::kRect_Type: - this->pushRect(element.getRect(), "rect"); - break; - case SkClipStack::Element::kRRect_Type: - this->pushRRect(element.getRRect(), "rrect"); - break; - case SkClipStack::Element::kPath_Type: - this->pushPath(element.getPath(), "path"); - break; - } - this->pushString(region_op((SkRegion::Op)element.getOp()), "op"); - this->pushBool(element.isAA(), "aa"); - CHECK_SETFIELD(key); -} - - /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// @@ -640,33 +573,6 @@ static int lcanvas_getTotalMatrix(lua_State* L) { return 1; } -static int lcanvas_getClipStack(lua_State* L) { - SkLua(L).pushClipStack(*get_ref<SkCanvas>(L, 1)->getClipStack()); - return 1; -} - -int SkLua::lcanvas_getReducedClipStack(lua_State* L) { -#if SK_SUPPORT_GPU - const SkCanvas* canvas = get_ref<SkCanvas>(L, 1); - SkRect queryBounds = SkRect::Make(canvas->getTopLayerBounds()); - const GrReducedClip reducedClip(*canvas->getClipStack(), queryBounds); - - GrReducedClip::ElementList::Iter iter(reducedClip.elements()); - int i = 0; - lua_newtable(L); - while(iter.get()) { - SkLua(L).pushClipStackElement(*iter.get()); - iter.next(); - lua_rawseti(L, -2, ++i); - } - // Currently this only returns the element list to lua, not the initial state or result bounds. - // It could return these as additional items on the lua stack. - return 1; -#else - return 0; -#endif -} - static int lcanvas_save(lua_State* L) { lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); return 1; @@ -742,10 +648,6 @@ const struct luaL_Reg gSkCanvas_Methods[] = { { "drawTextBlob", lcanvas_drawTextBlob }, { "getSaveCount", lcanvas_getSaveCount }, { "getTotalMatrix", lcanvas_getTotalMatrix }, - { "getClipStack", lcanvas_getClipStack }, -#if SK_SUPPORT_GPU - { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, -#endif { "save", lcanvas_save }, { "saveLayer", lcanvas_saveLayer }, { "restore", lcanvas_restore }, diff --git a/tools/lua/count_reduced_clipstacks.lua b/tools/lua/count_reduced_clipstacks.lua deleted file mode 100644 index 1ea7a44700..0000000000 --- a/tools/lua/count_reduced_clipstacks.lua +++ /dev/null @@ -1,87 +0,0 @@ -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 diff --git a/tools/lua/dump_clipstack_at_restore.lua b/tools/lua/dump_clipstack_at_restore.lua deleted file mode 100644 index eb5afb9bdb..0000000000 --- a/tools/lua/dump_clipstack_at_restore.lua +++ /dev/null @@ -1,33 +0,0 @@ -function sk_scrape_startcanvas(c, fileName) - canvas = c - clipstack = {} - restoreCount = 0 -end - -function sk_scrape_endcanvas(c, fileName) - canvas = nil -end - -function sk_scrape_accumulate(t) - if (t.verb == "restore") then - restoreCount = restoreCount + 1; - -- io.write("Clip Stack at restore #", restoreCount, ":\n") - io.write("Reduced Clip Stack at restore #", restoreCount, ":\n") - for i = 1, #clipstack do - local element = clipstack[i]; - io.write("\t", element["op"], ", ", element["type"], ", aa:", tostring(element["aa"])) - if (element["type"] == "path") then - io.write(", fill: ", element["path"]:getFillType()) - io.write(", segments: \"", element["path"]:getSegmentTypes(), "\"") - io.write(", convex:", tostring(element["path"]:isConvex())) - end - io.write("\n") - end - io.write("\n") - else - -- clipstack = canvas:getClipStack() - clipstack = canvas:getReducedClipStack() - end -end - -function sk_scrape_summarize() end |