Chromium Code Reviews| Index: include/gpu/GrResourceKey.h |
| diff --git a/include/gpu/GrResourceKey.h b/include/gpu/GrResourceKey.h |
| index aecdc70c0bdcc1b113a1454c018d39fef194aa57..d8fe07f06ec0bc5305d98f86c1c62fe8f094f99d 100644 |
| --- a/include/gpu/GrResourceKey.h |
| +++ b/include/gpu/GrResourceKey.h |
| @@ -10,6 +10,7 @@ |
| #define GrResourceKey_DEFINED |
| #include "GrTypes.h" |
| +#include "SkOnce.h" |
| #include "SkTemplates.h" |
| uint32_t GrResourceKeyHash(const uint32_t* data, size_t size); |
| @@ -266,6 +267,25 @@ public: |
| }; |
| }; |
| +/** |
| + * It is common to need a frequently reused GrUniqueKey where the only requirement is that the key |
| + * is unique. These macros create such a key in a thread safe manner so the key can be truly global |
| + * and only constructed once. |
| + */ |
| + |
| +/** Place outside of function/class definitions. */ |
|
robertphillips
2015/05/04 13:15:59
single line - maybe ?
bsalomon
2015/05/04 15:01:09
Done.
|
| +#define GR_DECLARE_STATIC_UNIQUE_KEY(name) \ |
| + SK_DECLARE_STATIC_ONCE(name##_once) |
| + |
| +/** Place inside function where the key is used. */ |
| +#define GR_DEFINE_STATIC_UNIQUE_KEY(name) \ |
| + static GrUniqueKey name; \ |
| + SkOnce(&name##_once, gr_init_static_unique_key_once, &name) |
| + |
| +static inline void gr_init_static_unique_key_once(GrUniqueKey* key) { |
| + GrUniqueKey::Builder builder(key, GrUniqueKey::GenerateDomain(), 0); |
| +} |
| + |
| // The cache listens for these messages to purge junk resources proactively. |
| class GrUniqueKeyInvalidatedMessage { |
| public: |