diff options
Diffstat (limited to 'skia/animator/SkDump.cpp')
-rw-r--r-- | skia/animator/SkDump.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/skia/animator/SkDump.cpp b/skia/animator/SkDump.cpp new file mode 100644 index 0000000..5e8b92d --- /dev/null +++ b/skia/animator/SkDump.cpp @@ -0,0 +1,158 @@ +/* libs/graphics/animator/SkDump.cpp +** +** Copyright 2006, Google Inc. +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include "SkDump.h" + +#ifdef SK_DUMP_ENABLED + +#include "SkAnimateMaker.h" +#include "SkAnimatorScript.h" +#include "SkDisplayEvents.h" +#include "SkDisplayList.h" +#include "SkString.h" + +#if SK_USE_CONDENSED_INFO == 0 + +const SkMemberInfo SkDump::fInfo[] = { + SK_MEMBER(displayList, Boolean), + SK_MEMBER(eventList, Boolean), + SK_MEMBER(events, Boolean), + SK_MEMBER(groups, Boolean), + SK_MEMBER(name, String), + SK_MEMBER(posts, Boolean), + SK_MEMBER(script, String) +}; + +#endif + +DEFINE_GET_MEMBER(SkDump); + +SkDump::SkDump() : displayList(-1), eventList(-1), events(-1), groups(-1), posts(-1) { +} + +bool SkDump::enable(SkAnimateMaker& maker ) { + if (script.size() > 0) + return evaluate(maker); + bool hasAttr = false; + if (events > 0) + hasAttr |= maker.fDumpEvents = true; + if (posts > 0) + hasAttr |= maker.fDumpPosts = true; + if (groups > 0) + hasAttr |= maker.fDumpGConditions = true; + if ((hasAttr |= (eventList > 0)) == true) + maker.fEvents.dump(maker); + if ((hasAttr |= (name.size() > 0)) == true) + maker.dump(name.c_str()); + if (displayList > 0 || displayList != 0 && hasAttr == false) + maker.fDisplayList.dump(&maker); + return true; +} + +bool SkDump::evaluate(SkAnimateMaker &maker) { + SkAnimatorScript scriptEngine(maker, NULL, SkType_Int); + SkScriptValue value; + const char* cScript = script.c_str(); + bool success = scriptEngine.evaluateScript(&cScript, &value); + SkDebugf("%*s<dump script=\"%s\" answer=\" ", SkDisplayList::fIndent, "", script.c_str()); + if (success == false) { + SkDebugf("INVALID\" />\n"); + return false; + } + switch (value.fType) { + case SkType_Float: + SkDebugf("%g\" />\n", SkScalarToFloat(value.fOperand.fScalar)); + break; + case SkType_Int: + SkDebugf("%d\" />\n", value.fOperand.fS32); + break; + case SkType_String: + SkDebugf("%s\" />\n", value.fOperand.fString->c_str()); + break; + default: + return false; + } + return true; +} + +bool SkDump::hasEnable() const { + return true; +} + +void SkDump::GetEnumString(SkDisplayTypes type, int index, SkString* result) { + int badEnum = index; + const SkDisplayEnumMap& map = SkAnimatorScript::GetEnumValues(type); + const char* str = map.fValues; + while (--index >= 0) { + str = strchr(str, '|'); + if (str == NULL) { + result->reset(); + result->appendS32(badEnum); + return; + } + str += 1; + } + const char* end = strchr(str, '|'); + if (end == NULL) + end = str + strlen(str); + result->set(str, end - str); +} + +#else + +// in the release version, <dump> is allowed, and its attributes are defined, but +// are not stored and have no effect + +#if SK_USE_CONDENSED_INFO == 0 + +enum SkDump_Properties { + SK_PROPERTY(displayList), + SK_PROPERTY(eventList), + SK_PROPERTY(events), + SK_PROPERTY(groups), + SK_PROPERTY(name), + SK_PROPERTY(posts), + SK_PROPERTY(script) +}; + +const SkMemberInfo SkDump::fInfo[] = { + SK_MEMBER_PROPERTY(displayList, Boolean), + SK_MEMBER_PROPERTY(eventList, Boolean), + SK_MEMBER_PROPERTY(events, Boolean), + SK_MEMBER_PROPERTY(groups, Boolean), + SK_MEMBER_PROPERTY(name, String), + SK_MEMBER_PROPERTY(posts, Boolean), + SK_MEMBER_PROPERTY(script, String) +}; + +#endif + +DEFINE_GET_MEMBER(SkDump); + +bool SkDump::enable(SkAnimateMaker& maker ) { + return true; +} + +bool SkDump::hasEnable() const { + return true; +} + +bool SkDump::setProperty(int index, SkScriptValue& ) { + return index <= SK_PROPERTY(posts); +} + +#endif |