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

Side by Side Diff: src/api.cc

Issue 2895473003: [heap] Simplify and scale ResourceConstraints::ConfigureDefaults. (Closed)
Patch Set: Created 3 years, 7 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 | « include/v8.h ('k') | src/heap/heap.h » ('j') | src/heap/heap.h » ('J')
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 #include "src/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 #include "src/runtime-profiler.h" 62 #include "src/runtime-profiler.h"
63 #include "src/runtime/runtime.h" 63 #include "src/runtime/runtime.h"
64 #include "src/simulator.h" 64 #include "src/simulator.h"
65 #include "src/snapshot/code-serializer.h" 65 #include "src/snapshot/code-serializer.h"
66 #include "src/snapshot/natives.h" 66 #include "src/snapshot/natives.h"
67 #include "src/snapshot/snapshot.h" 67 #include "src/snapshot/snapshot.h"
68 #include "src/startup-data-util.h" 68 #include "src/startup-data-util.h"
69 #include "src/tracing/trace-event.h" 69 #include "src/tracing/trace-event.h"
70 #include "src/trap-handler/trap-handler.h" 70 #include "src/trap-handler/trap-handler.h"
71 #include "src/unicode-inl.h" 71 #include "src/unicode-inl.h"
72 #include "src/utils.h"
72 #include "src/v8.h" 73 #include "src/v8.h"
73 #include "src/v8threads.h" 74 #include "src/v8threads.h"
74 #include "src/value-serializer.h" 75 #include "src/value-serializer.h"
75 #include "src/version.h" 76 #include "src/version.h"
76 #include "src/vm-state-inl.h" 77 #include "src/vm-state-inl.h"
77 #include "src/wasm/wasm-module.h" 78 #include "src/wasm/wasm-module.h"
78 #include "src/wasm/wasm-objects.h" 79 #include "src/wasm/wasm-objects.h"
79 #include "src/wasm/wasm-result.h" 80 #include "src/wasm/wasm-result.h"
80 81
81 namespace v8 { 82 namespace v8 {
(...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 868
868 ResourceConstraints::ResourceConstraints() 869 ResourceConstraints::ResourceConstraints()
869 : max_semi_space_size_(0), 870 : max_semi_space_size_(0),
870 max_old_space_size_(0), 871 max_old_space_size_(0),
871 stack_limit_(NULL), 872 stack_limit_(NULL),
872 code_range_size_(0), 873 code_range_size_(0),
873 max_zone_pool_size_(0) {} 874 max_zone_pool_size_(0) {}
874 875
875 void ResourceConstraints::ConfigureDefaults(uint64_t physical_memory, 876 void ResourceConstraints::ConfigureDefaults(uint64_t physical_memory,
876 uint64_t virtual_memory_limit) { 877 uint64_t virtual_memory_limit) {
877 #if V8_OS_ANDROID 878 set_max_semi_space_size(ComputeMaxSemiSpaceSize(physical_memory));
878 // Android has higher physical memory requirements before raising the maximum 879 set_max_old_space_size(ComputeMaxOldGenerationSize(physical_memory));
879 // heap size limits since it has no swap space. 880 set_max_zone_pool_size(i::AccountingAllocator::kMaxPoolSize);
880 const uint64_t low_limit = 512ul * i::MB;
881 const uint64_t medium_limit = 1ul * i::GB;
882 const uint64_t high_limit = 2ul * i::GB;
883 #else
884 const uint64_t low_limit = 512ul * i::MB;
885 const uint64_t medium_limit = 768ul * i::MB;
886 const uint64_t high_limit = 1ul * i::GB;
887 #endif
888
889 if (physical_memory <= low_limit) {
890 set_max_semi_space_size(i::Heap::kMaxSemiSpaceSizeLowMemoryDevice);
891 set_max_old_space_size(i::Heap::kMaxOldSpaceSizeLowMemoryDevice);
892 set_max_zone_pool_size(i::AccountingAllocator::kMaxPoolSizeLowMemoryDevice);
893 } else if (physical_memory <= medium_limit) {
894 set_max_semi_space_size(i::Heap::kMaxSemiSpaceSizeMediumMemoryDevice);
895 set_max_old_space_size(i::Heap::kMaxOldSpaceSizeMediumMemoryDevice);
896 set_max_zone_pool_size(
897 i::AccountingAllocator::kMaxPoolSizeMediumMemoryDevice);
898 } else if (physical_memory <= high_limit) {
899 set_max_semi_space_size(i::Heap::kMaxSemiSpaceSizeHighMemoryDevice);
900 set_max_old_space_size(i::Heap::kMaxOldSpaceSizeHighMemoryDevice);
901 set_max_zone_pool_size(
902 i::AccountingAllocator::kMaxPoolSizeHighMemoryDevice);
903 } else {
904 set_max_semi_space_size(i::Heap::kMaxSemiSpaceSizeHugeMemoryDevice);
905 set_max_old_space_size(i::Heap::kMaxOldSpaceSizeHugeMemoryDevice);
906 set_max_zone_pool_size(
907 i::AccountingAllocator::kMaxPoolSizeHugeMemoryDevice);
908 }
909 881
910 if (virtual_memory_limit > 0 && i::kRequiresCodeRange) { 882 if (virtual_memory_limit > 0 && i::kRequiresCodeRange) {
911 // Reserve no more than 1/8 of the memory for the code range, but at most 883 // Reserve no more than 1/8 of the memory for the code range, but at most
912 // kMaximalCodeRangeSize. 884 // kMaximalCodeRangeSize.
913 set_code_range_size( 885 set_code_range_size(
914 i::Min(i::kMaximalCodeRangeSize / i::MB, 886 i::Min(i::kMaximalCodeRangeSize / i::MB,
915 static_cast<size_t>((virtual_memory_limit >> 3) / i::MB))); 887 static_cast<size_t>((virtual_memory_limit >> 3) / i::MB)));
916 } 888 }
917 } 889 }
918 890
891 int ResourceConstraints::ComputeMaxOldGenerationSize(uint64_t physical_memory) {
892 const int old_space_physical_memory_factor = 4;
893 int value = i::Max(i::Min(static_cast<int>(physical_memory / i::MB /
894 old_space_physical_memory_factor *
895 i::Heap::kPointerMultiplier),
896 i::Heap::kMaxOldSpaceSize),
897 i::Heap::kMinOldSpaceSize);
898 return value;
899 }
900
901 int ResourceConstraints::ComputeMaxSemiSpaceSize(uint64_t physical_memory) {
902 const uint64_t semi_space_physical_memory_factor = 512;
903 return i::Max(i::Min(static_cast<int>(physical_memory / i::MB /
904 semi_space_physical_memory_factor *
905 i::Heap::kPointerMultiplier),
906 i::Heap::kMaxSemiSpaceSize),
907 i::Heap::kMinSemiSpaceSize);
908 }
919 909
920 void SetResourceConstraints(i::Isolate* isolate, 910 void SetResourceConstraints(i::Isolate* isolate,
921 const ResourceConstraints& constraints) { 911 const ResourceConstraints& constraints) {
922 int semi_space_size = constraints.max_semi_space_size(); 912 int semi_space_size = constraints.max_semi_space_size();
923 int old_space_size = constraints.max_old_space_size(); 913 int old_space_size = constraints.max_old_space_size();
924 size_t code_range_size = constraints.code_range_size(); 914 size_t code_range_size = constraints.code_range_size();
925 size_t max_pool_size = constraints.max_zone_pool_size(); 915 size_t max_pool_size = constraints.max_zone_pool_size();
926 if (semi_space_size != 0 || old_space_size != 0 || code_range_size != 0) { 916 if (semi_space_size != 0 || old_space_size != 0 || code_range_size != 0) {
927 isolate->heap()->ConfigureHeap(semi_space_size, old_space_size, 917 isolate->heap()->ConfigureHeap(semi_space_size, old_space_size,
928 code_range_size); 918 code_range_size);
(...skipping 9583 matching lines...) Expand 10 before | Expand all | Expand 10 after
10512 Address callback_address = 10502 Address callback_address =
10513 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 10503 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
10514 VMState<EXTERNAL> state(isolate); 10504 VMState<EXTERNAL> state(isolate);
10515 ExternalCallbackScope call_scope(isolate, callback_address); 10505 ExternalCallbackScope call_scope(isolate, callback_address);
10516 callback(info); 10506 callback(info);
10517 } 10507 }
10518 10508
10519 10509
10520 } // namespace internal 10510 } // namespace internal
10521 } // namespace v8 10511 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/heap/heap.h » ('j') | src/heap/heap.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698