Index: skia/animator/SkBuildCondensedInfo.cpp |
=================================================================== |
--- skia/animator/SkBuildCondensedInfo.cpp (revision 16859) |
+++ skia/animator/SkBuildCondensedInfo.cpp (working copy) |
@@ -1,292 +0,0 @@ |
-/* libs/graphics/animator/SkBuildCondensedInfo.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 "SkTypes.h" |
-#if defined SK_BUILD_CONDENSED |
-#include "SkMemberInfo.h" |
-#if SK_USE_CONDENSED_INFO == 1 |
-#error "SK_USE_CONDENSED_INFO must be zero to build condensed info" |
-#endif |
-#if !defined SK_BUILD_FOR_WIN32 |
-#error "SK_BUILD_FOR_WIN32 must be defined to build condensed info" |
-#endif |
-#include "SkDisplayType.h" |
-#include "SkIntArray.h" |
-#include <stdio.h> |
- |
-SkTDMemberInfoArray gInfos; |
-SkTDIntArray gInfosCounts; |
-SkTDDisplayTypesArray gInfosTypeIDs; |
-SkTDMemberInfoArray gUnknowns; |
-SkTDIntArray gUnknownsCounts; |
- |
-static void AddInfo(SkDisplayTypes type, const SkMemberInfo* info, int infoCount) { |
- SkASSERT(gInfos[type] == NULL); |
- gInfos[type] = info; |
- gInfosCounts[type] = infoCount; |
- *gInfosTypeIDs.append() = type; |
- size_t allStrs = 0; |
- for (int inner = 0; inner < infoCount; inner++) { |
- SkASSERT(info[inner].fCount < 256); |
- int offset = (int) info[inner].fOffset; |
- SkASSERT(offset < 128 && offset > -129); |
- SkASSERT(allStrs < 256); |
- if (info[inner].fType == SkType_BaseClassInfo) { |
- const SkMemberInfo* innerInfo = (const SkMemberInfo*) info[inner].fName; |
- if (gUnknowns.find(innerInfo) == -1) { |
- *gUnknowns.append() = innerInfo; |
- *gUnknownsCounts.append() = info[inner].fCount; |
- } |
- } |
- if (info[inner].fType != SkType_BaseClassInfo && info[inner].fName) |
- allStrs += strlen(info[inner].fName); |
- allStrs += 1; |
- SkASSERT(info[inner].fType < 256); |
- } |
-} |
- |
-static void WriteInfo(FILE* condensed, const SkMemberInfo* info, int infoCount, |
- const char* typeName, bool draw, bool display) { |
- fprintf(condensed, "static const char g%sStrings[] = \n", typeName); |
- int inner; |
- // write strings |
- for (inner = 0; inner < infoCount; inner++) { |
- const char* name = (info[inner].fType != SkType_BaseClassInfo && info[inner].fName) ? |
- info[inner].fName : ""; |
- const char* zero = inner < infoCount - 1 ? "\\0" : ""; |
- fprintf(condensed, "\t\"%s%s\"\n", name, zero); |
- } |
- fprintf(condensed, ";\n\nstatic const SkMemberInfo g%s", draw ? "Draw" : display ? "Display" : ""); |
- fprintf(condensed, "%sInfo[] = {", typeName); |
- size_t nameOffset = 0; |
- // write info tables |
- for (inner = 0; inner < infoCount; inner++) { |
- size_t offset = info[inner].fOffset; |
- if (info[inner].fType == SkType_BaseClassInfo) { |
- offset = (size_t) gInfos.find((const SkMemberInfo* ) info[inner].fName); |
- SkASSERT((int) offset >= 0); |
- offset = gInfosTypeIDs.find((SkDisplayTypes) offset); |
- SkASSERT((int) offset >= 0); |
- } |
- fprintf(condensed, "\n\t{%d, %d, %d, %d}", nameOffset, offset, |
- info[inner].fType, info[inner].fCount); |
- if (inner < infoCount - 1) |
- putc(',', condensed); |
- if (info[inner].fType != SkType_BaseClassInfo && info[inner].fName) |
- nameOffset += strlen(info[inner].fName); |
- nameOffset += 1; |
- } |
- fprintf(condensed, "\n};\n\n"); |
-} |
- |
-static void Get3DName(char* scratch, const char* name) { |
- if (strncmp("skia3d:", name, sizeof("skia3d:") - 1) == 0) { |
- strcpy(scratch, "3D_"); |
- scratch[3]= name[7] & ~0x20; |
- strcpy(&scratch[4], &name[8]); |
- } else { |
- scratch[0] = name[0] & ~0x20; |
- strcpy(&scratch[1], &name[1]); |
- } |
-} |
- |
-int type_compare(const void* a, const void* b) { |
- SkDisplayTypes first = *(SkDisplayTypes*) a; |
- SkDisplayTypes second = *(SkDisplayTypes*) b; |
- return first < second ? -1 : first == second ? 0 : 1; |
-} |
- |
-void SkDisplayType::BuildCondensedInfo(SkAnimateMaker* maker) { |
- gInfos.setCount(kNumberOfTypes); |
- memset(gInfos.begin(), 0, sizeof(gInfos[0]) * kNumberOfTypes); |
- gInfosCounts.setCount(kNumberOfTypes); |
- memset(gInfosCounts.begin(), -1, sizeof(gInfosCounts[0]) * kNumberOfTypes); |
- // check to see if it is condensable |
- int index, infoCount; |
- for (index = 0; index < kTypeNamesSize; index++) { |
- const SkMemberInfo* info = GetMembers(maker, gTypeNames[index].fType, &infoCount); |
- if (info == NULL) |
- continue; |
- AddInfo(gTypeNames[index].fType, info, infoCount); |
- } |
- const SkMemberInfo* extraInfo = |
- SkDisplayType::GetMembers(maker, SkType_3D_Point, &infoCount); |
- AddInfo(SkType_Point, extraInfo, infoCount); |
- AddInfo(SkType_3D_Point, extraInfo, infoCount); |
-// int baseInfos = gInfos.count(); |
- do { |
- SkTDMemberInfoArray oldRefs = gUnknowns; |
- SkTDIntArray oldRefCounts = gUnknownsCounts; |
- gUnknowns.reset(); |
- gUnknownsCounts.reset(); |
- for (index = 0; index < oldRefs.count(); index++) { |
- const SkMemberInfo* info = oldRefs[index]; |
- if (gInfos.find(info) == -1) { |
- int typeIndex = 0; |
- for (; typeIndex < kNumberOfTypes; typeIndex++) { |
- const SkMemberInfo* temp = SkDisplayType::GetMembers( |
- maker, (SkDisplayTypes) typeIndex, NULL); |
- if (temp == info) |
- break; |
- } |
- SkASSERT(typeIndex < kNumberOfTypes); |
- AddInfo((SkDisplayTypes) typeIndex, info, oldRefCounts[index]); |
- } |
- } |
- } while (gUnknowns.count() > 0); |
- qsort(gInfosTypeIDs.begin(), gInfosTypeIDs.count(), sizeof(gInfosTypeIDs[0]), &type_compare); |
-#ifdef SK_DEBUG |
- FILE* condensed = fopen("../../src/animator/SkCondensedDebug.cpp", "w+"); |
- fprintf(condensed, "#include \"SkTypes.h\"\n"); |
- fprintf(condensed, "#ifdef SK_DEBUG\n"); |
-#else |
- FILE* condensed = fopen("../../src/animator/SkCondensedRelease.cpp", "w+"); |
- fprintf(condensed, "#include \"SkTypes.h\"\n"); |
- fprintf(condensed, "#ifdef SK_RELEASE\n"); |
-#endif |
- // write header |
- fprintf(condensed, "// This file was automatically generated.\n"); |
- fprintf(condensed, "// To change it, edit the file with the matching debug info.\n"); |
- fprintf(condensed, "// Then execute SkDisplayType::BuildCondensedInfo() to " |
- "regenerate this file.\n\n"); |
- // write name of memberInfo |
- int typeNameIndex = 0; |
- int unknown = 1; |
- for (index = 0; index < gInfos.count(); index++) { |
- const SkMemberInfo* info = gInfos[index]; |
- if (info == NULL) |
- continue; |
- char scratch[64]; |
- bool drawPrefix, displayPrefix; |
- while (gTypeNames[typeNameIndex].fType < index) |
- typeNameIndex++; |
- if (gTypeNames[typeNameIndex].fType == index) { |
- Get3DName(scratch, gTypeNames[typeNameIndex].fName); |
- drawPrefix = gTypeNames[typeNameIndex].fDrawPrefix; |
- displayPrefix = gTypeNames[typeNameIndex].fDisplayPrefix; |
- } else { |
- sprintf(scratch, "Unknown%d", unknown++); |
- drawPrefix = displayPrefix = false; |
- } |
- WriteInfo(condensed, info, gInfosCounts[index], scratch, drawPrefix, displayPrefix); |
- } |
- // write array of table pointers |
-// start here; |
- fprintf(condensed, "static const SkMemberInfo* const gInfoTables[] = {"); |
- typeNameIndex = 0; |
- unknown = 1; |
- for (index = 0; index < gInfos.count(); index++) { |
- const SkMemberInfo* info = gInfos[index]; |
- if (info == NULL) |
- continue; |
- char scratch[64]; |
- bool drawPrefix, displayPrefix; |
- while (gTypeNames[typeNameIndex].fType < index) |
- typeNameIndex++; |
- if (gTypeNames[typeNameIndex].fType == index) { |
- Get3DName(scratch, gTypeNames[typeNameIndex].fName); |
- drawPrefix = gTypeNames[typeNameIndex].fDrawPrefix; |
- displayPrefix = gTypeNames[typeNameIndex].fDisplayPrefix; |
- } else { |
- sprintf(scratch, "Unknown%d", unknown++); |
- drawPrefix = displayPrefix = false; |
- } |
- fprintf(condensed, "\n\tg"); |
- if (drawPrefix) |
- fprintf(condensed, "Draw"); |
- if (displayPrefix) |
- fprintf(condensed, "Display"); |
- fprintf(condensed, "%sInfo", scratch); |
- if (index < gInfos.count() - 1) |
- putc(',', condensed); |
- } |
- fprintf(condensed, "\n};\n\n"); |
- // write the array of number of entries in the info table |
- fprintf(condensed, "static const unsigned char gInfoCounts[] = {\n\t"); |
- int written = 0; |
- for (index = 0; index < gInfosCounts.count(); index++) { |
- int count = gInfosCounts[index]; |
- if (count < 0) |
- continue; |
- if (written > 0) |
- putc(',', condensed); |
- if (written % 20 == 19) |
- fprintf(condensed, "\n\t"); |
- fprintf(condensed, "%d",count); |
- written++; |
- } |
- fprintf(condensed, "\n};\n\n"); |
- // write array of type ids table entries correspond to |
- fprintf(condensed, "static const unsigned char gTypeIDs[] = {\n\t"); |
- int typeIDCount = 0; |
- typeNameIndex = 0; |
- unknown = 1; |
- for (index = 0; index < gInfosCounts.count(); index++) { |
- const SkMemberInfo* info = gInfos[index]; |
- if (info == NULL) |
- continue; |
- typeIDCount++; |
- char scratch[64]; |
- while (gTypeNames[typeNameIndex].fType < index) |
- typeNameIndex++; |
- if (gTypeNames[typeNameIndex].fType == index) { |
- Get3DName(scratch, gTypeNames[typeNameIndex].fName); |
- } else |
- sprintf(scratch, "Unknown%d", unknown++); |
- fprintf(condensed, "%d%c // %s\n\t", index, |
- index < gInfosCounts.count() ? ',' : ' ', scratch); |
- } |
- fprintf(condensed, "\n};\n\n"); |
- fprintf(condensed, "static const int kTypeIDs = %d;\n\n", typeIDCount); |
- // write the array of string pointers |
- fprintf(condensed, "static const char* const gInfoNames[] = {"); |
- typeNameIndex = 0; |
- unknown = 1; |
- written = 0; |
- for (index = 0; index < gInfosCounts.count(); index++) { |
- const SkMemberInfo* info = gInfos[index]; |
- if (info == NULL) |
- continue; |
- if (written > 0) |
- putc(',', condensed); |
- written++; |
- fprintf(condensed, "\n\tg"); |
- char scratch[64]; |
- while (gTypeNames[typeNameIndex].fType < index) |
- typeNameIndex++; |
- if (gTypeNames[typeNameIndex].fType == index) { |
- Get3DName(scratch, gTypeNames[typeNameIndex].fName); |
- } else |
- sprintf(scratch, "Unknown%d", unknown++); |
- fprintf(condensed, "%sStrings", scratch); |
- } |
- fprintf(condensed, "\n};\n\n"); |
- fprintf(condensed, "#endif\n"); |
- fclose(condensed); |
- gInfos.reset(); |
- gInfosCounts.reset(); |
- gInfosTypeIDs.reset(); |
- gUnknowns.reset(); |
- gUnknownsCounts.reset(); |
-} |
- |
-#elif defined SK_DEBUG |
-#include "SkDisplayType.h" |
-void SkDisplayType::BuildCondensedInfo(SkAnimateMaker* ) {} |
-#endif |
- |
- |