180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDump.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimateMaker.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimatorScript.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayEvents.h" 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayList.h" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDump::fInfo[] = { 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(displayList, Boolean), 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(eventList, Boolean), 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(events, Boolean), 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(groups, Boolean), 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(name, String), 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(posts, Boolean), 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(script, String) 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDump); 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDump::SkDump() : displayList(-1), eventList(-1), events(-1), groups(-1), posts(-1) { 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDump::enable(SkAnimateMaker& maker ) { 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (script.size() > 0) 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return evaluate(maker); 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool hasAttr = false; 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (events > 0) 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru hasAttr |= maker.fDumpEvents = true; 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (posts > 0) 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru hasAttr |= maker.fDumpPosts = true; 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (groups > 0) 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru hasAttr |= maker.fDumpGConditions = true; 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if ((hasAttr |= (eventList > 0)) == true) 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.fEvents.dump(maker); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if ((hasAttr |= (name.size() > 0)) == true) 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.dump(name.c_str()); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (displayList > 0 || (displayList != 0 && hasAttr == false)) 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.fDisplayList.dump(&maker); 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDump::evaluate(SkAnimateMaker &maker) { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimatorScript scriptEngine(maker, NULL, SkType_Int); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue value; 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* cScript = script.c_str(); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool success = scriptEngine.evaluateScript(&cScript, &value); 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%*s<dump script=\"%s\" answer=\" ", SkDisplayList::fIndent, "", script.c_str()); 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (success == false) { 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("INVALID\" />\n"); 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (value.fType) { 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Float: 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%g\" />\n", SkScalarToFloat(value.fOperand.fScalar)); 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Int: 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%d\" />\n", value.fOperand.fS32); 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_String: 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s\" />\n", value.fOperand.fString->c_str()); 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDump::hasEnable() const { 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDump::GetEnumString(SkDisplayTypes type, int index, SkString* result) { 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int badEnum = index; 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkDisplayEnumMap& map = SkAnimatorScript::GetEnumValues(type); 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* str = map.fValues; 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru while (--index >= 0) { 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str = strchr(str, '|'); 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (str == NULL) { 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result->reset(); 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result->appendS32(badEnum); 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str += 1; 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* end = strchr(str, '|'); 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (end == NULL) 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru end = str + strlen(str); 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result->set(str, end - str); 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// in the release version, <dump> is allowed, and its attributes are defined, but 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// are not stored and have no effect 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruenum SkDump_Properties { 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(displayList), 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(eventList), 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(events), 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(groups), 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(name), 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(posts), 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(script) 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDump::fInfo[] = { 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(displayList, Boolean), 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(eventList, Boolean), 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(events, Boolean), 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(groups, Boolean), 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(name, String), 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(posts, Boolean), 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(script, String) 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDump); 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 138096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerbool SkDump::enable(SkAnimateMaker&) { 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDump::hasEnable() const { 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 146096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerbool SkDump::setProperty(int index, SkScriptValue&) { 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return index <= SK_PROPERTY(posts); 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 151