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

Unified Diff: src/objects.cc

Issue 14996004: Track heap objects. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index d127d1bb8a095bd8d9c9ac6adbcf2572e30989fe..dd6cb9f36ad077063b6059a12b8995416d5d1516 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -2137,6 +2137,7 @@ const char* Representation::Mnemonic() const {
case kSmi: return "s";
case kDouble: return "d";
case kInteger32: return "i";
+ case kHeapObject: return "h";
case kExternal: return "x";
default:
UNREACHABLE();
@@ -2499,10 +2500,10 @@ MaybeObject* Map::GeneralizeRepresentation(int modify_index,
Representation new_representation) {
Map* old_map = this;
DescriptorArray* old_descriptors = old_map->instance_descriptors();
- Representation old_reprepresentation =
+ Representation old_representation =
old_descriptors->GetDetails(modify_index).representation();
- if (old_reprepresentation.IsNone()) {
+ if (old_representation.IsNone()) {
UNREACHABLE();
old_descriptors->SetRepresentation(modify_index, new_representation);
return this;
@@ -2528,9 +2529,14 @@ MaybeObject* Map::GeneralizeRepresentation(int modify_index,
Representation updated_representation =
updated_descriptors->GetDetails(modify_index).representation();
if (new_representation.fits_into(updated_representation)) {
- if (FLAG_trace_generalization) {
- PrintF("migrating to existing map %p -> %p\n",
- static_cast<void*>(this), static_cast<void*>(updated));
+ if (FLAG_trace_generalization &&
+ !(modify_index == 0 && new_representation.IsSmi())) {
+ PropertyDetails old_details = old_descriptors->GetDetails(modify_index);
+ PrintF("migrating to existing map %p(%s) -> %p(%s)\n",
+ static_cast<void*>(this),
+ old_details.representation().Mnemonic(),
+ static_cast<void*>(updated),
+ updated_representation.Mnemonic());
}
return updated;
}
@@ -2541,10 +2547,13 @@ MaybeObject* Map::GeneralizeRepresentation(int modify_index,
verbatim, valid, descriptors, old_descriptors);
if (!maybe_descriptors->To(&new_descriptors)) return maybe_descriptors;
- old_reprepresentation =
+ old_representation =
new_descriptors->GetDetails(modify_index).representation();
- new_representation = new_representation.generalize(old_reprepresentation);
- new_descriptors->SetRepresentation(modify_index, new_representation);
+ Representation updated_representation =
+ new_representation.generalize(old_representation);
+ if (!updated_representation.Equals(old_representation)) {
+ new_descriptors->SetRepresentation(modify_index, updated_representation);
+ }
Map* split_map = root_map->FindLastMatchMap(
verbatim, descriptors, new_descriptors);
@@ -2558,10 +2567,14 @@ MaybeObject* Map::GeneralizeRepresentation(int modify_index,
split_map->DeprecateTarget(
old_descriptors->GetKey(descriptor), new_descriptors);
- if (FLAG_trace_generalization) {
- PrintF("migrating to new map %p -> %p (%i steps)\n",
+ if (FLAG_trace_generalization &&
+ !(modify_index == 0 && new_representation.IsSmi())) {
+ PrintF("migrating to new map %i: %p(%s) -> %p(%s) (%i steps)\n",
+ modify_index,
static_cast<void*>(this),
+ old_representation.Mnemonic(),
static_cast<void*>(new_descriptors),
+ updated_representation.Mnemonic(),
descriptors - descriptor);
}
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698