untangle a number of unittests from libtcmalloc_minimal.so

This commit is contained in:
Aliaksey Kandratsenka 2024-02-07 18:27:30 -05:00
parent cad457ad23
commit 8a147b4833
19 changed files with 339 additions and 330 deletions

View File

@ -149,6 +149,23 @@ WINDOWS_EXTRA = src/windows/preamble_patcher_test.cc \
### Unittests
# Note, we skip this test on mingw (and windows in general). It uses
# unsetenv, which is not available on win32.
if !MINGW
TESTS += unique_path_unittest
unique_path_unittest_SOURCES = src/tests/unique_path_unittest.cc
unique_path_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(AM_LDFLAGS)
unique_path_unittest_LDADD = libcommon.la
endif !MINGW
TESTS += generic_writer_test
generic_writer_test_SOURCES = src/tests/generic_writer_test.cc
generic_writer_test_LDADD = libcommon.la
TESTS += proc_maps_iterator_test
proc_maps_iterator_test_SOURCES = src/tests/proc_maps_iterator_test.cc
proc_maps_iterator_test_LDADD = libcommon.la
if WITH_HEAP_PROFILER_OR_CHECKER
TESTS += low_level_alloc_unittest
low_level_alloc_unittest_SOURCES = src/base/low_level_alloc.cc \
@ -256,7 +273,70 @@ libtcmalloc_minimal_la_CXXFLAGS = -DNO_TCMALLOC_SAMPLES \
libtcmalloc_minimal_la_LDFLAGS = -version-info @TCMALLOC_SO_VERSION@ $(AM_LDFLAGS)
libtcmalloc_minimal_la_LIBADD = libcommon.la
### Unittests
### ------- unit tests for various internal modules of tcmalloc
TESTS += addressmap_unittest
addressmap_unittest_SOURCES = src/tests/addressmap_unittest.cc
addressmap_unittest_LDADD = libcommon.la
TESTS += packed_cache_test
packed_cache_test_SOURCES = src/tests/packed-cache_test.cc
packed_cache_test_LDADD = libcommon.la
TESTS += safe_strerror_test
safe_strerror_test_SOURCES = src/tests/safe_strerror_test.cc \
src/safe_strerror.cc
safe_strerror_test_LDADD = libcommon.la
TESTS += pagemap_unittest
pagemap_unittest_SOURCES = src/tests/pagemap_unittest.cc \
src/internal_logging.cc
pagemap_unittest_LDADD = libcommon.la
# note, it is not so great that page heap testing requires bringing
# almost entirety of tcmalloc (short of tcmalloc.cc), but it is what
# we have.
TESTS += page_heap_test
page_heap_test_SOURCES = src/tests/page_heap_test.cc \
$(MINIMAL_MALLOC_SRC)
page_heap_test_CXXFLAGS = -DNO_HEAP_CHECK -DNO_TCMALLOC_SAMPLES $(AM_CXXFLAGS)
page_heap_test_LDADD = libcommon.la
# note, it is not so great that stack_trace_table testing requires
# bringing almost entirety of tcmalloc (short of tcmalloc.cc), but it
# is what we have.
TESTS += stack_trace_table_test
stack_trace_table_test_SOURCES = src/tests/stack_trace_table_test.cc \
src/stack_trace_table.cc src/internal_logging.cc
stack_trace_table_test_CXXFLAGS = -DSTACK_TRACE_TABLE_IS_TESTED $(AM_CXXFLAGS)
stack_trace_table_test_LDADD = libcommon.la
TESTS += malloc_hook_test
malloc_hook_test_SOURCES = src/tests/malloc_hook_test.cc \
src/tests/testutil.cc \
src/malloc_hook.cc
malloc_hook_test_CXXFLAGS = -DNO_TCMALLOC_SAMPLES $(AM_CXXFLAGS)
malloc_hook_test_LDADD = libcommon.la
if WITH_HEAP_PROFILER_OR_CHECKER
if !MINGW
TESTS += mmap_hook_test
mmap_hook_test_SOURCES = src/tests/mmap_hook_test.cc \
src/mmap_hook.cc
mmap_hook_test_LDADD = libcommon.la
endif !MINGW
endif WITH_HEAP_PROFILER_OR_CHECKER
# sampler_test and sampling_test both require sampling to be turned
# on, which it's not by default. Use the "standard" value of 2^19.
TESTS_ENVIRONMENT += TCMALLOC_SAMPLE_PARAMETER=524288
TESTS += sampler_test
sampler_test_SOURCES = src/tests/sampler_test.cc \
src/sampler.cc
sampler_test_LDADD = libcommon.la
### Unittests for libtcmalloc_minimal.la
TESTS += tcmalloc_minimal_unittest
tcmalloc_minimal_unittest_SOURCES = src/tests/tcmalloc_unittest.cc \
@ -285,30 +365,13 @@ tcmalloc_minimal_large_heap_fragmentation_unittest_SOURCES = src/tests/large_hea
tcmalloc_minimal_large_heap_fragmentation_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
tcmalloc_minimal_large_heap_fragmentation_unittest_LDADD = libtcmalloc_minimal.la
# These all tests components of tcmalloc_minimal
TESTS += addressmap_unittest
addressmap_unittest_SOURCES = src/tests/addressmap_unittest.cc
addressmap_unittest_LDADD = libcommon.la
if !MINGW
TESTS += system_alloc_unittest
system_alloc_unittest_SOURCES = src/tests/system-alloc_unittest.cc
system_alloc_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
system_alloc_unittest_LDADD = libtcmalloc_minimal.la
# Note, we skip this test on mingw (and windows in general). It uses
# unsetenv, which is not available on win32.
TESTS += unique_path_unittest
unique_path_unittest_SOURCES = src/tests/unique_path_unittest.cc
unique_path_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(AM_LDFLAGS)
unique_path_unittest_LDADD = libcommon.la
endif !MINGW
TESTS += packed_cache_test
packed_cache_test_SOURCES = src/tests/packed-cache_test.cc
packed_cache_test_LDADD = libcommon.la
TESTS += frag_unittest
frag_unittest_SOURCES = src/tests/frag_unittest.cc
frag_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
@ -325,21 +388,6 @@ current_allocated_bytes_test_SOURCES = src/tests/current_allocated_bytes_test.cc
current_allocated_bytes_test_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
current_allocated_bytes_test_LDADD = libtcmalloc_minimal.la
TESTS += malloc_hook_test
malloc_hook_test_SOURCES = src/tests/malloc_hook_test.cc \
src/tests/testutil.cc
malloc_hook_test_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
malloc_hook_test_LDADD = libtcmalloc_minimal.la
if WITH_HEAP_PROFILER_OR_CHECKER
if !MINGW
TESTS += mmap_hook_test
mmap_hook_test_SOURCES = src/tests/mmap_hook_test.cc \
src/mmap_hook.cc
mmap_hook_test_LDADD = libcommon.la
endif !MINGW
endif WITH_HEAP_PROFILER_OR_CHECKER
TESTS += malloc_extension_test
malloc_extension_test_SOURCES = src/tests/malloc_extension_test.cc
malloc_extension_test_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
@ -360,39 +408,11 @@ memalign_unittest_LDADD = libtcmalloc_minimal.la
endif !OSX
endif !MINGW
TESTS += page_heap_test
page_heap_test_SOURCES = src/tests/page_heap_test.cc
page_heap_test_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
page_heap_test_LDADD = libtcmalloc_minimal.la
TESTS += pagemap_unittest
pagemap_unittest_SOURCES = src/tests/pagemap_unittest.cc
pagemap_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
pagemap_unittest_LDADD = libtcmalloc_minimal.la
TESTS += safe_strerror_test
safe_strerror_test_SOURCES = src/tests/safe_strerror_test.cc \
src/safe_strerror.cc
safe_strerror_test_LDADD = libcommon.la
TESTS += generic_writer_test
generic_writer_test_SOURCES = src/tests/generic_writer_test.cc
generic_writer_test_LDADD = libcommon.la
TESTS += proc_maps_iterator_test
proc_maps_iterator_test_SOURCES = src/tests/proc_maps_iterator_test.cc
proc_maps_iterator_test_LDADD = libcommon.la
TESTS += realloc_unittest
realloc_unittest_SOURCES = src/tests/realloc_unittest.cc
realloc_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
realloc_unittest_LDADD = libtcmalloc_minimal.la
TESTS += stack_trace_table_test
stack_trace_table_test_SOURCES = src/tests/stack_trace_table_test.cc
stack_trace_table_test_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
stack_trace_table_test_LDADD = libtcmalloc_minimal.la
TESTS += thread_dealloc_unittest
thread_dealloc_unittest_SOURCES = src/tests/thread_dealloc_unittest.cc \
src/tests/testutil.cc
@ -647,15 +667,6 @@ tcmalloc_large_heap_fragmentation_unittest_SOURCES = src/tests/large_heap_fragme
tcmalloc_large_heap_fragmentation_unittest_LDFLAGS = $(TCMALLOC_FLAGS) $(AM_LDFLAGS)
tcmalloc_large_heap_fragmentation_unittest_LDADD = libtcmalloc.la
# sampler_test and sampling_test both require sampling to be turned
# on, which it's not by default. Use the "standard" value of 2^19.
TESTS_ENVIRONMENT += TCMALLOC_SAMPLE_PARAMETER=524288
TESTS += sampler_test
sampler_test_SOURCES = src/tests/sampler_test.cc \
src/sampler.cc
sampler_test_LDADD = libcommon.la
# These unittests often need to run binaries. They're in the current dir
TESTS_ENVIRONMENT += BINDIR=.

