| Index: skia/animator/SkScriptDecompile.cpp
|
| ===================================================================
|
| --- skia/animator/SkScriptDecompile.cpp (revision 16859)
|
| +++ skia/animator/SkScriptDecompile.cpp (working copy)
|
| @@ -1,221 +0,0 @@
|
| -/* libs/graphics/animator/SkScriptDecompile.cpp
|
| -**
|
| -** Copyright 2006, The Android Open Source Project
|
| -**
|
| -** Licensed under the Apache License, Version 2.0 (the "License");
|
| -** you may not use this file except in compliance with the License.
|
| -** You may obtain a copy of the License at
|
| -**
|
| -** http://www.apache.org/licenses/LICENSE-2.0
|
| -**
|
| -** Unless required by applicable law or agreed to in writing, software
|
| -** distributed under the License is distributed on an "AS IS" BASIS,
|
| -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -** See the License for the specific language governing permissions and
|
| -** limitations under the License.
|
| -*/
|
| -
|
| -#include "SkScript2.h"
|
| -
|
| -#ifdef SK_DEBUG
|
| -
|
| -#define TypeOpName(op) {SkScriptEngine2::op, #op }
|
| -
|
| -static const struct OpName {
|
| - SkScriptEngine2::TypeOp fOp;
|
| - const char* fName;
|
| -} gOpNames[] = {
|
| - TypeOpName(kNop), // should never get generated
|
| - TypeOpName(kAccumulatorPop),
|
| - TypeOpName(kAccumulatorPush),
|
| - TypeOpName(kAddInt),
|
| - TypeOpName(kAddScalar),
|
| - TypeOpName(kAddString), // string concat
|
| - TypeOpName(kArrayIndex),
|
| - TypeOpName(kArrayParam),
|
| - TypeOpName(kArrayToken),
|
| - TypeOpName(kBitAndInt),
|
| - TypeOpName(kBitNotInt),
|
| - TypeOpName(kBitOrInt),
|
| - TypeOpName(kBoxToken),
|
| - TypeOpName(kCallback),
|
| - TypeOpName(kDivideInt),
|
| - TypeOpName(kDivideScalar),
|
| - TypeOpName(kDotOperator),
|
| - TypeOpName(kElseOp),
|
| - TypeOpName(kEnd),
|
| - TypeOpName(kEqualInt),
|
| - TypeOpName(kEqualScalar),
|
| - TypeOpName(kEqualString),
|
| - TypeOpName(kFunctionCall),
|
| - TypeOpName(kFlipOpsOp),
|
| - TypeOpName(kFunctionToken),
|
| - TypeOpName(kGreaterEqualInt),
|
| - TypeOpName(kGreaterEqualScalar),
|
| - TypeOpName(kGreaterEqualString),
|
| - TypeOpName(kIfOp),
|
| - TypeOpName(kIntToScalar),
|
| - TypeOpName(kIntToScalar2),
|
| - TypeOpName(kIntToString),
|
| - TypeOpName(kIntToString2),
|
| - TypeOpName(kIntegerAccumulator),
|
| - TypeOpName(kIntegerOperand),
|
| - TypeOpName(kLogicalAndInt),
|
| - TypeOpName(kLogicalNotInt),
|
| - TypeOpName(kLogicalOrInt),
|
| - TypeOpName(kMemberOp),
|
| - TypeOpName(kMinusInt),
|
| - TypeOpName(kMinusScalar),
|
| - TypeOpName(kModuloInt),
|
| - TypeOpName(kModuloScalar),
|
| - TypeOpName(kMultiplyInt),
|
| - TypeOpName(kMultiplyScalar),
|
| - TypeOpName(kPropertyOp),
|
| - TypeOpName(kScalarAccumulator),
|
| - TypeOpName(kScalarOperand),
|
| - TypeOpName(kScalarToInt),
|
| - TypeOpName(kScalarToInt2),
|
| - TypeOpName(kScalarToString),
|
| - TypeOpName(kScalarToString2),
|
| - TypeOpName(kShiftLeftInt),
|
| - TypeOpName(kShiftRightInt), // signed
|
| - TypeOpName(kStringAccumulator),
|
| - TypeOpName(kStringOperand),
|
| - TypeOpName(kStringToInt),
|
| - TypeOpName(kStringToScalar),
|
| - TypeOpName(kStringToScalar2),
|
| - TypeOpName(kStringTrack),
|
| - TypeOpName(kSubtractInt),
|
| - TypeOpName(kSubtractScalar),
|
| - TypeOpName(kToBool),
|
| - TypeOpName(kUnboxToken),
|
| - TypeOpName(kUnboxToken2),
|
| - TypeOpName(kXorInt)
|
| -};
|
| -
|
| -static size_t gOpNamesSize = sizeof(gOpNames) / sizeof(gOpNames[0]);
|
| -
|
| -#define OperandName(op) {SkOperand2::op, #op }
|
| -
|
| -static const struct OperName {
|
| - SkOperand2::OpType fType;
|
| - const char* fName;
|
| -} gOperandNames[] = {
|
| - OperandName(kNoType),
|
| - OperandName(kS32),
|
| - OperandName(kScalar),
|
| - OperandName(kString),
|
| - OperandName(kArray),
|
| - OperandName(kObject)
|
| -};
|
| -
|
| -static size_t gOperandNamesSize = sizeof(gOperandNames) / sizeof(gOperandNames[0]);
|
| -
|
| -// check to see that there are no missing or duplicate entries
|
| -void SkScriptEngine2::ValidateDecompileTable() {
|
| - SkScriptEngine2::TypeOp op = SkScriptEngine2::kNop;
|
| - int index;
|
| - for (index = 0; index < gOpNamesSize; index++) {
|
| - SkASSERT(gOpNames[index].fOp == op);
|
| - op = (SkScriptEngine2::TypeOp) (op + 1);
|
| - }
|
| - index = 0;
|
| - SkOperand2::OpType type = SkOperand2::kNoType;
|
| - SkASSERT(gOperandNames[index].fType == type);
|
| - for (; index < gOperandNamesSize - 1; ) {
|
| - type = (SkOperand2::OpType) (1 << index);
|
| - SkASSERT(gOperandNames[++index].fType == type);
|
| - }
|
| -}
|
| -
|
| -void SkScriptEngine2::decompile(const unsigned char* start, size_t length) {
|
| - SkASSERT(length > 0);
|
| - const unsigned char* opCode = start;
|
| - do {
|
| - SkASSERT(opCode - start < length);
|
| - SkScriptEngine2::TypeOp op = (SkScriptEngine2::TypeOp) *opCode++;
|
| - SkASSERT(op < gOpNamesSize);
|
| - SkDebugf("%d: %s", opCode - start - 1, gOpNames[op].fName);
|
| - switch (op) {
|
| - case SkScriptEngine2::kCallback: {
|
| - int index;
|
| - memcpy(&index, opCode, sizeof(index));
|
| - opCode += sizeof(index);
|
| - SkDebugf(" index: %d", index);
|
| - } break;
|
| - case SkScriptEngine2::kFunctionCall:
|
| - case SkScriptEngine2::kMemberOp:
|
| - case SkScriptEngine2::kPropertyOp: {
|
| - size_t ref;
|
| - memcpy(&ref, opCode, sizeof(ref));
|
| - opCode += sizeof(ref);
|
| - SkDebugf(" ref: %d", ref);
|
| - } break;
|
| - case SkScriptEngine2::kIntegerAccumulator:
|
| - case SkScriptEngine2::kIntegerOperand: {
|
| - int32_t integer;
|
| - memcpy(&integer, opCode, sizeof(integer));
|
| - opCode += sizeof(int32_t);
|
| - SkDebugf(" integer: %d", integer);
|
| - } break;
|
| - case SkScriptEngine2::kScalarAccumulator:
|
| - case SkScriptEngine2::kScalarOperand: {
|
| - SkScalar scalar;
|
| - memcpy(&scalar, opCode, sizeof(scalar));
|
| - opCode += sizeof(SkScalar);
|
| -#ifdef SK_CAN_USE_FLOAT
|
| - SkDebugf(" scalar: %g", SkScalarToFloat(scalar));
|
| -#else
|
| - SkDebugf(" scalar: %x", scalar);
|
| -#endif
|
| - } break;
|
| - case SkScriptEngine2::kStringAccumulator:
|
| - case SkScriptEngine2::kStringOperand: {
|
| - int size;
|
| - SkString* strPtr = new SkString();
|
| - memcpy(&size, opCode, sizeof(size));
|
| - opCode += sizeof(size);
|
| - strPtr->set((char*) opCode, size);
|
| - opCode += size;
|
| - SkDebugf(" string: %s", strPtr->c_str());
|
| - delete strPtr;
|
| - } break;
|
| - case SkScriptEngine2::kBoxToken: {
|
| - SkOperand2::OpType type;
|
| - memcpy(&type, opCode, sizeof(type));
|
| - opCode += sizeof(type);
|
| - int index = 0;
|
| - if (type == 0)
|
| - SkDebugf(" type: %s", gOperandNames[index].fName);
|
| - else {
|
| - while (type != 0) {
|
| - SkASSERT(index + 1 < gOperandNamesSize);
|
| - if (type & (1 << index)) {
|
| - type = (SkOperand2::OpType) (type & ~(1 << index));
|
| - SkDebugf(" type: %s", gOperandNames[index + 1].fName);
|
| - }
|
| - index++;
|
| - }
|
| - }
|
| - } break;
|
| - case SkScriptEngine2::kIfOp:
|
| - case SkScriptEngine2::kLogicalAndInt:
|
| - case SkScriptEngine2::kElseOp:
|
| - case SkScriptEngine2::kLogicalOrInt: {
|
| - int size;
|
| - memcpy(&size, opCode, sizeof(size));
|
| - opCode += sizeof(size);
|
| - SkDebugf(" offset (address): %d (%d)", size, opCode - start + size);
|
| - } break;
|
| - case SkScriptEngine2::kEnd:
|
| - goto done;
|
| - case SkScriptEngine2::kNop:
|
| - SkASSERT(0);
|
| - }
|
| - SkDebugf("\n");
|
| - } while (true);
|
| -done:
|
| - SkDebugf("\n");
|
| -}
|
| -
|
| -#endif
|
|
|