| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "GrCacheID.h" |
| #include "SkThread.h" // for sk_atomic_inc |
| |
| uint8_t GrCacheID::GetNextDomain() { |
| // 0 reserved for kUnrestricted_ResourceDomain |
| static int32_t gNextDomain = 1; |
| |
| int32_t domain = sk_atomic_inc(&gNextDomain); |
| if (domain >= 256) { |
| GrCrash("Too many Cache Domains"); |
| } |
| |
| return (uint8_t) domain; |
| } |
| |
| uint8_t GrCacheID::GetNextResourceType() { |
| // 0 reserved for kInvalid_ResourceType |
| static int32_t gNextResourceType = 1; |
| |
| int32_t type = sk_atomic_inc(&gNextResourceType); |
| if (type >= 256) { |
| GrCrash("Too many Cache Resource Types"); |
| } |
| |
| return (uint8_t) type; |
| } |
| |
| void GrCacheID::toRaw(uint32_t v[4]) { |
| GrAssert(4*sizeof(uint32_t) == sizeof(GrCacheID)); |
| |
| v[0] = (uint32_t) (fPublicID & 0xffffffffUL); |
| v[1] = (uint32_t) ((fPublicID >> 32) & 0xffffffffUL); |
| v[2] = fResourceSpecific32; |
| v[3] = fDomain << 24 | |
| fResourceType << 16 | |
| fResourceSpecific16; |
| } |