Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: base/process/memory_unittest.cc

Issue 1446363003: Deleted OS_WIN and all Windows specific files from base. (Closed) Base URL: https://github.com/domokit/mojo.git@base_tests
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/process/memory.h ('k') | base/process/memory_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #define _CRT_SECURE_NO_WARNINGS 5 #define _CRT_SECURE_NO_WARNINGS
6 6
7 #include "base/process/memory.h" 7 #include "base/process/memory.h"
8 8
9 #include <limits> 9 #include <limits>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/debug/alias.h" 12 #include "base/debug/alias.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 #if defined(OS_WIN)
17 #include <windows.h>
18 #endif
19 #if defined(OS_POSIX) 16 #if defined(OS_POSIX)
20 #include <errno.h> 17 #include <errno.h>
21 #endif 18 #endif
22 #if defined(OS_MACOSX) 19 #if defined(OS_MACOSX)
23 #include <malloc/malloc.h> 20 #include <malloc/malloc.h>
24 #include "base/mac/mac_util.h" 21 #include "base/mac/mac_util.h"
25 #include "base/process/memory_unittest_mac.h" 22 #include "base/process/memory_unittest_mac.h"
26 #endif 23 #endif
27 #if defined(OS_LINUX) 24 #if defined(OS_LINUX)
28 #include <malloc.h> 25 #include <malloc.h>
29 #include "base/test/malloc_wrapper.h" 26 #include "base/test/malloc_wrapper.h"
30 #endif 27 #endif
31 28
32 #if defined(OS_WIN)
33 // HeapQueryInformation function pointer.
34 typedef BOOL (WINAPI* HeapQueryFn) \
35 (HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T, PSIZE_T);
36
37 const int kConstantInModule = 42;
38
39 TEST(ProcessMemoryTest, GetModuleFromAddress) {
40 // Since the unit tests are their own EXE, this should be
41 // equivalent to the EXE's HINSTANCE.
42 //
43 // kConstantInModule is a constant in this file and
44 // therefore within the unit test EXE.
45 EXPECT_EQ(::GetModuleHandle(NULL),
46 base::GetModuleFromAddress(
47 const_cast<int*>(&kConstantInModule)));
48
49 // Any address within the kernel32 module should return
50 // kernel32's HMODULE. Our only assumption here is that
51 // kernel32 is larger than 4 bytes.
52 HMODULE kernel32 = ::GetModuleHandle(L"kernel32.dll");
53 HMODULE kernel32_from_address =
54 base::GetModuleFromAddress(reinterpret_cast<DWORD*>(kernel32) + 1);
55 EXPECT_EQ(kernel32, kernel32_from_address);
56 }
57
58 TEST(ProcessMemoryTest, EnableLFH) {
59 ASSERT_TRUE(base::EnableLowFragmentationHeap());
60 if (IsDebuggerPresent()) {
61 // Under these conditions, LFH can't be enabled. There's no point to test
62 // anything.
63 const char* no_debug_env = getenv("_NO_DEBUG_HEAP");
64 if (!no_debug_env || strcmp(no_debug_env, "1"))
65 return;
66 }
67 HMODULE kernel32 = GetModuleHandle(L"kernel32.dll");
68 ASSERT_TRUE(kernel32 != NULL);
69 HeapQueryFn heap_query = reinterpret_cast<HeapQueryFn>(GetProcAddress(
70 kernel32,
71 "HeapQueryInformation"));
72
73 // On Windows 2000, the function is not exported. This is not a reason to
74 // fail but we won't be able to retrieves information about the heap, so we
75 // should stop here.
76 if (heap_query == NULL)
77 return;
78
79 HANDLE heaps[1024] = { 0 };
80 unsigned number_heaps = GetProcessHeaps(1024, heaps);
81 EXPECT_GT(number_heaps, 0u);
82 for (unsigned i = 0; i < number_heaps; ++i) {
83 ULONG flag = 0;
84 SIZE_T length;
85 ASSERT_NE(0, heap_query(heaps[i],
86 HeapCompatibilityInformation,
87 &flag,
88 sizeof(flag),
89 &length));
90 // If flag is 0, the heap is a standard heap that does not support
91 // look-asides. If flag is 1, the heap supports look-asides. If flag is 2,
92 // the heap is a low-fragmentation heap (LFH). Note that look-asides are not
93 // supported on the LFH.
94
95 // We don't have any documented way of querying the HEAP_NO_SERIALIZE flag.
96 EXPECT_LE(flag, 2u);
97 EXPECT_NE(flag, 1u);
98 }
99 }
100 #endif // defined(OS_WIN)
101
102 #if defined(OS_MACOSX) 29 #if defined(OS_MACOSX)
103 30
104 // For the following Mac tests: 31 // For the following Mac tests:
105 // Note that base::EnableTerminationOnHeapCorruption() is called as part of 32 // Note that base::EnableTerminationOnHeapCorruption() is called as part of
106 // test suite setup and does not need to be done again, else mach_override 33 // test suite setup and does not need to be done again, else mach_override
107 // will fail. 34 // will fail.
108 35
109 TEST(ProcessMemoryTest, MacTerminateOnHeapCorruption) { 36 TEST(ProcessMemoryTest, MacTerminateOnHeapCorruption) {
110 // Assert that freeing an unallocated pointer will crash the process. 37 // Assert that freeing an unallocated pointer will crash the process.
111 char buf[9]; 38 char buf[9];
(...skipping 12 matching lines...) Expand all
124 #endif 51 #endif
125 } 52 }
126 53
127 #endif // defined(OS_MACOSX) 54 #endif // defined(OS_MACOSX)
128 55
129 // Android doesn't implement set_new_handler, so we can't use the 56 // Android doesn't implement set_new_handler, so we can't use the
130 // OutOfMemoryTest cases. OpenBSD does not support these tests either. 57 // OutOfMemoryTest cases. OpenBSD does not support these tests either.
131 // Don't test these on ASan/TSan/MSan configurations: only test the real 58 // Don't test these on ASan/TSan/MSan configurations: only test the real
132 // allocator. 59 // allocator.
133 // TODO(vandebo) make this work on Windows too. 60 // TODO(vandebo) make this work on Windows too.
134 #if !defined(OS_ANDROID) && !defined(OS_OPENBSD) && !defined(OS_WIN) && \ 61 #if !defined(OS_ANDROID) && !defined(OS_OPENBSD) && \
135 !defined(MEMORY_TOOL_REPLACES_ALLOCATOR) 62 !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
136 63
137 #if defined(USE_TCMALLOC) 64 #if defined(USE_TCMALLOC)
138 extern "C" { 65 extern "C" {
139 int tc_set_new_mode(int mode); 66 int tc_set_new_mode(int mode);
140 } 67 }
141 #endif // defined(USE_TCMALLOC) 68 #endif // defined(USE_TCMALLOC)
142 69
143 namespace { 70 namespace {
144 const char *kOomRegex = "Out of memory"; 71 const char *kOomRegex = "Out of memory";
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 EXPECT_TRUE(value_ != NULL); 335 EXPECT_TRUE(value_ != NULL);
409 bytes = static_cast<const char*>(value_); 336 bytes = static_cast<const char*>(value_);
410 for (size_t i = 0; i < (kSafeCallocItems * kSafeCallocSize); ++i) 337 for (size_t i = 0; i < (kSafeCallocItems * kSafeCallocSize); ++i)
411 EXPECT_EQ(0, bytes[i]); 338 EXPECT_EQ(0, bytes[i]);
412 free(value_); 339 free(value_);
413 340
414 EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_)); 341 EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
415 EXPECT_TRUE(value_ == NULL); 342 EXPECT_TRUE(value_ == NULL);
416 } 343 }
417 #endif // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR) 344 #endif // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
418 #endif // !defined(OS_ANDROID) && !defined(OS_OPENBSD) && !defined(OS_WIN) && 345 #endif // !defined(OS_ANDROID) && !defined(OS_OPENBSD) &&
419 // !defined(ADDRESS_SANITIZER) 346 // !defined(ADDRESS_SANITIZER)
OLDNEW
« no previous file with comments | « base/process/memory.h ('k') | base/process/memory_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698