Chromium Code Reviews| Index: src/core/SkFlattenable.cpp |
| diff --git a/src/core/SkFlattenable.cpp b/src/core/SkFlattenable.cpp |
| index b4efe91004845cb3b00ebfc8b6d3d1131374fce7..84d4a2aef14ddb08b06967020e507bc18d3e4498 100644 |
| --- a/src/core/SkFlattenable.cpp |
| +++ b/src/core/SkFlattenable.cpp |
| @@ -63,64 +63,82 @@ void SkRefCntSet::decPtr(void* ptr) { |
| /////////////////////////////////////////////////////////////////////////////// |
| /////////////////////////////////////////////////////////////////////////////// |
| -#define MAX_PAIR_COUNT 1024 |
| +#define MAX_ENTRY_COUNT 1024 |
| -struct Pair { |
| +struct Entry { |
| const char* fName; |
| SkFlattenable::Factory fFactory; |
| + SkEffectType fType; |
| }; |
| static int gCount; |
| -static Pair gPairs[MAX_PAIR_COUNT]; |
| +static Entry gEntries[MAX_ENTRY_COUNT]; |
| -void SkFlattenable::Register(const char name[], Factory factory) { |
| +void SkFlattenable::Register(const char name[], Factory factory, SkEffectType type) { |
| SkASSERT(name); |
| SkASSERT(factory); |
| - static bool gOnce; |
| + static bool gOnce = false; |
| if (!gOnce) { |
| gCount = 0; |
| gOnce = true; |
| } |
| - SkASSERT(gCount < MAX_PAIR_COUNT); |
| + SkASSERT(gCount < MAX_ENTRY_COUNT); |
| - gPairs[gCount].fName = name; |
| - gPairs[gCount].fFactory = factory; |
| + gEntries[gCount].fName = name; |
| + gEntries[gCount].fFactory = factory; |
| + gEntries[gCount].fType = type; |
| gCount += 1; |
| } |
| #ifdef SK_DEBUG |
| static void report_no_entries(const char* functionName) { |
| if (!gCount) { |
| - SkDebugf("%s has no registered name/factory pairs." |
| - " Call SkGraphics::Init() at process initialization time.", |
| + SkDebugf("%s has no registered name/factory/type entries." |
| + " Call SkFlattenable::InitializeFlattenablesIfNeeded() before using gEntries", |
| functionName); |
| } |
| } |
| #endif |
| SkFlattenable::Factory SkFlattenable::NameToFactory(const char name[]) { |
| + InitializeFlattenablesIfNeeded(); |
| #ifdef SK_DEBUG |
| report_no_entries(__FUNCTION__); |
| #endif |
| - const Pair* pairs = gPairs; |
| + const Entry* entries = gEntries; |
| for (int i = gCount - 1; i >= 0; --i) { |
| - if (strcmp(pairs[i].fName, name) == 0) { |
| - return pairs[i].fFactory; |
| + if (strcmp(entries[i].fName, name) == 0) { |
| + return entries[i].fFactory; |
| } |
| } |
| return NULL; |
| } |
| +SkEffectType SkFlattenable::NameToType(const char name[]) { |
| + InitializeFlattenablesIfNeeded(); |
| +#ifdef SK_DEBUG |
| + report_no_entries(__FUNCTION__); |
| +#endif |
| + const Entry* entries = gEntries; |
| + for (int i = gCount - 1; i >= 0; --i) { |
| + if (strcmp(entries[i].fName, name) == 0) { |
| + return entries[i].fType; |
| + } |
| + } |
| + return kInvalid_SkEffectType; |
|
sugoi1
2013/10/16 15:05:32
I added the Invalid type to have something to retu
|
| +} |
| + |
| const char* SkFlattenable::FactoryToName(Factory fact) { |
| + InitializeFlattenablesIfNeeded(); |
| #ifdef SK_DEBUG |
| report_no_entries(__FUNCTION__); |
| #endif |
| - const Pair* pairs = gPairs; |
| + const Entry* entries = gEntries; |
| for (int i = gCount - 1; i >= 0; --i) { |
| - if (pairs[i].fFactory == fact) { |
| - return pairs[i].fName; |
| + if (entries[i].fFactory == fact) { |
| + return entries[i].fName; |
| } |
| } |
| return NULL; |