| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 the V8 project authors. All rights reserved. | 
|     2 // Redistribution and use in source and binary forms, with or without |     2 // Redistribution and use in source and binary forms, with or without | 
|     3 // modification, are permitted provided that the following conditions are |     3 // modification, are permitted provided that the following conditions are | 
|     4 // met: |     4 // met: | 
|     5 // |     5 // | 
|     6 //     * Redistributions of source code must retain the above copyright |     6 //     * Redistributions of source code must retain the above copyright | 
|     7 //       notice, this list of conditions and the following disclaimer. |     7 //       notice, this list of conditions and the following disclaimer. | 
|     8 //     * Redistributions in binary form must reproduce the above |     8 //     * Redistributions in binary form must reproduce the above | 
|     9 //       copyright notice, this list of conditions and the following |     9 //       copyright notice, this list of conditions and the following | 
|    10 //       disclaimer in the documentation and/or other materials provided |    10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 2163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2174     isolate()->global_handles()->IterateObjectGroups( |  2174     isolate()->global_handles()->IterateObjectGroups( | 
|  2175         visitor, &IsUnmarkedHeapObjectWithHeap); |  2175         visitor, &IsUnmarkedHeapObjectWithHeap); | 
|  2176     MarkImplicitRefGroups(); |  2176     MarkImplicitRefGroups(); | 
|  2177     ProcessWeakMaps(); |  2177     ProcessWeakMaps(); | 
|  2178     work_to_do = !marking_deque_.IsEmpty(); |  2178     work_to_do = !marking_deque_.IsEmpty(); | 
|  2179     ProcessMarkingDeque(); |  2179     ProcessMarkingDeque(); | 
|  2180   } |  2180   } | 
|  2181 } |  2181 } | 
|  2182  |  2182  | 
|  2183  |  2183  | 
|  2184 static StackFrame* TopOptimizedFrame(Isolate* isolate) { |  | 
|  2185   for (StackFrameIterator it(isolate, isolate->thread_local_top()); |  | 
|  2186        !it.done(); it.Advance()) { |  | 
|  2187     if (it.frame()->type() == StackFrame::JAVA_SCRIPT) { |  | 
|  2188       return NULL; |  | 
|  2189     } |  | 
|  2190     if (it.frame()->type() == StackFrame::OPTIMIZED) { |  | 
|  2191       return it.frame(); |  | 
|  2192     } |  | 
|  2193   } |  | 
|  2194   return NULL; |  | 
|  2195 } |  | 
|  2196  |  | 
|  2197  |  | 
|  2198 void MarkCompactCollector::ProcessTopOptimizedFrame(ObjectVisitor* visitor) { |  2184 void MarkCompactCollector::ProcessTopOptimizedFrame(ObjectVisitor* visitor) { | 
|  2199   StackFrame* frame = TopOptimizedFrame(isolate()); |  2185   for (StackFrameIterator it(isolate(), isolate()->thread_local_top()); | 
|  2200   if (frame != NULL) { |  2186        !it.done(); it.Advance()) { | 
|  2201     Code* code = frame->LookupCode(); |  2187     if (it.frame()->type() == StackFrame::JAVA_SCRIPT) { | 
|  2202     if (!code->CanDeoptAt(frame->pc())) { |  2188       return; | 
|  2203       code->CodeIterateBody(visitor); |  | 
|  2204     } |  2189     } | 
|  2205     ProcessMarkingDeque(); |  2190     if (it.frame()->type() == StackFrame::OPTIMIZED) { | 
 |  2191       Code* code = it.frame()->LookupCode(); | 
 |  2192       if (!code->CanDeoptAt(it.frame()->pc())) { | 
 |  2193         code->CodeIterateBody(visitor); | 
 |  2194       } | 
 |  2195       ProcessMarkingDeque(); | 
 |  2196       return; | 
 |  2197     } | 
|  2206   } |  2198   } | 
|  2207 } |  2199 } | 
|  2208  |  2200  | 
|  2209  |  2201  | 
|  2210 void MarkCompactCollector::MarkLiveObjects() { |  2202 void MarkCompactCollector::MarkLiveObjects() { | 
|  2211   GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_MARK); |  2203   GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_MARK); | 
|  2212   // The recursive GC marker detects when it is nearing stack overflow, |  2204   // The recursive GC marker detects when it is nearing stack overflow, | 
|  2213   // and switches to a different marking system.  JS interrupts interfere |  2205   // and switches to a different marking system.  JS interrupts interfere | 
|  2214   // with the C stack limit check. |  2206   // with the C stack limit check. | 
|  2215   PostponeInterruptsScope postpone(isolate()); |  2207   PostponeInterruptsScope postpone(isolate()); | 
| (...skipping 2098 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4314   while (buffer != NULL) { |  4306   while (buffer != NULL) { | 
|  4315     SlotsBuffer* next_buffer = buffer->next(); |  4307     SlotsBuffer* next_buffer = buffer->next(); | 
|  4316     DeallocateBuffer(buffer); |  4308     DeallocateBuffer(buffer); | 
|  4317     buffer = next_buffer; |  4309     buffer = next_buffer; | 
|  4318   } |  4310   } | 
|  4319   *buffer_address = NULL; |  4311   *buffer_address = NULL; | 
|  4320 } |  4312 } | 
|  4321  |  4313  | 
|  4322  |  4314  | 
|  4323 } }  // namespace v8::internal |  4315 } }  // namespace v8::internal | 
| OLD | NEW |