|
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 |