View File

@ -51,6 +51,8 @@
#include <stddef.h> // for NULL, size_t
#include <string.h> // for memset
#include <stdint.h>
#include "base/basictypes.h"
#include "internal_logging.h" // for ASSERT
// Single-level array

View File

@ -31,9 +31,10 @@
// ---
// Author: Andrew Fikes
#include <config.h>
#include "config.h"
#include "stack_trace_table.h"
#include <string.h> // for NULL, memset
#include "base/spinlock.h" // for SpinLockHolder
#include "common.h" // for StackTrace
#include "internal_logging.h" // for ASSERT, Log
@ -42,24 +43,45 @@
namespace tcmalloc {
StackTraceTable::StackTraceTable()
: error_(false),
depth_total_(0),
bucket_total_(0),
head_(nullptr) {
std::unique_ptr<void*[]> ProduceStackTracesDump(const StackTrace* (*next_fn)(const void** current_head),
const void* head) {
int depth_total = 0;
int bucket_total = 0;
for (const void* entry = head; entry != nullptr;) {
const StackTrace* trace = next_fn(&entry);
depth_total += trace->depth;
bucket_total++;
}
int out_len = bucket_total * 3 + depth_total + 1;
std::unique_ptr<void*[]> out{new void*[out_len]};
int idx = 0;
for (const void* entry = head; entry != nullptr;) {
const StackTrace* trace = next_fn(&entry);
out[idx++] = reinterpret_cast<void*>(uintptr_t{1}); // count
out[idx++] = reinterpret_cast<void*>(trace->size); // cumulative size
out[idx++] = reinterpret_cast<void*>(trace->depth);
for (int d = 0; d < trace->depth; ++d) {
out[idx++] = trace->stack[d];
}
}
out[idx++] = nullptr;
ASSERT(idx == out_len);
return out;
}
StackTraceTable::~StackTraceTable() {
ASSERT(head_ == nullptr);
}
// In order to avoid dependencies we're only unit-testing function
// above. Stuff below pulls too much and isn't worth own unit-test
// (already covered by sampling_test).
#ifndef STACK_TRACE_TABLE_IS_TESTED
void StackTraceTable::AddTrace(const StackTrace& t) {
if (error_) {
return;
}
depth_total_ += t.depth;
bucket_total_++;
Entry* entry = allocator_.allocate(1);
if (entry == nullptr) {
Log(kLog, __FILE__, __LINE__,
@ -73,40 +95,15 @@ void StackTraceTable::AddTrace(const StackTrace& t) {
}
void** StackTraceTable::ReadStackTracesAndClear() {
void** out = nullptr;
const int out_len = bucket_total_ * 3 + depth_total_ + 1;
if (!error_) {
// Allocate output array
out = new (std::nothrow_t{}) void*[out_len];
if (out == nullptr) {
Log(kLog, __FILE__, __LINE__,
"tcmalloc: allocation failed for stack traces",
out_len * sizeof(*out));
}
}
if (out) {
// Fill output array
int idx = 0;
Entry* entry = head_;
while (entry != NULL) {
out[idx++] = reinterpret_cast<void*>(uintptr_t{1}); // count
out[idx++] = reinterpret_cast<void*>(entry->trace.size); // cumulative size
out[idx++] = reinterpret_cast<void*>(entry->trace.depth);
for (int d = 0; d < entry->trace.depth; ++d) {
out[idx++] = entry->trace.stack[d];
}
entry = entry->next;
}
out[idx++] = NULL;
ASSERT(idx == out_len);
}
std::unique_ptr<void*[]> out = ProduceStackTracesDump(
+[] (const void** current_head) -> const StackTrace* {
const Entry* head = static_cast<const Entry*>(*current_head);
*current_head = head->next;
return &head->trace;
}, head_);
// Clear state
error_ = false;
depth_total_ = 0;
bucket_total_ = 0;
SpinLockHolder h(Static::pageheap_lock());
Entry* entry = head_;
@ -117,7 +114,9 @@ void** StackTraceTable::ReadStackTracesAndClear() {
}
head_ = nullptr;
return out;
return out.release();
}
#endif // STACK_TRACE_TABLE_IS_TESTED
} // namespace tcmalloc

View File

@ -35,19 +35,33 @@
#ifndef TCMALLOC_STACK_TRACE_TABLE_H_
#define TCMALLOC_STACK_TRACE_TABLE_H_
#include "config.h"
#include <config.h>
#include <stdint.h> // for uintptr_t
#include <memory>
#include "common.h"
#include "internal_logging.h"
#include "page_heap_allocator.h"
namespace tcmalloc {
class PERFTOOLS_DLL_DECL StackTraceTable {
// Given snapshot of StackTrace list, new[] list of machine words and
// fill that with profile. See
// MallocExtension::GetStackTraces. next_fn and head are
// representation of generalized iterator over that list. See uses to
// learn how it works.
std::unique_ptr<void*[]> ProduceStackTracesDump(const StackTrace* (*next_fn)(const void** updatable_head),
const void* head);
class StackTraceTable {
public:
// REQUIRES: L < pageheap_lock
StackTraceTable();
~StackTraceTable();
StackTraceTable() = default;
~StackTraceTable() {
ASSERT(head_ == nullptr);
}
// Adds stack trace "t" to table.
//
@ -60,21 +74,14 @@ class PERFTOOLS_DLL_DECL StackTraceTable {
// REQUIRES: L < pageheap_lock
void** ReadStackTracesAndClear();
// Exposed for PageHeapAllocator
// For testing
int depth_total() const { return depth_total_; }
int bucket_total() const { return bucket_total_; }
private:
struct Entry {
Entry* next;
StackTrace trace;
};
bool error_;
int depth_total_;
int bucket_total_;
Entry* head_;
bool error_{};
Entry* head_{};
STLPageHeapAllocator<Entry, void> allocator_;
};

View File

@ -515,53 +515,6 @@ static void PrintStats(int level) {
delete[] buffer;
}
static void** DumpHeapGrowthStackTraces() {
// Count how much space we need
int needed_slots = 0;
{
SpinLockHolder h(Static::pageheap_lock());
for (StackTrace* t = Static::growth_stacks();
t != NULL;
t = reinterpret_cast<StackTrace*>(
t->stack[tcmalloc::kMaxStackDepth-1])) {
needed_slots += 3 + t->depth;
}
needed_slots += 100; // Slop in case list grows
needed_slots += needed_slots/8; // An extra 12.5% slop
}
void** result = new void*[needed_slots];
if (result == NULL) {
Log(kLog, __FILE__, __LINE__,
"tcmalloc: allocation failed for stack trace slots",
needed_slots * sizeof(*result));
return NULL;
}
SpinLockHolder h(Static::pageheap_lock());
int used_slots = 0;
for (StackTrace* t = Static::growth_stacks();
t != NULL;
t = reinterpret_cast<StackTrace*>(
t->stack[tcmalloc::kMaxStackDepth-1])) {
ASSERT(used_slots < needed_slots); // Need to leave room for terminator
if (used_slots + 3 + t->depth >= needed_slots) {
// No more room
break;
}
result[used_slots+0] = reinterpret_cast<void*>(static_cast<uintptr_t>(1));
result[used_slots+1] = reinterpret_cast<void*>(t->size);
result[used_slots+2] = reinterpret_cast<void*>(t->depth);
for (int d = 0; d < t->depth; d++) {
result[used_slots+3+d] = t->stack[d];
}
used_slots += 3 + t->depth;
}
result[used_slots] = reinterpret_cast<void*>(static_cast<uintptr_t>(0));
return result;
}
static void IterateOverRanges(void* arg, MallocExtension::RangeFunction func) {
PageID page = 1; // Some code may assume that page==0 is never used
bool done = false;
@ -648,7 +601,16 @@ class TCMallocImplementation : public MallocExtension {
}
virtual void** ReadHeapGrowthStackTraces() {
return DumpHeapGrowthStackTraces();
// Note: growth stacks are append only, and updated atomically. So
// we can just read them without any locks. And use arbitrarily long
// (since they're never cleared/deleted).
const StackTrace* head = Static::growth_stacks();
return ProduceStackTracesDump(
+[] (const void** current_head) {
const StackTrace* current = static_cast<const StackTrace*>(*current_head);
*current_head = current->stack[tcmalloc::kMaxStackDepth-1];
return current;
}, head).release();
}
virtual size_t GetThreadCacheSize() {

View File

@ -33,23 +33,24 @@
#include "config_for_unittests.h"
#include <gperftools/malloc_hook.h>
#include "malloc_hook-inl.h"
#include <assert.h>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <vector>
#include <mutex>
#include <thread>
#include <chrono>
#include <condition_variable>
#include <mutex>
#include <string>
#include <thread>
#include <vector>
#include <gperftools/malloc_hook.h>
#include "malloc_hook-inl.h"
#include "base/logging.h"
#include "base/sysinfo.h"
#include "base/threading.h"
#include "tests/testutil.h"
#include "base/logging.h"
namespace {
std::vector<void (*)()> g_testlist; // the tests to run
@ -225,25 +226,22 @@ void MultithreadedTestThread(TestHookList* list, int shift,
fprintf(stderr, "thread %d: %s\n", thread_num, message.c_str());
}
static volatile int num_threads_remaining;
static int num_threads_remaining;
static TestHookList list{kTestValue};
static std::mutex threadcount_lock;
static std::condition_variable threadcount_ready;
void MultithreadedTestThreadRunner(int thread_num) {
// Wait for all threads to start running.
{
std::lock_guard ml{threadcount_lock};
std::unique_lock ml{threadcount_lock};
assert(num_threads_remaining > 0);
--num_threads_remaining;
// We should use condvars and the like, but for this test, we'll
// go simple and busy-wait.
while (num_threads_remaining > 0) {
threadcount_lock.unlock();
std::this_thread::sleep_for(std::chrono::seconds(1));
threadcount_lock.lock();
}
threadcount_ready.wait(ml, [&] () { return num_threads_remaining == 0; });
// the last thread to decrement to 0 will wake everyone
threadcount_ready.notify_all();
}
// shift is the smallest number such that (1<<shift) > kHookListMaxValues

View File

@ -23,13 +23,16 @@ namespace {
// TODO: add testing from >1 min_span_size setting.
static bool HaveSystemRelease() {
static bool retval = ([] () {
bool HaveSystemRelease() {
static bool have = ([] () {
size_t actual;
auto ptr = TCMalloc_SystemAlloc(kPageSize, &actual, 0);
return TCMalloc_SystemRelease(ptr, actual);
}());
return retval;
})();
#if __linux__
assert(have);
#endif
return have;
}
static void CheckStats(const tcmalloc::PageHeap* ph,
@ -207,16 +210,8 @@ static void TestPageHeap_Limit() {
} // namespace
int main(int argc, char **argv) {
int main() {
TestPageHeap_Stats();
TestPageHeap_Limit();
printf("PASS\n");
// on windows as part of library destructors we call getenv which
// calls malloc which fails due to our exhausted heap limit. It then
// causes fancy stack overflow because log message we're printing
// for failed allocation somehow cause malloc calls too
//
// To keep us out of trouble we just drop malloc limit
FLAGS_tcmalloc_heap_limit_mb = 0;
return 0;
}

View File

@ -30,20 +30,18 @@
// ---
// Author: Sanjay Ghemawat
#undef NDEBUG
#include "config_for_unittests.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h> // to get intptr_t
#include <sys/types.h>
#include <vector>
#include "base/logging.h"
#include "pagemap.h"
using std::vector;
#include <stdio.h>
#include <stdlib.h>
static void Permute(vector<intptr_t>* elements) {
#include <vector>
#include "base/logging.h"
static void Permute(std::vector<intptr_t>* elements) {
if (elements->empty())
return;
const size_t num_elements = elements->size();
@ -95,7 +93,7 @@ void TestMap(int limit, bool limit_is_below_the_overflow_boundary) {
{ // Test randomized accesses
srand(301); // srand isn't great, but it's portable
vector<intptr_t> elements;
std::vector<intptr_t> elements;
for (intptr_t i = 0; i < static_cast<intptr_t>(limit); i++) elements.push_back(i);
Permute(&elements);

View File

@ -7,43 +7,60 @@
#include "config_for_unittests.h"
#include <stdio.h> // for puts()
#include "stack_trace_table.h"
#include <stdio.h> // for puts()
#include <vector>
#include "base/logging.h"
#include "base/spinlock.h"
#include "static_vars.h"
#undef ARRAYSIZE // may be defined on, eg, windows
#define ARRAYSIZE(a) ( sizeof(a) / sizeof(*(a)) )
class StackTraceTableTestHelper {
public:
using StackTrace = tcmalloc::StackTrace;
static void CheckTracesAndReset(tcmalloc::StackTraceTable* table,
const uintptr_t* expected, int len) {
void** entries = table->ReadStackTracesAndClear();
for (int i = 0; i < len; ++i) {
CHECK_EQ(reinterpret_cast<uintptr_t>(entries[i]), expected[i]);
struct Entry {
const StackTrace trace;
std::unique_ptr<Entry> next{};
Entry(const StackTrace& t) : trace(t) {}
};
using EntryPtr = std::unique_ptr<Entry>;
void AddTrace(const StackTrace& t) {
EntryPtr e{new Entry{t}};
head_.swap(e->next);
head_.swap(e);
}
delete[] entries;
}
static void AddTrace(tcmalloc::StackTraceTable* table,
const tcmalloc::StackTrace& t) {
// Normally we'd need this lock, but since the test is single-threaded
// we don't. I comment it out on windows because the DLL-decl thing
// is really annoying in this case.
#ifndef _WIN32
SpinLockHolder h(tcmalloc::Static::pageheap_lock());
#endif
table->AddTrace(t);
}
std::unique_ptr<void*[]> DumpTraces() {
auto retval = ProduceStackTracesDump(
+[] (const void** current_head) {
const Entry* head = static_cast<const Entry*>(*current_head);
*current_head = head->next.get();
return &head->trace;
}, head_.get());
int main(int argc, char **argv) {
tcmalloc::StackTraceTable table;
head_.reset();
return retval;
}
void CheckTracesAndReset(const uintptr_t* expected, int len) {
std::unique_ptr<void*[]> entries = DumpTraces();
for (int i = 0; i < len; i++) {
CHECK_EQ(reinterpret_cast<uintptr_t>(entries[i]), expected[i]);
}
}
private:
EntryPtr head_;
};
int main() {
StackTraceTableTestHelper h;
// Empty table
CHECK_EQ(table.depth_total(), 0);
CHECK_EQ(table.bucket_total(), 0);
static const uintptr_t k1[] = {0};
CheckTracesAndReset(&table, k1, ARRAYSIZE(k1));
h.CheckTracesAndReset(k1, arraysize(k1));
tcmalloc::StackTrace t1;
t1.size = static_cast<uintptr_t>(1024);
@ -51,7 +68,6 @@ int main(int argc, char **argv) {
t1.stack[0] = reinterpret_cast<void*>(1);
t1.stack[1] = reinterpret_cast<void*>(2);
tcmalloc::StackTrace t2;
t2.size = static_cast<uintptr_t>(512);
t2.depth = static_cast<uintptr_t>(2);
@ -59,19 +75,15 @@ int main(int argc, char **argv) {
t2.stack[1] = reinterpret_cast<void*>(1);
// Table w/ just t1
AddTrace(&table, t1);
CHECK_EQ(table.depth_total(), 2);
CHECK_EQ(table.bucket_total(), 1);
h.AddTrace(t1);
static const uintptr_t k2[] = {1, 1024, 2, 1, 2, 0};
CheckTracesAndReset(&table, k2, ARRAYSIZE(k2));
h.CheckTracesAndReset(k2, arraysize(k2));
// Table w/ t1, t2
AddTrace(&table, t1);
AddTrace(&table, t2);
CHECK_EQ(table.depth_total(), 4);
CHECK_EQ(table.bucket_total(), 2);
h.AddTrace(t1);
h.AddTrace(t2);
static const uintptr_t k3[] = {1, 512, 2, 2, 1, 1, 1024, 2, 1, 2, 0};
CheckTracesAndReset(&table, k3, ARRAYSIZE(k3));
h.CheckTracesAndReset(k3, arraysize(k3));
// Table w/ t1, t3
// Same stack as t1, but w/ different size
@ -81,13 +93,10 @@ int main(int argc, char **argv) {
t3.stack[0] = reinterpret_cast<void*>(1);
t3.stack[1] = reinterpret_cast<void*>(2);
AddTrace(&table, t1);
AddTrace(&table, t3);
CHECK_EQ(table.depth_total(), 4);
CHECK_EQ(table.bucket_total(), 2);
h.AddTrace(t1);
h.AddTrace(t3);
static const uintptr_t k5[] = {1, 2, 2, 1, 2, 1, 1024, 2, 1, 2, 0};
CheckTracesAndReset(&table, k5, ARRAYSIZE(k5));
h.CheckTracesAndReset(k5, arraysize(k5));
puts("PASS");
return 0;
}

View File

@ -118,31 +118,29 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|Win32'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -152,12 +150,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|Win32'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -172,7 +169,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|x64'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -182,12 +179,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NO_TCMALLOC_SAMPLES;PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -202,7 +198,14 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\tests\malloc_hook_test.cc" />
<ClCompile Include="..\..\src\malloc_hook.cc" />
<ClCompile Include="..\..\src\tests\testutil.cc" />
<ClCompile Include="..\..\src\internal_logging.cc" />
<ClCompile Include="..\..\src\base\logging.cc" />
<ClCompile Include="..\..\src\base\spinlock.cc" />
<ClCompile Include="..\..\src\base\spinlock_internal.cc" />
<ClCompile Include="..\..\src\base\sysinfo.cc" />
<ClCompile Include="..\..\src\windows\port.cc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\base\logging.h" />
@ -212,12 +215,6 @@
<ClInclude Include="..\config.h" />
<ClInclude Include="..\..\src\windows\port.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libtcmalloc_minimal\libtcmalloc_minimal.vcxproj">
<Project>{55e2b3ae-3ca1-4db6-97f7-0a044d6f446f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -14,9 +14,30 @@
<ClCompile Include="..\..\src\tests\malloc_hook_test.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\malloc_hook.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\tests\testutil.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\internal_logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\spinlock.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\spinlock_internal.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\sysinfo.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\windows\port.cc">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\gperftools\malloc_hook.h">

View File

@ -118,31 +118,29 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|Win32'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -152,12 +150,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|Win32'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -172,7 +169,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|x64'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -182,12 +179,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -202,6 +198,9 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\tests\packed-cache_test.cc" />
<ClCompile Include="..\..\src\internal_logging.cc" />
<ClCompile Include="..\..\src\base\logging.cc" />
<ClCompile Include="..\..\src\windows\port.cc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\base\basictypes.h" />
@ -218,12 +217,6 @@
<ClInclude Include="..\config.h" />
<ClInclude Include="..\..\src\windows\port.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libtcmalloc_minimal\libtcmalloc_minimal.vcxproj">
<Project>{55e2b3ae-3ca1-4db6-97f7-0a044d6f446f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -14,6 +14,15 @@
<ClCompile Include="..\..\src\tests\packed-cache_test.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\internal_logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\windows\port.cc">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\config.h">

View File

@ -118,7 +118,7 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -129,7 +129,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -140,7 +140,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|Win32'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -154,7 +154,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|Win32'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -169,7 +169,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|x64'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -183,7 +183,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>

View File

@ -118,7 +118,7 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -130,19 +130,18 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|Win32'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -152,12 +151,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|Win32'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -172,7 +170,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|x64'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -182,12 +180,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -202,6 +199,9 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\tests\pagemap_unittest.cc" />
<ClCompile Include="..\..\src\internal_logging.cc" />
<ClCompile Include="..\..\src\base\logging.cc" />
<ClCompile Include="..\..\src\windows\port.cc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\base\logging.h" />
@ -210,12 +210,6 @@
<ClInclude Include="..\config.h" />
<ClInclude Include="..\..\src\windows\port.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libtcmalloc_minimal\libtcmalloc_minimal.vcxproj">
<Project>{55e2b3ae-3ca1-4db6-97f7-0a044d6f446f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -14,6 +14,15 @@
<ClCompile Include="..\..\src\tests\pagemap_unittest.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\internal_logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\windows\port.cc">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\pagemap.h">

View File

@ -179,7 +179,6 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">

View File

@ -118,31 +118,29 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|Win32'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -152,12 +150,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|Win32'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -172,7 +169,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Patch|x64'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
@ -182,12 +179,11 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<ForceSymbolReferences>__tcmalloc;%(ForceSymbolReferences)</ForceSymbolReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Override|x64'">
<ClCompile>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>PERFTOOLS_DLL_DECL=;STACK_TRACE_TABLE_IS_TESTED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
@ -202,6 +198,10 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\tests\stack_trace_table_test.cc" />
<ClCompile Include="..\..\src\stack_trace_table.cc" />
<ClCompile Include="..\..\src\internal_logging.cc" />
<ClCompile Include="..\..\src\base\logging.cc" />
<ClCompile Include="..\..\src\windows\port.cc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\config_for_unittests.h" />
@ -209,12 +209,6 @@
<ClInclude Include="..\config.h" />
<ClInclude Include="..\..\src\windows\port.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libtcmalloc_minimal\libtcmalloc_minimal.vcxproj">
<Project>{55e2b3ae-3ca1-4db6-97f7-0a044d6f446f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -14,6 +14,18 @@
<ClCompile Include="..\..\src\tests\stack_trace_table_test.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\stack_trace_table.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\internal_logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\base\logging.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\windows\port.cc">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\config.h">