f2fd150ea0
BUG= R=johnmccutchan@google.com Review-Url: https://codereview.chromium.org/2666133002 .
81 lines
2.6 KiB
C++
81 lines
2.6 KiB
C++
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "platform/globals.h"
|
|
|
|
#if defined(DART_USE_TCMALLOC) && !defined(PRODUCT)
|
|
|
|
#include "platform/assert.h"
|
|
#include "vm/class_finalizer.h"
|
|
#include "vm/globals.h"
|
|
#include "vm/malloc_hooks.h"
|
|
#include "vm/symbols.h"
|
|
#include "vm/unit_test.h"
|
|
|
|
namespace dart {
|
|
|
|
static void MallocHookTestBufferInitializer(volatile char* buffer,
|
|
uintptr_t size) {
|
|
// Run through the buffer and do something. If we don't do this and the memory
|
|
// in buffer isn't touched, the tcmalloc hooks won't be called.
|
|
for (uintptr_t i = 0; i < size; ++i) {
|
|
buffer[i] = i;
|
|
}
|
|
}
|
|
|
|
|
|
UNIT_TEST_CASE(BasicMallocHookTest) {
|
|
MallocHooks::InitOnce();
|
|
MallocHooks::ResetStats();
|
|
EXPECT_EQ(0L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(0L, MallocHooks::heap_allocated_memory_in_bytes());
|
|
const intptr_t buffer_size = 10;
|
|
char* buffer = new char[buffer_size];
|
|
MallocHookTestBufferInitializer(buffer, buffer_size);
|
|
|
|
EXPECT_EQ(1L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(static_cast<intptr_t>(sizeof(char) * buffer_size),
|
|
MallocHooks::heap_allocated_memory_in_bytes());
|
|
|
|
delete[] buffer;
|
|
EXPECT_EQ(0L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(0L, MallocHooks::heap_allocated_memory_in_bytes());
|
|
MallocHooks::TearDown();
|
|
}
|
|
|
|
|
|
UNIT_TEST_CASE(FreeUnseenMemoryMallocHookTest) {
|
|
MallocHooks::InitOnce();
|
|
const intptr_t pre_hook_buffer_size = 3;
|
|
char* pre_hook_buffer = new char[pre_hook_buffer_size];
|
|
MallocHookTestBufferInitializer(pre_hook_buffer, pre_hook_buffer_size);
|
|
|
|
MallocHooks::ResetStats();
|
|
EXPECT_EQ(0L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(0L, MallocHooks::heap_allocated_memory_in_bytes());
|
|
|
|
const intptr_t buffer_size = 10;
|
|
volatile char* buffer = new char[buffer_size];
|
|
MallocHookTestBufferInitializer(buffer, buffer_size);
|
|
|
|
EXPECT_EQ(1L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(static_cast<intptr_t>(sizeof(char) * buffer_size),
|
|
MallocHooks::heap_allocated_memory_in_bytes());
|
|
|
|
delete[] pre_hook_buffer;
|
|
EXPECT_EQ(1L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(static_cast<intptr_t>(sizeof(char) * buffer_size),
|
|
MallocHooks::heap_allocated_memory_in_bytes());
|
|
|
|
|
|
delete[] buffer;
|
|
EXPECT_EQ(0L, MallocHooks::allocation_count());
|
|
EXPECT_EQ(0L, MallocHooks::heap_allocated_memory_in_bytes());
|
|
MallocHooks::TearDown();
|
|
}
|
|
|
|
}; // namespace dart
|
|
|
|
#endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT)
|