Index: include/core/SkTypes.h |
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h |
index 0d31efc6ccf7dd904dd7232b094aedaddbbc6870..d4405fbaa4a97d4f47ee17c554c88d3cf7abad54 100644 |
--- a/include/core/SkTypes.h |
+++ b/include/core/SkTypes.h |
@@ -620,7 +620,7 @@ public: |
*/ |
SkAutoSMalloc() { |
fPtr = fStorage; |
- fSize = kSize; |
+ fSize = kSizeAdj; |
} |
/** |
@@ -630,7 +630,7 @@ public: |
*/ |
explicit SkAutoSMalloc(size_t size) { |
fPtr = fStorage; |
- fSize = kSize; |
+ fSize = kSizeAdj; |
this->reset(size); |
} |
@@ -661,7 +661,7 @@ public: |
void* reset(size_t size, |
SkAutoMalloc::OnShrink shrink = SkAutoMalloc::kAlloc_OnShrink, |
bool* didChangeAlloc = NULL) { |
- size = (size < kSize) ? kSize : size; |
+ size = (size < kSizeAdj) ? kSizeAdj : size; |
bool alloc = size != fSize && (SkAutoMalloc::kAlloc_OnShrink == shrink || size > fSize); |
if (didChangeAlloc) { |
*didChangeAlloc = alloc; |
@@ -671,7 +671,7 @@ public: |
sk_free(fPtr); |
} |
- if (size == kSize) { |
+ if (size == kSizeAdj) { |
SkASSERT(fPtr != fStorage); // otherwise we lied when setting didChangeAlloc. |
fPtr = fStorage; |
} else { |
@@ -680,15 +680,26 @@ public: |
fSize = size; |
} |
- SkASSERT(fSize >= size && fSize >= kSize); |
- SkASSERT((fPtr == fStorage) || fSize > kSize); |
+ SkASSERT(fSize >= size && fSize >= kSizeAdj); |
+ SkASSERT((fPtr == fStorage) || fSize > kSizeAdj); |
return fPtr; |
} |
private: |
+ // Align to 32 bits. |
mtklein
2016/02/02 03:04:29
Can't hurt to write // Align up to 32 bits.
dogben
2016/02/02 19:39:34
Done.
|
+ static const size_t kSizeAlign32 = ((kSize + 3) >> 2) << 2; |
mtklein
2016/02/02 03:04:29
We do have a nice little macro for this,
static c
dogben
2016/02/02 19:39:34
Done, x2.
|
+#if defined(GOOGLE3) |
+ // Stack frame size is limited for GOOGLE3. 4k is less than the actual max, but some functions |
+ // have multiple large stack allocations. |
+ static const size_t kMaxBytes = 4 * 1024; |
+ static const size_t kSizeAdj = kSize > kMaxBytes ? kMaxBytes : kSizeAlign32; |
+#else |
+ static const size_t kSizeAdj = kSizeAlign32; |
+#endif |
+ |
void* fPtr; |
size_t fSize; // can be larger than the requested size (see kReuse) |
- uint32_t fStorage[(kSize + 3) >> 2]; |
+ uint32_t fStorage[kSizeAdj >> 2]; |
}; |
// Can't guard the constructor because it's a template class. |