| OLD | NEW |
| 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 6800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6811 bool fits_into_int32_t = (value & (1 << 31)) == 0; | 6811 bool fits_into_int32_t = (value & (1 << 31)) == 0; |
| 6812 if (fits_into_int32_t) { | 6812 if (fits_into_int32_t) { |
| 6813 return Integer::New(isolate, static_cast<int32_t>(value)); | 6813 return Integer::New(isolate, static_cast<int32_t>(value)); |
| 6814 } | 6814 } |
| 6815 ENTER_V8(internal_isolate); | 6815 ENTER_V8(internal_isolate); |
| 6816 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value); | 6816 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value); |
| 6817 return Utils::IntegerToLocal(result); | 6817 return Utils::IntegerToLocal(result); |
| 6818 } | 6818 } |
| 6819 | 6819 |
| 6820 | 6820 |
| 6821 void Isolate::CollectAllGarbage(const char* gc_reason) { | 6821 void Isolate::ReportExternalAllocationLimitReached() { |
| 6822 i::Heap* heap = reinterpret_cast<i::Isolate*>(this)->heap(); | 6822 i::Heap* heap = reinterpret_cast<i::Isolate*>(this)->heap(); |
| 6823 DCHECK_EQ(heap->gc_state(), i::Heap::NOT_IN_GC); | 6823 DCHECK_EQ(heap->gc_state(), i::Heap::NOT_IN_GC); |
| 6824 if (heap->incremental_marking()->IsStopped()) { | 6824 heap->ReportExternalMemoryPressure( |
| 6825 if (heap->incremental_marking()->CanBeActivated()) { | 6825 "external memory allocation limit reached."); |
| 6826 heap->StartIncrementalMarking( | |
| 6827 i::Heap::kNoGCFlags, | |
| 6828 kGCCallbackFlagSynchronousPhantomCallbackProcessing, gc_reason); | |
| 6829 } else { | |
| 6830 heap->CollectAllGarbage( | |
| 6831 i::Heap::kNoGCFlags, gc_reason, | |
| 6832 kGCCallbackFlagSynchronousPhantomCallbackProcessing); | |
| 6833 } | |
| 6834 } else { | |
| 6835 // Incremental marking is turned on an has already been started. | |
| 6836 | |
| 6837 // TODO(mlippautz): Compute the time slice for incremental marking based on | |
| 6838 // memory pressure. | |
| 6839 double deadline = heap->MonotonicallyIncreasingTimeInMs() + | |
| 6840 i::FLAG_external_allocation_limit_incremental_time; | |
| 6841 heap->AdvanceIncrementalMarking( | |
| 6842 0, deadline, i::IncrementalMarking::StepActions( | |
| 6843 i::IncrementalMarking::GC_VIA_STACK_GUARD, | |
| 6844 i::IncrementalMarking::FORCE_MARKING, | |
| 6845 i::IncrementalMarking::FORCE_COMPLETION)); | |
| 6846 } | |
| 6847 } | 6826 } |
| 6848 | 6827 |
| 6849 | 6828 |
| 6850 HeapProfiler* Isolate::GetHeapProfiler() { | 6829 HeapProfiler* Isolate::GetHeapProfiler() { |
| 6851 i::HeapProfiler* heap_profiler = | 6830 i::HeapProfiler* heap_profiler = |
| 6852 reinterpret_cast<i::Isolate*>(this)->heap_profiler(); | 6831 reinterpret_cast<i::Isolate*>(this)->heap_profiler(); |
| 6853 return reinterpret_cast<HeapProfiler*>(heap_profiler); | 6832 return reinterpret_cast<HeapProfiler*>(heap_profiler); |
| 6854 } | 6833 } |
| 6855 | 6834 |
| 6856 | 6835 |
| (...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8359 Address callback_address = | 8338 Address callback_address = |
| 8360 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8339 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8361 VMState<EXTERNAL> state(isolate); | 8340 VMState<EXTERNAL> state(isolate); |
| 8362 ExternalCallbackScope call_scope(isolate, callback_address); | 8341 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8363 callback(info); | 8342 callback(info); |
| 8364 } | 8343 } |
| 8365 | 8344 |
| 8366 | 8345 |
| 8367 } // namespace internal | 8346 } // namespace internal |
| 8368 } // namespace v8 | 8347 } // namespace v8 |
| OLD | NEW |