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

Side by Side Diff: src/base/platform/platform.h

Issue 2032393002: [heap] Uncommit unused large object page memory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 months 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 | « no previous file | src/base/platform/platform-linux.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 // This module contains the platform-specific code. This make the rest of the 5 // This module contains the platform-specific code. This make the rest of the
6 // code less dependent on operating system, compilers and runtime libraries. 6 // code less dependent on operating system, compilers and runtime libraries.
7 // This module does specifically not deal with differences between different 7 // This module does specifically not deal with differences between different
8 // processor architecture. 8 // processor architecture.
9 // The platform classes have the same definition for all platforms. The 9 // The platform classes have the same definition for all platforms. The
10 // implementation for a particular platform is put in platform_<os>.cc. 10 // implementation for a particular platform is put in platform_<os>.cc.
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 330
331 // Commits real memory. Returns whether the operation succeeded. 331 // Commits real memory. Returns whether the operation succeeded.
332 bool Commit(void* address, size_t size, bool is_executable); 332 bool Commit(void* address, size_t size, bool is_executable);
333 333
334 // Uncommit real memory. Returns whether the operation succeeded. 334 // Uncommit real memory. Returns whether the operation succeeded.
335 bool Uncommit(void* address, size_t size); 335 bool Uncommit(void* address, size_t size);
336 336
337 // Creates a single guard page at the given address. 337 // Creates a single guard page at the given address.
338 bool Guard(void* address); 338 bool Guard(void* address);
339 339
340 // Releases the tail [free_start, free_start + size] of a previously allocated
ulan 2016/06/06 15:53:15 Should be [free_start, size_]
Hannes Payer (out of office) 2016/06/06 15:56:38 Done.
341 // chunk of memory.
342 void ReleasePartial(void* free_start) {
343 DCHECK(IsReserved());
344 // Notice: Order is important here. The VirtualMemory object might live
345 // inside the allocated region.
346 size_t size = size_ - (reinterpret_cast<size_t>(free_start) -
347 reinterpret_cast<size_t>(address_));
348 CHECK(InVM(free_start, size));
349 DCHECK(free_start != address_);
ulan 2016/06/06 15:53:15 DCHECK_LT(address_, free_start); DCHECK_LT(free_st
Hannes Payer (out of office) 2016/06/06 15:56:38 Done.
350 bool result = ReleasePartialRegion(address_, size_, free_start, size);
351 USE(result);
352 DCHECK(result);
353 size_ -= size;
354 }
355
340 void Release() { 356 void Release() {
341 DCHECK(IsReserved()); 357 DCHECK(IsReserved());
342 // Notice: Order is important here. The VirtualMemory object might live 358 // Notice: Order is important here. The VirtualMemory object might live
343 // inside the allocated region. 359 // inside the allocated region.
344 void* address = address_; 360 void* address = address_;
345 size_t size = size_; 361 size_t size = size_;
346 CHECK(InVM(address, size)); 362 CHECK(InVM(address, size));
347 Reset(); 363 Reset();
348 bool result = ReleaseRegion(address, size); 364 bool result = ReleaseRegion(address, size);
349 USE(result); 365 USE(result);
(...skipping 12 matching lines...) Expand all
362 static void* ReserveRegion(size_t size); 378 static void* ReserveRegion(size_t size);
363 379
364 static bool CommitRegion(void* base, size_t size, bool is_executable); 380 static bool CommitRegion(void* base, size_t size, bool is_executable);
365 381
366 static bool UncommitRegion(void* base, size_t size); 382 static bool UncommitRegion(void* base, size_t size);
367 383
368 // Must be called with a base pointer that has been returned by ReserveRegion 384 // Must be called with a base pointer that has been returned by ReserveRegion
369 // and the same size it was reserved with. 385 // and the same size it was reserved with.
370 static bool ReleaseRegion(void* base, size_t size); 386 static bool ReleaseRegion(void* base, size_t size);
371 387
388 // Must be called with a base pointer that has been returned by ReserveRegion
389 // and the same size it was reserved with.
390 // [free_start, free_start + free_size] is the memory that will be released.
391 static bool ReleasePartialRegion(void* base, size_t size, void* free_start,
392 size_t free_size);
393
372 // Returns true if OS performs lazy commits, i.e. the memory allocation call 394 // Returns true if OS performs lazy commits, i.e. the memory allocation call
373 // defers actual physical memory allocation till the first memory access. 395 // defers actual physical memory allocation till the first memory access.
374 // Otherwise returns false. 396 // Otherwise returns false.
375 static bool HasLazyCommits(); 397 static bool HasLazyCommits();
376 398
377 private: 399 private:
378 bool InVM(void* address, size_t size) { 400 bool InVM(void* address, size_t size) {
379 return (reinterpret_cast<uintptr_t>(address_) <= 401 return (reinterpret_cast<uintptr_t>(address_) <=
380 reinterpret_cast<uintptr_t>(address)) && 402 reinterpret_cast<uintptr_t>(address)) &&
381 ((reinterpret_cast<uintptr_t>(address_) + size_) >= 403 ((reinterpret_cast<uintptr_t>(address_) + size_) >=
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 int stack_size_; 511 int stack_size_;
490 Semaphore* start_semaphore_; 512 Semaphore* start_semaphore_;
491 513
492 DISALLOW_COPY_AND_ASSIGN(Thread); 514 DISALLOW_COPY_AND_ASSIGN(Thread);
493 }; 515 };
494 516
495 } // namespace base 517 } // namespace base
496 } // namespace v8 518 } // namespace v8
497 519
498 #endif // V8_BASE_PLATFORM_PLATFORM_H_ 520 #endif // V8_BASE_PLATFORM_PLATFORM_H_
OLDNEW
« no previous file with comments | « no previous file | src/base/platform/platform-linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698