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

Side by Side Diff: src/factory.cc

Issue 2310143002: [heap] Introduce enum of garbage collection reasons. (Closed)
Patch Set: rebase Created 4 years, 3 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 | « src/extensions/statistics-extension.cc ('k') | src/heap/gc-tracer.h » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/factory.h" 5 #include "src/factory.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 19 matching lines...) Expand all
30 return Handle<TYPE>(TYPE::cast(__object__), ISOLATE); \ 30 return Handle<TYPE>(TYPE::cast(__object__), ISOLATE); \
31 } 31 }
32 32
33 #define CALL_HEAP_FUNCTION(ISOLATE, FUNCTION_CALL, TYPE) \ 33 #define CALL_HEAP_FUNCTION(ISOLATE, FUNCTION_CALL, TYPE) \
34 do { \ 34 do { \
35 AllocationResult __allocation__ = FUNCTION_CALL; \ 35 AllocationResult __allocation__ = FUNCTION_CALL; \
36 Object* __object__ = NULL; \ 36 Object* __object__ = NULL; \
37 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \ 37 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
38 /* Two GCs before panicking. In newspace will almost always succeed. */ \ 38 /* Two GCs before panicking. In newspace will almost always succeed. */ \
39 for (int __i__ = 0; __i__ < 2; __i__++) { \ 39 for (int __i__ = 0; __i__ < 2; __i__++) { \
40 (ISOLATE)->heap()->CollectGarbage(__allocation__.RetrySpace(), \ 40 (ISOLATE)->heap()->CollectGarbage( \
41 "allocation failure"); \ 41 __allocation__.RetrySpace(), \
42 GarbageCollectionReason::kAllocationFailure); \
42 __allocation__ = FUNCTION_CALL; \ 43 __allocation__ = FUNCTION_CALL; \
43 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \ 44 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
44 } \ 45 } \
45 (ISOLATE)->counters()->gc_last_resort_from_handles()->Increment(); \ 46 (ISOLATE)->counters()->gc_last_resort_from_handles()->Increment(); \
46 (ISOLATE)->heap()->CollectAllAvailableGarbage("last resort gc"); \ 47 (ISOLATE)->heap()->CollectAllAvailableGarbage( \
48 GarbageCollectionReason::kLastResort); \
47 { \ 49 { \
48 AlwaysAllocateScope __scope__(ISOLATE); \ 50 AlwaysAllocateScope __scope__(ISOLATE); \
49 __allocation__ = FUNCTION_CALL; \ 51 __allocation__ = FUNCTION_CALL; \
50 } \ 52 } \
51 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \ 53 RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
52 /* TODO(1181417): Fix this. */ \ 54 /* TODO(1181417): Fix this. */ \
53 v8::internal::Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); \ 55 v8::internal::Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); \
54 return Handle<TYPE>(); \ 56 return Handle<TYPE>(); \
55 } while (false) 57 } while (false)
56 58
57
58 template<typename T> 59 template<typename T>
59 Handle<T> Factory::New(Handle<Map> map, AllocationSpace space) { 60 Handle<T> Factory::New(Handle<Map> map, AllocationSpace space) {
60 CALL_HEAP_FUNCTION( 61 CALL_HEAP_FUNCTION(
61 isolate(), 62 isolate(),
62 isolate()->heap()->Allocate(*map, space), 63 isolate()->heap()->Allocate(*map, space),
63 T); 64 T);
64 } 65 }
65 66
66 67
67 template<typename T> 68 template<typename T>
(...skipping 2447 matching lines...) Expand 10 before | Expand all | Expand 10 after
2515 Handle<AccessorInfo> prototype = 2516 Handle<AccessorInfo> prototype =
2516 Accessors::FunctionPrototypeInfo(isolate(), attribs); 2517 Accessors::FunctionPrototypeInfo(isolate(), attribs);
2517 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), 2518 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())),
2518 prototype, attribs); 2519 prototype, attribs);
2519 map->AppendDescriptor(&d); 2520 map->AppendDescriptor(&d);
2520 } 2521 }
2521 } 2522 }
2522 2523
2523 } // namespace internal 2524 } // namespace internal
2524 } // namespace v8 2525 } // namespace v8
OLDNEW
« no previous file with comments | « src/extensions/statistics-extension.cc ('k') | src/heap/gc-tracer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698