| Index: include/gpu/GrResourceKey.h
|
| diff --git a/include/gpu/GrResourceKey.h b/include/gpu/GrResourceKey.h
|
| index aecdc70c0bdcc1b113a1454c018d39fef194aa57..50a71459290574dd107262274aa96dbdcd1db392 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,24 @@ 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. */
|
| +#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:
|
|
|