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

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

Issue 2572563004: Improve the casing of Stackmap and Stacktrace. (Closed)
Patch Set: Build fixes Created 4 years 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 | « runtime/vm/intermediate_language_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 RUNTIME_VM_OBJECT_H_ 5 #ifndef RUNTIME_VM_OBJECT_H_
6 #define RUNTIME_VM_OBJECT_H_ 6 #define RUNTIME_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 739 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 static RawClass* literal_token_class_; // Class of LiteralToken vm object. 750 static RawClass* literal_token_class_; // Class of LiteralToken vm object.
751 static RawClass* token_stream_class_; // Class of the TokenStream vm object. 751 static RawClass* token_stream_class_; // Class of the TokenStream vm object.
752 static RawClass* script_class_; // Class of the Script vm object. 752 static RawClass* script_class_; // Class of the Script vm object.
753 static RawClass* library_class_; // Class of the Library vm object. 753 static RawClass* library_class_; // Class of the Library vm object.
754 static RawClass* namespace_class_; // Class of Namespace vm object. 754 static RawClass* namespace_class_; // Class of Namespace vm object.
755 static RawClass* code_class_; // Class of the Code vm object. 755 static RawClass* code_class_; // Class of the Code vm object.
756 static RawClass* instructions_class_; // Class of the Instructions vm object. 756 static RawClass* instructions_class_; // Class of the Instructions vm object.
757 static RawClass* object_pool_class_; // Class of the ObjectPool vm object. 757 static RawClass* object_pool_class_; // Class of the ObjectPool vm object.
758 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. 758 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object.
759 static RawClass* code_source_map_class_; // Class of CodeSourceMap vm object. 759 static RawClass* code_source_map_class_; // Class of CodeSourceMap vm object.
760 static RawClass* stackmap_class_; // Class of Stackmap vm object. 760 static RawClass* stackmap_class_; // Class of StackMap vm object.
761 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors. 761 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors.
762 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers. 762 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers.
763 static RawClass* deopt_info_class_; // Class of DeoptInfo. 763 static RawClass* deopt_info_class_; // Class of DeoptInfo.
764 static RawClass* context_class_; // Class of the Context vm object. 764 static RawClass* context_class_; // Class of the Context vm object.
765 static RawClass* context_scope_class_; // Class of ContextScope vm object. 765 static RawClass* context_scope_class_; // Class of ContextScope vm object.
766 static RawClass* singletargetcache_class_; // Class of SingleTargetCache. 766 static RawClass* singletargetcache_class_; // Class of SingleTargetCache.
767 static RawClass* unlinkedcall_class_; // Class of UnlinkedCall. 767 static RawClass* unlinkedcall_class_; // Class of UnlinkedCall.
768 static RawClass* icdata_class_; // Class of ICData. 768 static RawClass* icdata_class_; // Class of ICData.
769 static RawClass* megamorphic_cache_class_; // Class of MegamorphiCache. 769 static RawClass* megamorphic_cache_class_; // Class of MegamorphiCache.
770 static RawClass* subtypetestcache_class_; // Class of SubtypeTestCache. 770 static RawClass* subtypetestcache_class_; // Class of SubtypeTestCache.
(...skipping 3625 matching lines...) Expand 10 before | Expand all | Expand 10 after
4396 intptr_t Length() const; 4396 intptr_t Length() const;
4397 void SetLength(intptr_t value) const; 4397 void SetLength(intptr_t value) const;
4398 void CopyData(GrowableArray<uint8_t>* data); 4398 void CopyData(GrowableArray<uint8_t>* data);
4399 4399
4400 FINAL_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap, Object); 4400 FINAL_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap, Object);
4401 friend class Class; 4401 friend class Class;
4402 friend class Object; 4402 friend class Object;
4403 }; 4403 };
4404 4404
4405 4405
4406 class Stackmap : public Object { 4406 class StackMap : public Object {
4407 public: 4407 public:
4408 static const intptr_t kNoMaximum = -1; 4408 static const intptr_t kNoMaximum = -1;
4409 static const intptr_t kNoMinimum = -1; 4409 static const intptr_t kNoMinimum = -1;
4410 4410
4411 bool IsObject(intptr_t index) const { 4411 bool IsObject(intptr_t index) const {
4412 ASSERT(InRange(index)); 4412 ASSERT(InRange(index));
4413 return GetBit(index); 4413 return GetBit(index);
4414 } 4414 }
4415 4415
4416 intptr_t Length() const { return raw_ptr()->length_; } 4416 intptr_t Length() const { return raw_ptr()->length_; }
4417 4417
4418 uint32_t PcOffset() const { return raw_ptr()->pc_offset_; } 4418 uint32_t PcOffset() const { return raw_ptr()->pc_offset_; }
4419 void SetPcOffset(uint32_t value) const { 4419 void SetPcOffset(uint32_t value) const {
4420 ASSERT(value <= kMaxUint32); 4420 ASSERT(value <= kMaxUint32);
4421 StoreNonPointer(&raw_ptr()->pc_offset_, value); 4421 StoreNonPointer(&raw_ptr()->pc_offset_, value);
4422 } 4422 }
4423 4423
4424 intptr_t SlowPathBitCount() const { return raw_ptr()->slow_path_bit_count_; } 4424 intptr_t SlowPathBitCount() const { return raw_ptr()->slow_path_bit_count_; }
4425 void SetSlowPathBitCount(intptr_t bit_count) const { 4425 void SetSlowPathBitCount(intptr_t bit_count) const {
4426 ASSERT(bit_count < kMaxInt32); 4426 ASSERT(bit_count < kMaxInt32);
4427 StoreNonPointer(&raw_ptr()->slow_path_bit_count_, bit_count); 4427 StoreNonPointer(&raw_ptr()->slow_path_bit_count_, bit_count);
4428 } 4428 }
4429 4429
4430 bool Equals(const Stackmap& other) const { 4430 bool Equals(const StackMap& other) const {
4431 if (Length() != other.Length()) { 4431 if (Length() != other.Length()) {
4432 return false; 4432 return false;
4433 } 4433 }
4434 NoSafepointScope no_safepoint; 4434 NoSafepointScope no_safepoint;
4435 return memcmp(raw_ptr(), other.raw_ptr(), InstanceSize(Length())) == 0; 4435 return memcmp(raw_ptr(), other.raw_ptr(), InstanceSize(Length())) == 0;
4436 } 4436 }
4437 4437
4438 static const intptr_t kMaxLengthInBytes = kSmiMax; 4438 static const intptr_t kMaxLengthInBytes = kSmiMax;
4439 4439
4440 static intptr_t InstanceSize() { 4440 static intptr_t InstanceSize() {
4441 ASSERT(sizeof(RawStackmap) == OFFSET_OF_RETURNED_VALUE(RawStackmap, data)); 4441 ASSERT(sizeof(RawStackMap) == OFFSET_OF_RETURNED_VALUE(RawStackMap, data));
4442 return 0; 4442 return 0;
4443 } 4443 }
4444 static intptr_t InstanceSize(intptr_t length) { 4444 static intptr_t InstanceSize(intptr_t length) {
4445 ASSERT(length >= 0); 4445 ASSERT(length >= 0);
4446 // The stackmap payload is in an array of bytes. 4446 // The stackmap payload is in an array of bytes.
4447 intptr_t payload_size = Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; 4447 intptr_t payload_size = Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte;
4448 return RoundedAllocationSize(sizeof(RawStackmap) + payload_size); 4448 return RoundedAllocationSize(sizeof(RawStackMap) + payload_size);
4449 } 4449 }
4450 static RawStackmap* New(intptr_t pc_offset, 4450 static RawStackMap* New(intptr_t pc_offset,
4451 BitmapBuilder* bmap, 4451 BitmapBuilder* bmap,
4452 intptr_t register_bit_count); 4452 intptr_t register_bit_count);
4453 4453
4454 static RawStackmap* New(intptr_t length, 4454 static RawStackMap* New(intptr_t length,
4455 intptr_t register_bit_count, 4455 intptr_t register_bit_count,
4456 intptr_t pc_offset); 4456 intptr_t pc_offset);
4457 4457
4458 private: 4458 private:
4459 void SetLength(intptr_t length) const { 4459 void SetLength(intptr_t length) const {
4460 StoreNonPointer(&raw_ptr()->length_, length); 4460 StoreNonPointer(&raw_ptr()->length_, length);
4461 } 4461 }
4462 4462
4463 bool InRange(intptr_t index) const { return index < Length(); } 4463 bool InRange(intptr_t index) const { return index < Length(); }
4464 4464
4465 bool GetBit(intptr_t bit_index) const; 4465 bool GetBit(intptr_t bit_index) const;
4466 void SetBit(intptr_t bit_index, bool value) const; 4466 void SetBit(intptr_t bit_index, bool value) const;
4467 4467
4468 FINAL_HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); 4468 FINAL_HEAP_OBJECT_IMPLEMENTATION(StackMap, Object);
4469 friend class BitmapBuilder; 4469 friend class BitmapBuilder;
4470 friend class Class; 4470 friend class Class;
4471 }; 4471 };
4472 4472
4473 4473
4474 class ExceptionHandlers : public Object { 4474 class ExceptionHandlers : public Object {
4475 public: 4475 public:
4476 static const intptr_t kInvalidPcOffset = 0; 4476 static const intptr_t kInvalidPcOffset = 0;
4477 4477
4478 intptr_t num_entries() const; 4478 intptr_t num_entries() const;
4479 4479
4480 void GetHandlerInfo(intptr_t try_index, 4480 void GetHandlerInfo(intptr_t try_index,
4481 RawExceptionHandlers::HandlerInfo* info) const; 4481 RawExceptionHandlers::HandlerInfo* info) const;
4482 4482
4483 uword HandlerPCOffset(intptr_t try_index) const; 4483 uword HandlerPCOffset(intptr_t try_index) const;
4484 intptr_t OuterTryIndex(intptr_t try_index) const; 4484 intptr_t OuterTryIndex(intptr_t try_index) const;
4485 bool NeedsStacktrace(intptr_t try_index) const; 4485 bool NeedsStackTrace(intptr_t try_index) const;
4486 4486
4487 void SetHandlerInfo(intptr_t try_index, 4487 void SetHandlerInfo(intptr_t try_index,
4488 intptr_t outer_try_index, 4488 intptr_t outer_try_index,
4489 uword handler_pc_offset, 4489 uword handler_pc_offset,
4490 bool needs_stacktrace, 4490 bool needs_stacktrace,
4491 bool has_catch_all) const; 4491 bool has_catch_all) const;
4492 4492
4493 RawArray* GetHandledTypes(intptr_t try_index) const; 4493 RawArray* GetHandledTypes(intptr_t try_index) const;
4494 void SetHandledTypes(intptr_t try_index, const Array& handled_types) const; 4494 void SetHandledTypes(intptr_t try_index, const Array& handled_types) const;
4495 bool HasCatchAll(intptr_t try_index) const; 4495 bool HasCatchAll(intptr_t try_index) const;
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
4673 UNREACHABLE(); 4673 UNREACHABLE();
4674 return NULL; 4674 return NULL;
4675 #else 4675 #else
4676 return raw_ptr()->deopt_info_array_; 4676 return raw_ptr()->deopt_info_array_;
4677 #endif 4677 #endif
4678 } 4678 }
4679 void set_deopt_info_array(const Array& array) const; 4679 void set_deopt_info_array(const Array& array) const;
4680 4680
4681 RawArray* stackmaps() const { return raw_ptr()->stackmaps_; } 4681 RawArray* stackmaps() const { return raw_ptr()->stackmaps_; }
4682 void set_stackmaps(const Array& maps) const; 4682 void set_stackmaps(const Array& maps) const;
4683 RawStackmap* GetStackmap(uint32_t pc_offset, 4683 RawStackMap* GetStackMap(uint32_t pc_offset,
4684 Array* stackmaps, 4684 Array* stackmaps,
4685 Stackmap* map) const; 4685 StackMap* map) const;
4686 4686
4687 enum { 4687 enum {
4688 kSCallTableOffsetEntry = 0, 4688 kSCallTableOffsetEntry = 0,
4689 kSCallTableFunctionEntry = 1, 4689 kSCallTableFunctionEntry = 1,
4690 kSCallTableCodeEntry = 2, 4690 kSCallTableCodeEntry = 2,
4691 kSCallTableEntryLength = 3, 4691 kSCallTableEntryLength = 3,
4692 }; 4692 };
4693 4693
4694 void set_static_calls_target_table(const Array& value) const; 4694 void set_static_calls_target_table(const Array& value) const;
4695 RawArray* static_calls_target_table() const { 4695 RawArray* static_calls_target_table() const {
(...skipping 3672 matching lines...) Expand 10 before | Expand all | Expand 10 after
8368 Dart_Port origin_id, 8368 Dart_Port origin_id,
8369 Heap::Space space = Heap::kNew); 8369 Heap::Space space = Heap::kNew);
8370 8370
8371 private: 8371 private:
8372 FINAL_HEAP_OBJECT_IMPLEMENTATION(SendPort, Instance); 8372 FINAL_HEAP_OBJECT_IMPLEMENTATION(SendPort, Instance);
8373 friend class Class; 8373 friend class Class;
8374 }; 8374 };
8375 8375
8376 8376
8377 // Internal stacktrace object used in exceptions for printing stack traces. 8377 // Internal stacktrace object used in exceptions for printing stack traces.
8378 class Stacktrace : public Instance { 8378 class StackTrace : public Instance {
8379 public: 8379 public:
8380 static const int kPreallocatedStackdepth = 30; 8380 static const int kPreallocatedStackdepth = 30;
8381 8381
8382 intptr_t Length() const; 8382 intptr_t Length() const;
8383 8383
8384 RawFunction* FunctionAtFrame(intptr_t frame_index) const; 8384 RawFunction* FunctionAtFrame(intptr_t frame_index) const;
8385 8385
8386 RawCode* CodeAtFrame(intptr_t frame_index) const; 8386 RawCode* CodeAtFrame(intptr_t frame_index) const;
8387 void SetCodeAtFrame(intptr_t frame_index, const Code& code) const; 8387 void SetCodeAtFrame(intptr_t frame_index, const Code& code) const;
8388 8388
8389 RawSmi* PcOffsetAtFrame(intptr_t frame_index) const; 8389 RawSmi* PcOffsetAtFrame(intptr_t frame_index) const;
8390 void SetPcOffsetAtFrame(intptr_t frame_index, const Smi& pc_offset) const; 8390 void SetPcOffsetAtFrame(intptr_t frame_index, const Smi& pc_offset) const;
8391 void set_expand_inlined(bool value) const; 8391 void set_expand_inlined(bool value) const;
8392 8392
8393 static intptr_t InstanceSize() { 8393 static intptr_t InstanceSize() {
8394 return RoundedAllocationSize(sizeof(RawStacktrace)); 8394 return RoundedAllocationSize(sizeof(RawStackTrace));
8395 } 8395 }
8396 static RawStacktrace* New(const Array& code_array, 8396 static RawStackTrace* New(const Array& code_array,
8397 const Array& pc_offset_array, 8397 const Array& pc_offset_array,
8398 Heap::Space space = Heap::kNew); 8398 Heap::Space space = Heap::kNew);
8399 8399
8400 // The argument 'max_frames' limits the number of printed frames. 8400 // The argument 'max_frames' limits the number of printed frames.
8401 const char* ToCStringInternal(intptr_t* frame_index, 8401 const char* ToCStringInternal(intptr_t* frame_index,
8402 intptr_t max_frames = kMaxInt32) const; 8402 intptr_t max_frames = kMaxInt32) const;
8403 8403
8404 private: 8404 private:
8405 void set_code_array(const Array& code_array) const; 8405 void set_code_array(const Array& code_array) const;
8406 void set_pc_offset_array(const Array& pc_offset_array) const; 8406 void set_pc_offset_array(const Array& pc_offset_array) const;
8407 bool expand_inlined() const; 8407 bool expand_inlined() const;
8408 8408
8409 FINAL_HEAP_OBJECT_IMPLEMENTATION(Stacktrace, Instance); 8409 FINAL_HEAP_OBJECT_IMPLEMENTATION(StackTrace, Instance);
8410 friend class Class; 8410 friend class Class;
8411 friend class Debugger; 8411 friend class Debugger;
8412 }; 8412 };
8413 8413
8414 8414
8415 // Internal JavaScript regular expression object. 8415 // Internal JavaScript regular expression object.
8416 class RegExp : public Instance { 8416 class RegExp : public Instance {
8417 public: 8417 public:
8418 // Meaning of RegExType: 8418 // Meaning of RegExType:
8419 // kUninitialized: the type of th regexp has not been initialized yet. 8419 // kUninitialized: the type of th regexp has not been initialized yet.
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
8886 8886
8887 inline void TypeArguments::SetHash(intptr_t value) const { 8887 inline void TypeArguments::SetHash(intptr_t value) const {
8888 // This is only safe because we create a new Smi, which does not cause 8888 // This is only safe because we create a new Smi, which does not cause
8889 // heap allocation. 8889 // heap allocation.
8890 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); 8890 StoreSmi(&raw_ptr()->hash_, Smi::New(value));
8891 } 8891 }
8892 8892
8893 } // namespace dart 8893 } // namespace dart
8894 8894
8895 #endif // RUNTIME_VM_OBJECT_H_ 8895 #endif // RUNTIME_VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698