| OLD | NEW |
| 1 /* Copyright (c) 2007, Google Inc. | 1 /* Copyright (c) 2007, Google Inc. |
| 2 * All rights reserved. | 2 * All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 va_end(ap); | 64 va_end(ap); |
| 65 return r; | 65 return r; |
| 66 } | 66 } |
| 67 #endif | 67 #endif |
| 68 | 68 |
| 69 int getpagesize() { | 69 int getpagesize() { |
| 70 static int pagesize = 0; | 70 static int pagesize = 0; |
| 71 if (pagesize == 0) { | 71 if (pagesize == 0) { |
| 72 SYSTEM_INFO system_info; | 72 SYSTEM_INFO system_info; |
| 73 GetSystemInfo(&system_info); | 73 GetSystemInfo(&system_info); |
| 74 pagesize = system_info.dwPageSize; | 74 pagesize = std::max(system_info.dwPageSize, |
| 75 system_info.dwAllocationGranularity); |
| 75 } | 76 } |
| 76 return pagesize; | 77 return pagesize; |
| 77 } | 78 } |
| 78 | 79 |
| 79 extern "C" PERFTOOLS_DLL_DECL void* __sbrk(ptrdiff_t increment) { | 80 extern "C" PERFTOOLS_DLL_DECL void* __sbrk(ptrdiff_t increment) { |
| 80 LOG(FATAL, "Windows doesn't implement sbrk!\n"); | 81 LOG(FATAL, "Windows doesn't implement sbrk!\n"); |
| 81 return NULL; | 82 return NULL; |
| 82 } | 83 } |
| 83 | 84 |
| 84 // ----------------------------------------------------------------------- | 85 // ----------------------------------------------------------------------- |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 | 182 |
| 182 // ----------------------------------------------------------------------- | 183 // ----------------------------------------------------------------------- |
| 183 // These functions replace system-alloc.cc | 184 // These functions replace system-alloc.cc |
| 184 | 185 |
| 185 static SpinLock alloc_lock(SpinLock::LINKER_INITIALIZED); | 186 static SpinLock alloc_lock(SpinLock::LINKER_INITIALIZED); |
| 186 | 187 |
| 187 // This is mostly like MmapSysAllocator::Alloc, except it does these weird | 188 // This is mostly like MmapSysAllocator::Alloc, except it does these weird |
| 188 // munmap's in the middle of the page, which is forbidden in windows. | 189 // munmap's in the middle of the page, which is forbidden in windows. |
| 189 extern void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, | 190 extern void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, |
| 190 size_t alignment) { | 191 size_t alignment) { |
| 191 // Safest is to make actual_size same as input-size. | |
| 192 if (actual_size) { | |
| 193 *actual_size = size; | |
| 194 } | |
| 195 | |
| 196 SpinLockHolder sh(&alloc_lock); | 192 SpinLockHolder sh(&alloc_lock); |
| 197 // Align on the pagesize boundary | 193 // Align on the pagesize boundary |
| 198 const int pagesize = getpagesize(); | 194 const int pagesize = getpagesize(); |
| 199 if (alignment < pagesize) alignment = pagesize; | 195 if (alignment < pagesize) alignment = pagesize; |
| 200 size = ((size + alignment - 1) / alignment) * alignment; | 196 size = ((size + alignment - 1) / alignment) * alignment; |
| 201 | 197 |
| 198 // Safest is to make actual_size same as input-size. |
| 199 // TODO(antonm): proper processing of alignments |
| 200 // in actual_size and decommitting. |
| 201 if (actual_size) { |
| 202 *actual_size = size; |
| 203 } |
| 204 |
| 202 // Ask for extra memory if alignment > pagesize | 205 // Ask for extra memory if alignment > pagesize |
| 203 size_t extra = 0; | 206 size_t extra = 0; |
| 204 if (alignment > pagesize) { | 207 if (alignment > pagesize) { |
| 205 extra = alignment - pagesize; | 208 extra = alignment - pagesize; |
| 206 } | 209 } |
| 207 | 210 |
| 208 void* result = VirtualAlloc(0, size + extra, | 211 void* result = VirtualAlloc(0, size + extra, |
| 209 MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); | 212 MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); |
| 210 if (result == NULL) | 213 if (result == NULL) |
| 211 return NULL; | 214 return NULL; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 if ((strlen(fname) >= prefix_length) && | 295 if ((strlen(fname) >= prefix_length) && |
| 293 (memcmp(fname, prefix, prefix_length) == 0)) { | 296 (memcmp(fname, prefix, prefix_length) == 0)) { |
| 294 RAW_VLOG(0, "Removing old heap profile %s\n", fname); | 297 RAW_VLOG(0, "Removing old heap profile %s\n", fname); |
| 295 // TODO(csilvers): we really need to unlink dirname + fname | 298 // TODO(csilvers): we really need to unlink dirname + fname |
| 296 _unlink(fname); | 299 _unlink(fname); |
| 297 } | 300 } |
| 298 } while (FindNextFileA(hFind, &found) != FALSE); // A is for Ansi | 301 } while (FindNextFileA(hFind, &found) != FALSE); // A is for Ansi |
| 299 FindClose(hFind); | 302 FindClose(hFind); |
| 300 } | 303 } |
| 301 } | 304 } |
| OLD | NEW |