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

Side by Side Diff: runtime/vm/object.h

Issue 27802002: Disconnects code objects from infrequently used unoptimized functions. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/flow_graph_compiler_x64.cc ('k') | runtime/vm/object.cc » ('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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_OBJECT_H_ 5 #ifndef VM_OBJECT_H_
6 #define VM_OBJECT_H_ 6 #define VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 // Parameter names are valid for all valid parameter indices, and are not 1470 // Parameter names are valid for all valid parameter indices, and are not
1471 // limited to named optional parameters. 1471 // limited to named optional parameters.
1472 RawString* ParameterNameAt(intptr_t index) const; 1472 RawString* ParameterNameAt(intptr_t index) const;
1473 void SetParameterNameAt(intptr_t index, const String& value) const; 1473 void SetParameterNameAt(intptr_t index, const String& value) const;
1474 RawArray* parameter_names() const { return raw_ptr()->parameter_names_; } 1474 RawArray* parameter_names() const { return raw_ptr()->parameter_names_; }
1475 void set_parameter_names(const Array& value) const; 1475 void set_parameter_names(const Array& value) const;
1476 1476
1477 // Sets function's code and code's function. 1477 // Sets function's code and code's function.
1478 void SetCode(const Code& value) const; 1478 void SetCode(const Code& value) const;
1479 1479
1480 // Detaches code from the function by setting the code to null, and patches
1481 // the code to be non-entrant.
1482 void DetachCode() const;
1483
1484 // Reattaches code to the function, and patches the code to be entrant.
1485 void ReattachCode(const Code& code) const;
1486
1480 // Disables optimized code and switches to unoptimized code. 1487 // Disables optimized code and switches to unoptimized code.
1481 void SwitchToUnoptimizedCode() const; 1488 void SwitchToUnoptimizedCode() const;
1482 1489
1483 // Return the most recently compiled and installed code for this function. 1490 // Return the most recently compiled and installed code for this function.
1484 // It is not the only Code object that points to this function. 1491 // It is not the only Code object that points to this function.
1485 RawCode* CurrentCode() const { return raw_ptr()->code_; } 1492 RawCode* CurrentCode() const { return raw_ptr()->code_; }
1486 1493
1487 RawCode* unoptimized_code() const { return raw_ptr()->unoptimized_code_; } 1494 RawCode* unoptimized_code() const { return raw_ptr()->unoptimized_code_; }
1488 void set_unoptimized_code(const Code& value) const; 1495 void set_unoptimized_code(const Code& value) const;
1489 static intptr_t code_offset() { return OFFSET_OF(RawFunction, code_); } 1496 static intptr_t code_offset() { return OFFSET_OF(RawFunction, code_); }
1497 static intptr_t unoptimized_code_offset() {
1498 return OFFSET_OF(RawFunction, unoptimized_code_);
1499 }
1490 inline bool HasCode() const; 1500 inline bool HasCode() const;
1491 1501
1492 // Returns true if there is at least one debugger breakpoint 1502 // Returns true if there is at least one debugger breakpoint
1493 // set in this function. 1503 // set in this function.
1494 bool HasBreakpoint() const; 1504 bool HasBreakpoint() const;
1495 1505
1496 RawContextScope* context_scope() const; 1506 RawContextScope* context_scope() const;
1497 void set_context_scope(const ContextScope& value) const; 1507 void set_context_scope(const ContextScope& value) const;
1498 1508
1499 // Enclosing function of this local function. 1509 // Enclosing function of this local function.
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2654 2664
2655 FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object); 2665 FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object);
2656 friend class Class; 2666 friend class Class;
2657 }; 2667 };
2658 2668
2659 2669
2660 class Instructions : public Object { 2670 class Instructions : public Object {
2661 public: 2671 public:
2662 intptr_t size() const { return raw_ptr()->size_; } // Excludes HeaderSize(). 2672 intptr_t size() const { return raw_ptr()->size_; } // Excludes HeaderSize().
2663 RawCode* code() const { return raw_ptr()->code_; } 2673 RawCode* code() const { return raw_ptr()->code_; }
2674 static intptr_t code_offset() {
2675 return OFFSET_OF(RawInstructions, code_);
2676 }
2664 RawArray* object_pool() const { return raw_ptr()->object_pool_; } 2677 RawArray* object_pool() const { return raw_ptr()->object_pool_; }
2665 static intptr_t object_pool_offset() { 2678 static intptr_t object_pool_offset() {
2666 return OFFSET_OF(RawInstructions, object_pool_); 2679 return OFFSET_OF(RawInstructions, object_pool_);
2667 } 2680 }
2668 2681
2669 uword EntryPoint() const { 2682 uword EntryPoint() const {
2670 return reinterpret_cast<uword>(raw_ptr()) + HeaderSize(); 2683 return reinterpret_cast<uword>(raw_ptr()) + HeaderSize();
2671 } 2684 }
2672 2685
2673 static const intptr_t kMaxElements = (kIntptrMax - 2686 static const intptr_t kMaxElements = (kIntptrMax -
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
3116 3129
3117 void set_static_calls_target_table(const Array& value) const; 3130 void set_static_calls_target_table(const Array& value) const;
3118 RawArray* static_calls_target_table() const { 3131 RawArray* static_calls_target_table() const {
3119 return raw_ptr()->static_calls_target_table_; 3132 return raw_ptr()->static_calls_target_table_;
3120 } 3133 }
3121 3134
3122 RawDeoptInfo* GetDeoptInfoAtPc(uword pc, intptr_t* deopt_reason) const; 3135 RawDeoptInfo* GetDeoptInfoAtPc(uword pc, intptr_t* deopt_reason) const;
3123 3136
3124 // Returns null if there is no static call at 'pc'. 3137 // Returns null if there is no static call at 'pc'.
3125 RawFunction* GetStaticCallTargetFunctionAt(uword pc) const; 3138 RawFunction* GetStaticCallTargetFunctionAt(uword pc) const;
3139 // Returns null if there is no static call at 'pc'.
3140 RawCode* GetStaticCallTargetCodeAt(uword pc) const;
3126 // Aborts if there is no static call at 'pc'. 3141 // Aborts if there is no static call at 'pc'.
3127 void SetStaticCallTargetCodeAt(uword pc, const Code& code) const; 3142 void SetStaticCallTargetCodeAt(uword pc, const Code& code) const;
3128 3143
3129 void Disassemble() const; 3144 void Disassemble() const;
3130 3145
3131 class Comments : public ZoneAllocated { 3146 class Comments : public ZoneAllocated {
3132 public: 3147 public:
3133 static Comments& New(intptr_t count); 3148 static Comments& New(intptr_t count);
3134 3149
3135 intptr_t Length() const; 3150 intptr_t Length() const;
(...skipping 3144 matching lines...) Expand 10 before | Expand all | Expand 10 after
6280 6295
6281 6296
6282 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 6297 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
6283 intptr_t index) { 6298 intptr_t index) {
6284 return array.At((index * kEntryLength) + kTargetFunctionIndex); 6299 return array.At((index * kEntryLength) + kTargetFunctionIndex);
6285 } 6300 }
6286 6301
6287 } // namespace dart 6302 } // namespace dart
6288 6303
6289 #endif // VM_OBJECT_H_ 6304 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_compiler_x64.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698