aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkSmallAllocator.h
diff options
context:
space:
mode:
authorGravatar herb <herb@google.com>2016-11-04 08:41:01 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-11-04 08:41:01 -0700
commit12ae597ef54c35e9c447f5f52ecbc153503e8b73 (patch)
treee284d94b5c97fc67684791d393bc80a176f957a9 /src/core/SkSmallAllocator.h
parentbab7945563c2b01f882b37a22b7b3c7ff0e8a3d8 (diff)
Use alignas to force alignment.
Using alignas reduces code and platform specific macros. Use alignas instead of std::aligned_storage because it is unimplemneted in MSVC 2015. Here is the bug from MS: https://connect.microsoft.com/VisualStudio/feedback/details/1559873/std-aligned-storage-cannot-align-type-with-16-byte BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2468243002 TBR=reed@google.com Review-Url: https://codereview.chromium.org/2473143002
Diffstat (limited to 'src/core/SkSmallAllocator.h')
-rw-r--r--src/core/SkSmallAllocator.h16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/core/SkSmallAllocator.h b/src/core/SkSmallAllocator.h
index 9095fa57fc..67afe75691 100644
--- a/src/core/SkSmallAllocator.h
+++ b/src/core/SkSmallAllocator.h
@@ -93,7 +93,7 @@ public:
// There is space in fStorage.
rec->fStorageSize = storageRequired;
rec->fHeapStorage = nullptr;
- rec->fObj = static_cast<void*>(fStorage.fBytes + fStorageUsed);
+ rec->fObj = static_cast<void*>(fStorage + fStorageUsed);
fStorageUsed += storageRequired;
}
rec->fKillProc = DestroyT<T>;
@@ -129,17 +129,11 @@ private:
static_cast<T*>(ptr)->~T();
}
- struct SK_STRUCT_ALIGN(16) Storage {
- // we add kMaxObjects * 15 to account for the worst-case slop, where each allocation wasted
- // 15 bytes (due to forcing each to be 16-byte aligned)
- char fBytes[kTotalBytes + kMaxObjects * 15];
- };
-
- Storage fStorage;
+ alignas(16) char fStorage[kTotalBytes];
// Number of bytes used so far.
- size_t fStorageUsed;
- uint32_t fNumObjects;
- Rec fRecs[kMaxObjects];
+ size_t fStorageUsed;
+ uint32_t fNumObjects;
+ Rec fRecs[kMaxObjects];
};
#endif // SkSmallAllocator_DEFINED