diff options
Diffstat (limited to 'include/core/SkGlobals.h')
-rw-r--r-- | include/core/SkGlobals.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/include/core/SkGlobals.h b/include/core/SkGlobals.h new file mode 100644 index 0000000..8e28290 --- /dev/null +++ b/include/core/SkGlobals.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 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. + */ + +#ifndef SkGlobals_DEFINED +#define SkGlobals_DEFINED + +#include "SkThread.h" + +class SkGlobals { +public: + class Rec { + public: + virtual ~Rec(); + private: + Rec* fNext; + uint32_t fTag; + + friend class SkGlobals; + }; + + /** Look for a matching Rec for the specified tag. If one is found, return it. + If one is not found, if create_proc is null, return null, else + call the proc, and if it returns a Rec, add it to the global list + and return it. + + create_proc can NOT call back into SkGlobals::Find (it would deadlock) + */ + static Rec* Find(uint32_t tag, Rec* (*create_proc)()); + /** Helper for Find, when you want to assert that the Rec is already in the list + */ + static Rec* Get(uint32_t tag) + { + Rec* rec = SkGlobals::Find(tag, NULL); + SkASSERT(rec); + return rec; + } + + // used by porting layer + struct BootStrap { + SkMutex fMutex; + Rec* fHead; + }; + +private: + static void Init(); + static void Term(); + friend class SkGraphics; + + // This last function is implemented in the porting layer + static BootStrap& GetBootStrap(); +}; + +#endif + |