michael@0:
michael@0: /*
michael@0: * Copyright 2006 The Android Open Source Project
michael@0: *
michael@0: * Use of this source code is governed by a BSD-style license that can be
michael@0: * found in the LICENSE file.
michael@0: */
michael@0:
michael@0:
michael@0: #include "SkDump.h"
michael@0:
michael@0: #ifdef SK_DUMP_ENABLED
michael@0:
michael@0: #include "SkAnimateMaker.h"
michael@0: #include "SkAnimatorScript.h"
michael@0: #include "SkDisplayEvents.h"
michael@0: #include "SkDisplayList.h"
michael@0: #include "SkString.h"
michael@0:
michael@0: #if SK_USE_CONDENSED_INFO == 0
michael@0:
michael@0: const SkMemberInfo SkDump::fInfo[] = {
michael@0: SK_MEMBER(displayList, Boolean),
michael@0: SK_MEMBER(eventList, Boolean),
michael@0: SK_MEMBER(events, Boolean),
michael@0: SK_MEMBER(groups, Boolean),
michael@0: SK_MEMBER(name, String),
michael@0: SK_MEMBER(posts, Boolean),
michael@0: SK_MEMBER(script, String)
michael@0: };
michael@0:
michael@0: #endif
michael@0:
michael@0: DEFINE_GET_MEMBER(SkDump);
michael@0:
michael@0: SkDump::SkDump() : displayList(-1), eventList(-1), events(-1), groups(-1), posts(-1) {
michael@0: }
michael@0:
michael@0: bool SkDump::enable(SkAnimateMaker& maker ) {
michael@0: if (script.size() > 0)
michael@0: return evaluate(maker);
michael@0: bool hasAttr = false;
michael@0: if (events > 0)
michael@0: hasAttr |= maker.fDumpEvents = true;
michael@0: if (posts > 0)
michael@0: hasAttr |= maker.fDumpPosts = true;
michael@0: if (groups > 0)
michael@0: hasAttr |= maker.fDumpGConditions = true;
michael@0: if ((hasAttr |= (eventList > 0)) == true)
michael@0: maker.fEvents.dump(maker);
michael@0: if ((hasAttr |= (name.size() > 0)) == true)
michael@0: maker.dump(name.c_str());
michael@0: if (displayList > 0 || (displayList != 0 && hasAttr == false))
michael@0: maker.fDisplayList.dump(&maker);
michael@0: return true;
michael@0: }
michael@0:
michael@0: bool SkDump::evaluate(SkAnimateMaker &maker) {
michael@0: SkAnimatorScript scriptEngine(maker, NULL, SkType_Int);
michael@0: SkScriptValue value;
michael@0: const char* cScript = script.c_str();
michael@0: bool success = scriptEngine.evaluateScript(&cScript, &value);
michael@0: SkDebugf("%*s\n");
michael@0: return false;
michael@0: }
michael@0: switch (value.fType) {
michael@0: case SkType_Float:
michael@0: SkDebugf("%g\" />\n", SkScalarToFloat(value.fOperand.fScalar));
michael@0: break;
michael@0: case SkType_Int:
michael@0: SkDebugf("%d\" />\n", value.fOperand.fS32);
michael@0: break;
michael@0: case SkType_String:
michael@0: SkDebugf("%s\" />\n", value.fOperand.fString->c_str());
michael@0: break;
michael@0: default:
michael@0: return false;
michael@0: }
michael@0: return true;
michael@0: }
michael@0:
michael@0: bool SkDump::hasEnable() const {
michael@0: return true;
michael@0: }
michael@0:
michael@0: void SkDump::GetEnumString(SkDisplayTypes type, int index, SkString* result) {
michael@0: int badEnum = index;
michael@0: const SkDisplayEnumMap& map = SkAnimatorScript::GetEnumValues(type);
michael@0: const char* str = map.fValues;
michael@0: while (--index >= 0) {
michael@0: str = strchr(str, '|');
michael@0: if (str == NULL) {
michael@0: result->reset();
michael@0: result->appendS32(badEnum);
michael@0: return;
michael@0: }
michael@0: str += 1;
michael@0: }
michael@0: const char* end = strchr(str, '|');
michael@0: if (end == NULL)
michael@0: end = str + strlen(str);
michael@0: result->set(str, end - str);
michael@0: }
michael@0:
michael@0: #else
michael@0:
michael@0: // in the release version, is allowed, and its attributes are defined, but
michael@0: // are not stored and have no effect
michael@0:
michael@0: #if SK_USE_CONDENSED_INFO == 0
michael@0:
michael@0: enum SkDump_Properties {
michael@0: SK_PROPERTY(displayList),
michael@0: SK_PROPERTY(eventList),
michael@0: SK_PROPERTY(events),
michael@0: SK_PROPERTY(groups),
michael@0: SK_PROPERTY(name),
michael@0: SK_PROPERTY(posts),
michael@0: SK_PROPERTY(script)
michael@0: };
michael@0:
michael@0: const SkMemberInfo SkDump::fInfo[] = {
michael@0: SK_MEMBER_PROPERTY(displayList, Boolean),
michael@0: SK_MEMBER_PROPERTY(eventList, Boolean),
michael@0: SK_MEMBER_PROPERTY(events, Boolean),
michael@0: SK_MEMBER_PROPERTY(groups, Boolean),
michael@0: SK_MEMBER_PROPERTY(name, String),
michael@0: SK_MEMBER_PROPERTY(posts, Boolean),
michael@0: SK_MEMBER_PROPERTY(script, String)
michael@0: };
michael@0:
michael@0: #endif
michael@0:
michael@0: DEFINE_GET_MEMBER(SkDump);
michael@0:
michael@0: bool SkDump::enable(SkAnimateMaker&) {
michael@0: return true;
michael@0: }
michael@0:
michael@0: bool SkDump::hasEnable() const {
michael@0: return true;
michael@0: }
michael@0:
michael@0: bool SkDump::setProperty(int index, SkScriptValue&) {
michael@0: return index <= SK_PROPERTY(posts);
michael@0: }
michael@0:
michael@0: #endif