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

Unified Diff: src/objects-printer.cc

Issue 391693002: In-object double fields unboxing (for 64-bit only). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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: src/objects-printer.cc
diff --git a/src/objects-printer.cc b/src/objects-printer.cc
index e6b2e6b24b78034f7211759c6a59f50819e4d477..a6a321747a9d9457e7e68cb837e81e838a765c64 100644
--- a/src/objects-printer.cc
+++ b/src/objects-printer.cc
@@ -228,8 +228,12 @@ void JSObject::PrintProperties(OStream& os) { // NOLINT
switch (descs->GetType(i)) {
case FIELD: {
FieldIndex index = FieldIndex::ForDescriptor(map(), i);
- os << Brief(RawFastPropertyAt(index)) << " (field at offset "
- << index.property_index() << ")\n";
+ if (map()->IsUnboxedDoubleField(index)) {
+ os << "<unboxed double> " << RawFastDoublePropertyAt(index);
+ } else {
+ os << Brief(RawFastPropertyAt(index));
+ }
+ os << " (field at offset " << index.property_index() << ")\n";
break;
}
case CONSTANT:
@@ -457,6 +461,9 @@ void Map::MapPrint(OStream& os) { // NOLINT
os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "")
<< "#" << NumberOfOwnDescriptors() << ": "
<< Brief(instance_descriptors());
+ if (FLAG_unbox_double_fields) {
+ os << "\n - layout descriptor: " << Brief(layout_descriptor());
+ }
if (HasTransitionArray()) {
os << "\n - transitions: " << Brief(transitions());
}
@@ -465,6 +472,9 @@ void Map::MapPrint(OStream& os) { // NOLINT
os << "\n - code cache: " << Brief(code_cache());
os << "\n - dependent code: " << Brief(dependent_code());
os << "\n";
+ instance_descriptors()->PrintDescriptors(os);
+ os << "\n";
+ if (FLAG_unbox_double_fields) layout_descriptor()->Print(os);
}
@@ -1072,18 +1082,48 @@ void BreakPointInfo::BreakPointInfoPrint(OStream& os) { // NOLINT
void DescriptorArray::PrintDescriptors(OStream& os) { // NOLINT
- os << "Descriptor array " << number_of_descriptors() << "\n";
+ os << "Descriptor array " << number_of_descriptors() << "\n";
for (int i = 0; i < number_of_descriptors(); i++) {
Descriptor desc;
Get(i, &desc);
- os << " " << i << ": " << desc;
+ os << " " << i << ": " << desc << "\n";
+ }
+ os << "\n";
+}
+
+
+static void PrintBitMask(OStream& os, uint32_t value) { // NOLINT
+ for (int i = 0; i < 32; i++) {
+ if ((i & 7) == 0) os << " ";
+ os << (((value & 1) == 0) ? "_" : "x");
+ value >>= 1;
+ }
+}
+
+
+void LayoutDescriptor::Print(OStream& os) { // NOLINT
+ os << "Layout descriptor: ";
+ if (IsUninitialized()) {
+ os << "<uninitialized>";
+ } else if (IsFastPointerLayout()) {
+ os << "<all tagged>";
+ } else if (IsSmi()) {
+ os << "fast";
+ PrintBitMask(os, static_cast<uint32_t>(Smi::cast(this)->value()));
+ } else {
+ os << "slow";
+ int len = length();
+ for (int i = 0; i < len; i++) {
+ if (i > 0) os << " |";
+ PrintBitMask(os, get_scalar(i));
+ }
}
os << "\n";
}
void TransitionArray::PrintTransitions(OStream& os) { // NOLINT
- os << "Transition array %d\n", number_of_transitions();
+ os << "Transition array " << number_of_transitions() << "\n";
for (int i = 0; i < number_of_transitions(); i++) {
os << " " << i << ": ";
GetKey(i)->NamePrint(os);

Powered by Google App Engine
This is Rietveld 408576698