| 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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 162   int jsframe_count() const { return jsframe_count_; } | 162   int jsframe_count() const { return jsframe_count_; } | 
| 163 | 163 | 
| 164   static Deoptimizer* New(JSFunction* function, | 164   static Deoptimizer* New(JSFunction* function, | 
| 165                           BailoutType type, | 165                           BailoutType type, | 
| 166                           unsigned bailout_id, | 166                           unsigned bailout_id, | 
| 167                           Address from, | 167                           Address from, | 
| 168                           int fp_to_sp_delta, | 168                           int fp_to_sp_delta, | 
| 169                           Isolate* isolate); | 169                           Isolate* isolate); | 
| 170   static Deoptimizer* Grab(Isolate* isolate); | 170   static Deoptimizer* Grab(Isolate* isolate); | 
| 171 | 171 | 
| 172 #ifdef ENABLE_DEBUGGER_SUPPORT |  | 
| 173   // The returned object with information on the optimized frame needs to be | 172   // The returned object with information on the optimized frame needs to be | 
| 174   // freed before another one can be generated. | 173   // freed before another one can be generated. | 
| 175   static DeoptimizedFrameInfo* DebuggerInspectableFrame(JavaScriptFrame* frame, | 174   static DeoptimizedFrameInfo* DebuggerInspectableFrame(JavaScriptFrame* frame, | 
| 176                                                         int jsframe_index, | 175                                                         int jsframe_index, | 
| 177                                                         Isolate* isolate); | 176                                                         Isolate* isolate); | 
| 178   static void DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info, | 177   static void DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info, | 
| 179                                              Isolate* isolate); | 178                                              Isolate* isolate); | 
| 180 #endif |  | 
| 181 | 179 | 
| 182   // Makes sure that there is enough room in the relocation | 180   // Makes sure that there is enough room in the relocation | 
| 183   // information of a code object to perform lazy deoptimization | 181   // information of a code object to perform lazy deoptimization | 
| 184   // patching. If there is not enough room a new relocation | 182   // patching. If there is not enough room a new relocation | 
| 185   // information object is allocated and comments are added until it | 183   // information object is allocated and comments are added until it | 
| 186   // is big enough. | 184   // is big enough. | 
| 187   static void EnsureRelocSpaceForLazyDeoptimization(Handle<Code> code); | 185   static void EnsureRelocSpaceForLazyDeoptimization(Handle<Code> code); | 
| 188 | 186 | 
| 189   // Deoptimize the function now. Its current optimized code will never be run | 187   // Deoptimize the function now. Its current optimized code will never be run | 
| 190   // again and any activations of the optimized code will get deoptimized when | 188   // again and any activations of the optimized code will get deoptimized when | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 205   // Visit all the known optimized functions in a given isolate. | 203   // Visit all the known optimized functions in a given isolate. | 
| 206   static void VisitAllOptimizedFunctions( | 204   static void VisitAllOptimizedFunctions( | 
| 207       Isolate* isolate, OptimizedFunctionVisitor* visitor); | 205       Isolate* isolate, OptimizedFunctionVisitor* visitor); | 
| 208 | 206 | 
| 209   // The size in bytes of the code required at a lazy deopt patch site. | 207   // The size in bytes of the code required at a lazy deopt patch site. | 
| 210   static int patch_size(); | 208   static int patch_size(); | 
| 211 | 209 | 
| 212   ~Deoptimizer(); | 210   ~Deoptimizer(); | 
| 213 | 211 | 
| 214   void MaterializeHeapObjects(JavaScriptFrameIterator* it); | 212   void MaterializeHeapObjects(JavaScriptFrameIterator* it); | 
| 215 #ifdef ENABLE_DEBUGGER_SUPPORT | 213 | 
| 216   void MaterializeHeapNumbersForDebuggerInspectableFrame( | 214   void MaterializeHeapNumbersForDebuggerInspectableFrame( | 
| 217       Address parameters_top, | 215       Address parameters_top, | 
| 218       uint32_t parameters_size, | 216       uint32_t parameters_size, | 
| 219       Address expressions_top, | 217       Address expressions_top, | 
| 220       uint32_t expressions_size, | 218       uint32_t expressions_size, | 
| 221       DeoptimizedFrameInfo* info); | 219       DeoptimizedFrameInfo* info); | 
| 222 #endif |  | 
| 223 | 220 | 
| 224   static void ComputeOutputFrames(Deoptimizer* deoptimizer); | 221   static void ComputeOutputFrames(Deoptimizer* deoptimizer); | 
| 225 | 222 | 
| 226 | 223 | 
| 227   enum GetEntryMode { | 224   enum GetEntryMode { | 
| 228     CALCULATE_ENTRY_ADDRESS, | 225     CALCULATE_ENTRY_ADDRESS, | 
| 229     ENSURE_ENTRY_CODE | 226     ENSURE_ENTRY_CODE | 
| 230   }; | 227   }; | 
| 231 | 228 | 
| 232 | 229 | 
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 637 | 634 | 
| 638   int ComputeFixedSize(); | 635   int ComputeFixedSize(); | 
| 639 }; | 636 }; | 
| 640 | 637 | 
| 641 | 638 | 
| 642 class DeoptimizerData { | 639 class DeoptimizerData { | 
| 643  public: | 640  public: | 
| 644   explicit DeoptimizerData(MemoryAllocator* allocator); | 641   explicit DeoptimizerData(MemoryAllocator* allocator); | 
| 645   ~DeoptimizerData(); | 642   ~DeoptimizerData(); | 
| 646 | 643 | 
| 647 #ifdef ENABLE_DEBUGGER_SUPPORT |  | 
| 648   void Iterate(ObjectVisitor* v); | 644   void Iterate(ObjectVisitor* v); | 
| 649 #endif |  | 
| 650 | 645 | 
| 651  private: | 646  private: | 
| 652   MemoryAllocator* allocator_; | 647   MemoryAllocator* allocator_; | 
| 653   int deopt_entry_code_entries_[Deoptimizer::kBailoutTypesWithCodeEntry]; | 648   int deopt_entry_code_entries_[Deoptimizer::kBailoutTypesWithCodeEntry]; | 
| 654   MemoryChunk* deopt_entry_code_[Deoptimizer::kBailoutTypesWithCodeEntry]; | 649   MemoryChunk* deopt_entry_code_[Deoptimizer::kBailoutTypesWithCodeEntry]; | 
| 655 | 650 | 
| 656 #ifdef ENABLE_DEBUGGER_SUPPORT |  | 
| 657   DeoptimizedFrameInfo* deoptimized_frame_info_; | 651   DeoptimizedFrameInfo* deoptimized_frame_info_; | 
| 658 #endif |  | 
| 659 | 652 | 
| 660   Deoptimizer* current_; | 653   Deoptimizer* current_; | 
| 661 | 654 | 
| 662   friend class Deoptimizer; | 655   friend class Deoptimizer; | 
| 663 | 656 | 
| 664   DISALLOW_COPY_AND_ASSIGN(DeoptimizerData); | 657   DISALLOW_COPY_AND_ASSIGN(DeoptimizerData); | 
| 665 }; | 658 }; | 
| 666 | 659 | 
| 667 | 660 | 
| 668 class TranslationBuffer BASE_EMBEDDED { | 661 class TranslationBuffer BASE_EMBEDDED { | 
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 912   Handle<FixedArray> GetStackEntries(); | 905   Handle<FixedArray> GetStackEntries(); | 
| 913   Handle<FixedArray> EnsureStackEntries(int size); | 906   Handle<FixedArray> EnsureStackEntries(int size); | 
| 914 | 907 | 
| 915   int StackIdToIndex(Address fp); | 908   int StackIdToIndex(Address fp); | 
| 916 | 909 | 
| 917   Isolate* isolate_; | 910   Isolate* isolate_; | 
| 918   List<Address> frame_fps_; | 911   List<Address> frame_fps_; | 
| 919 }; | 912 }; | 
| 920 | 913 | 
| 921 | 914 | 
| 922 #ifdef ENABLE_DEBUGGER_SUPPORT |  | 
| 923 // Class used to represent an unoptimized frame when the debugger | 915 // Class used to represent an unoptimized frame when the debugger | 
| 924 // needs to inspect a frame that is part of an optimized frame. The | 916 // needs to inspect a frame that is part of an optimized frame. The | 
| 925 // internally used FrameDescription objects are not GC safe so for use | 917 // internally used FrameDescription objects are not GC safe so for use | 
| 926 // by the debugger frame information is copied to an object of this type. | 918 // by the debugger frame information is copied to an object of this type. | 
| 927 // Represents parameters in unadapted form so their number might mismatch | 919 // Represents parameters in unadapted form so their number might mismatch | 
| 928 // formal parameter count. | 920 // formal parameter count. | 
| 929 class DeoptimizedFrameInfo : public Malloced { | 921 class DeoptimizedFrameInfo : public Malloced { | 
| 930  public: | 922  public: | 
| 931   DeoptimizedFrameInfo(Deoptimizer* deoptimizer, | 923   DeoptimizedFrameInfo(Deoptimizer* deoptimizer, | 
| 932                        int frame_index, | 924                        int frame_index, | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 986   JSFunction* function_; | 978   JSFunction* function_; | 
| 987   bool has_construct_stub_; | 979   bool has_construct_stub_; | 
| 988   int parameters_count_; | 980   int parameters_count_; | 
| 989   int expression_count_; | 981   int expression_count_; | 
| 990   Object** parameters_; | 982   Object** parameters_; | 
| 991   Object** expression_stack_; | 983   Object** expression_stack_; | 
| 992   int source_position_; | 984   int source_position_; | 
| 993 | 985 | 
| 994   friend class Deoptimizer; | 986   friend class Deoptimizer; | 
| 995 }; | 987 }; | 
| 996 #endif |  | 
| 997 | 988 | 
| 998 } }  // namespace v8::internal | 989 } }  // namespace v8::internal | 
| 999 | 990 | 
| 1000 #endif  // V8_DEOPTIMIZER_H_ | 991 #endif  // V8_DEOPTIMIZER_H_ | 
| OLD | NEW | 
|---|