Hash :
2cc2a727
Author :
Date :
2018-01-09T17:21:54
common: Add aligned memory allocator. This will be useful for the Vulkan pipeline state cache. This cache wants to pack the pipeline description very carefully into a specific number of bits, using the "alignas" keyword. Using this keyword requires an aligned allocator, which we can lift from Chromium's base/memory submodule. Also includes a unittest copied from Chrome. Bug: angleproject:2163 Change-Id: I25976be4610636db3f43552bba23d823f5a49a24 Reviewed-on: https://chromium-review.googlesource.com/837944 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
//
// Copyright 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// aligned_memory_unittests: Tests for the aligned memory allocator.
// Tests copied from Chrome: src/base/memory/aligned_memory_unittests.cc.
//
#include "common/aligned_memory.h"
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#define EXPECT_ALIGNED(ptr, align) EXPECT_EQ(0u, reinterpret_cast<uintptr_t>(ptr) & (align - 1))
namespace angle
{
// Test that dynamic allocation works as expected.
TEST(AlignedMemoryTest, DynamicAllocation)
{
void *p = AlignedAlloc(8, 8);
EXPECT_TRUE(p);
EXPECT_ALIGNED(p, 8);
AlignedFree(p);
p = AlignedAlloc(8, 16);
EXPECT_TRUE(p);
EXPECT_ALIGNED(p, 16);
AlignedFree(p);
p = AlignedAlloc(8, 256);
EXPECT_TRUE(p);
EXPECT_ALIGNED(p, 256);
AlignedFree(p);
p = AlignedAlloc(8, 4096);
EXPECT_TRUE(p);
EXPECT_ALIGNED(p, 4096);
AlignedFree(p);
}
} // namespace base