1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/animator/SkDump.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,150 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#include "SkDump.h" 1.14 + 1.15 +#ifdef SK_DUMP_ENABLED 1.16 + 1.17 +#include "SkAnimateMaker.h" 1.18 +#include "SkAnimatorScript.h" 1.19 +#include "SkDisplayEvents.h" 1.20 +#include "SkDisplayList.h" 1.21 +#include "SkString.h" 1.22 + 1.23 +#if SK_USE_CONDENSED_INFO == 0 1.24 + 1.25 +const SkMemberInfo SkDump::fInfo[] = { 1.26 + SK_MEMBER(displayList, Boolean), 1.27 + SK_MEMBER(eventList, Boolean), 1.28 + SK_MEMBER(events, Boolean), 1.29 + SK_MEMBER(groups, Boolean), 1.30 + SK_MEMBER(name, String), 1.31 + SK_MEMBER(posts, Boolean), 1.32 + SK_MEMBER(script, String) 1.33 +}; 1.34 + 1.35 +#endif 1.36 + 1.37 +DEFINE_GET_MEMBER(SkDump); 1.38 + 1.39 +SkDump::SkDump() : displayList(-1), eventList(-1), events(-1), groups(-1), posts(-1) { 1.40 +} 1.41 + 1.42 +bool SkDump::enable(SkAnimateMaker& maker ) { 1.43 + if (script.size() > 0) 1.44 + return evaluate(maker); 1.45 + bool hasAttr = false; 1.46 + if (events > 0) 1.47 + hasAttr |= maker.fDumpEvents = true; 1.48 + if (posts > 0) 1.49 + hasAttr |= maker.fDumpPosts = true; 1.50 + if (groups > 0) 1.51 + hasAttr |= maker.fDumpGConditions = true; 1.52 + if ((hasAttr |= (eventList > 0)) == true) 1.53 + maker.fEvents.dump(maker); 1.54 + if ((hasAttr |= (name.size() > 0)) == true) 1.55 + maker.dump(name.c_str()); 1.56 + if (displayList > 0 || (displayList != 0 && hasAttr == false)) 1.57 + maker.fDisplayList.dump(&maker); 1.58 + return true; 1.59 +} 1.60 + 1.61 +bool SkDump::evaluate(SkAnimateMaker &maker) { 1.62 + SkAnimatorScript scriptEngine(maker, NULL, SkType_Int); 1.63 + SkScriptValue value; 1.64 + const char* cScript = script.c_str(); 1.65 + bool success = scriptEngine.evaluateScript(&cScript, &value); 1.66 + SkDebugf("%*s<dump script=\"%s\" answer=\" ", SkDisplayList::fIndent, "", script.c_str()); 1.67 + if (success == false) { 1.68 + SkDebugf("INVALID\" />\n"); 1.69 + return false; 1.70 + } 1.71 + switch (value.fType) { 1.72 + case SkType_Float: 1.73 + SkDebugf("%g\" />\n", SkScalarToFloat(value.fOperand.fScalar)); 1.74 + break; 1.75 + case SkType_Int: 1.76 + SkDebugf("%d\" />\n", value.fOperand.fS32); 1.77 + break; 1.78 + case SkType_String: 1.79 + SkDebugf("%s\" />\n", value.fOperand.fString->c_str()); 1.80 + break; 1.81 + default: 1.82 + return false; 1.83 + } 1.84 + return true; 1.85 +} 1.86 + 1.87 +bool SkDump::hasEnable() const { 1.88 + return true; 1.89 +} 1.90 + 1.91 +void SkDump::GetEnumString(SkDisplayTypes type, int index, SkString* result) { 1.92 + int badEnum = index; 1.93 + const SkDisplayEnumMap& map = SkAnimatorScript::GetEnumValues(type); 1.94 + const char* str = map.fValues; 1.95 + while (--index >= 0) { 1.96 + str = strchr(str, '|'); 1.97 + if (str == NULL) { 1.98 + result->reset(); 1.99 + result->appendS32(badEnum); 1.100 + return; 1.101 + } 1.102 + str += 1; 1.103 + } 1.104 + const char* end = strchr(str, '|'); 1.105 + if (end == NULL) 1.106 + end = str + strlen(str); 1.107 + result->set(str, end - str); 1.108 +} 1.109 + 1.110 +#else 1.111 + 1.112 +// in the release version, <dump> is allowed, and its attributes are defined, but 1.113 +// are not stored and have no effect 1.114 + 1.115 +#if SK_USE_CONDENSED_INFO == 0 1.116 + 1.117 +enum SkDump_Properties { 1.118 + SK_PROPERTY(displayList), 1.119 + SK_PROPERTY(eventList), 1.120 + SK_PROPERTY(events), 1.121 + SK_PROPERTY(groups), 1.122 + SK_PROPERTY(name), 1.123 + SK_PROPERTY(posts), 1.124 + SK_PROPERTY(script) 1.125 +}; 1.126 + 1.127 +const SkMemberInfo SkDump::fInfo[] = { 1.128 + SK_MEMBER_PROPERTY(displayList, Boolean), 1.129 + SK_MEMBER_PROPERTY(eventList, Boolean), 1.130 + SK_MEMBER_PROPERTY(events, Boolean), 1.131 + SK_MEMBER_PROPERTY(groups, Boolean), 1.132 + SK_MEMBER_PROPERTY(name, String), 1.133 + SK_MEMBER_PROPERTY(posts, Boolean), 1.134 + SK_MEMBER_PROPERTY(script, String) 1.135 +}; 1.136 + 1.137 +#endif 1.138 + 1.139 +DEFINE_GET_MEMBER(SkDump); 1.140 + 1.141 +bool SkDump::enable(SkAnimateMaker&) { 1.142 + return true; 1.143 +} 1.144 + 1.145 +bool SkDump::hasEnable() const { 1.146 + return true; 1.147 +} 1.148 + 1.149 +bool SkDump::setProperty(int index, SkScriptValue&) { 1.150 + return index <= SK_PROPERTY(posts); 1.151 +} 1.152 + 1.153 +#endif