Home | History | Annotate | Download | only in animator
      1 
      2 /*
      3  * Copyright 2006 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #include "SkDump.h"
     11 
     12 #ifdef SK_DUMP_ENABLED
     13 
     14 #include "SkAnimateMaker.h"
     15 #include "SkAnimatorScript.h"
     16 #include "SkDisplayEvents.h"
     17 #include "SkDisplayList.h"
     18 #include "SkString.h"
     19 
     20 #if SK_USE_CONDENSED_INFO == 0
     21 
     22 const SkMemberInfo SkDump::fInfo[] = {
     23     SK_MEMBER(displayList, Boolean),
     24     SK_MEMBER(eventList, Boolean),
     25     SK_MEMBER(events, Boolean),
     26     SK_MEMBER(groups, Boolean),
     27     SK_MEMBER(name, String),
     28     SK_MEMBER(posts, Boolean),
     29     SK_MEMBER(script, String)
     30 };
     31 
     32 #endif
     33 
     34 DEFINE_GET_MEMBER(SkDump);
     35 
     36 SkDump::SkDump() : displayList(-1), eventList(-1), events(-1), groups(-1), posts(-1) {
     37 }
     38 
     39 bool SkDump::enable(SkAnimateMaker& maker ) {
     40     if (script.size() > 0)
     41         return evaluate(maker);
     42     bool hasAttr = false;
     43     if (events > 0)
     44         hasAttr |= maker.fDumpEvents = true;
     45     if (posts > 0)
     46         hasAttr |= maker.fDumpPosts = true;
     47     if (groups > 0)
     48         hasAttr |= maker.fDumpGConditions = true;
     49     if ((hasAttr |= (eventList > 0)) == true)
     50         maker.fEvents.dump(maker);
     51     if ((hasAttr |= (name.size() > 0)) == true)
     52         maker.dump(name.c_str());
     53     if (displayList > 0 || (displayList != 0 && hasAttr == false))
     54         maker.fDisplayList.dump(&maker);
     55     return true;
     56 }
     57 
     58 bool SkDump::evaluate(SkAnimateMaker &maker) {
     59     SkAnimatorScript scriptEngine(maker, NULL, SkType_Int);
     60     SkScriptValue value;
     61     const char* cScript = script.c_str();
     62     bool success = scriptEngine.evaluateScript(&cScript, &value);
     63     SkDebugf("%*s<dump script=\"%s\" answer=\" ", SkDisplayList::fIndent, "", script.c_str());
     64     if (success == false) {
     65         SkDebugf("INVALID\" />\n");
     66         return false;
     67     }
     68     switch (value.fType) {
     69         case SkType_Float:
     70             SkDebugf("%g\" />\n", SkScalarToFloat(value.fOperand.fScalar));
     71             break;
     72         case SkType_Int:
     73             SkDebugf("%d\" />\n", value.fOperand.fS32);
     74             break;
     75         case SkType_String:
     76             SkDebugf("%s\" />\n", value.fOperand.fString->c_str());
     77             break;
     78         default:
     79             return false;
     80     }
     81     return true;
     82 }
     83 
     84 bool SkDump::hasEnable() const {
     85     return true;
     86 }
     87 
     88 void SkDump::GetEnumString(SkDisplayTypes type, int index, SkString* result) {
     89     int badEnum = index;
     90     const SkDisplayEnumMap& map = SkAnimatorScript::GetEnumValues(type);
     91     const char* str  = map.fValues;
     92     while (--index >= 0) {
     93         str = strchr(str, '|');
     94         if (str == NULL) {
     95             result->reset();
     96             result->appendS32(badEnum);
     97             return;
     98         }
     99         str += 1;
    100     }
    101     const char* end = strchr(str, '|');
    102     if (end == NULL)
    103         end = str + strlen(str);
    104     result->set(str, end - str);
    105 }
    106 
    107 #else
    108 
    109 // in the release version, <dump> is allowed, and its attributes are defined, but
    110 // are not stored and have no effect
    111 
    112 #if SK_USE_CONDENSED_INFO == 0
    113 
    114 enum SkDump_Properties {
    115     SK_PROPERTY(displayList),
    116     SK_PROPERTY(eventList),
    117     SK_PROPERTY(events),
    118     SK_PROPERTY(groups),
    119     SK_PROPERTY(name),
    120     SK_PROPERTY(posts),
    121     SK_PROPERTY(script)
    122 };
    123 
    124 const SkMemberInfo SkDump::fInfo[] = {
    125     SK_MEMBER_PROPERTY(displayList, Boolean),
    126     SK_MEMBER_PROPERTY(eventList, Boolean),
    127     SK_MEMBER_PROPERTY(events, Boolean),
    128     SK_MEMBER_PROPERTY(groups, Boolean),
    129     SK_MEMBER_PROPERTY(name, String),
    130     SK_MEMBER_PROPERTY(posts, Boolean),
    131     SK_MEMBER_PROPERTY(script, String)
    132 };
    133 
    134 #endif
    135 
    136 DEFINE_GET_MEMBER(SkDump);
    137 
    138 bool SkDump::enable(SkAnimateMaker&) {
    139     return true;
    140 }
    141 
    142 bool SkDump::hasEnable() const {
    143     return true;
    144 }
    145 
    146 bool SkDump::setProperty(int index, SkScriptValue&) {
    147     return index <= SK_PROPERTY(posts);
    148 }
    149 
    150 #endif
    151