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

Unified Diff: runtime/vm/raw_object.cc

Issue 1147303002: Support untagged object pool entries. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: rebased Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/raw_object.cc
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 04378e71a9bef9fdda6a42bda2119b5fb7c44436..31545928ce9ed1b961b61bad662fd643d3222e21 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -4,6 +4,7 @@
#include "vm/raw_object.h"
+#include "vm/assembler.h"
#include "vm/class_table.h"
#include "vm/dart.h"
#include "vm/freelist.h"
@@ -115,6 +116,13 @@ intptr_t RawObject::SizeFromClass() const {
instance_size = Array::InstanceSize(array_length);
break;
}
+ case kObjectPoolCid: {
+ const RawObjectPool* raw_object_pool =
+ reinterpret_cast<const RawObjectPool*>(this);
+ intptr_t len = raw_object_pool->ptr()->length_;
+ instance_size = ObjectPool::InstanceSize(len);
+ break;
+ }
#define SIZE_FROM_CLASS(clazz) \
case kTypedData##clazz##Cid:
CLASS_LIST_TYPED_DATA(SIZE_FROM_CLASS) {
@@ -523,6 +531,28 @@ intptr_t RawCode::VisitCodePointers(RawCode* raw_obj,
}
+RawObjectPool::Entry* RawObjectPool::from() {
+ return &ptr()->data()[Assembler::kNumFixedEntries];
+}
+
+
+RawObjectPool::Entry* RawObjectPool::to() {
+ return &ptr()->data()[Assembler::kNumFixedEntries +
+ ptr()->num_tagged_entries_ - 1];
+}
+
+
+intptr_t RawObjectPool::VisitObjectPoolPointers(
+ RawObjectPool* raw_obj, ObjectPointerVisitor* visitor) {
+ for (Entry* current = raw_obj->from();
+ current <= raw_obj->to();
+ current++) {
+ visitor->VisitPointer(&current->raw_obj_);
+ }
+ return ObjectPool::InstanceSize(raw_obj->ptr()->length_);
+}
+
+
intptr_t RawInstructions::VisitInstructionsPointers(
RawInstructions* raw_obj, ObjectPointerVisitor* visitor) {
RawInstructions* obj = raw_obj->ptr();

Powered by Google App Engine
This is Rietveld 408576698