Reviewers: Benedikt Meurer,
Description:
Refactor DeoptimizeDependentCodeGroup.
BUG=
Please review this at https://codereview.chromium.org/137783016/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+23, -5 lines):
M src/heap.cc
M src/objects.h
M src/objects.cc
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index
899d701a856d28024ab5a95fd419f0be435e58d1..5bebe1a225cbe58a021fd6ca66fd3fe9b5e4663c
100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -1983,14 +1983,22 @@ void
Heap::ProcessAllocationSites(WeakObjectRetainer* retainer,
void Heap::ResetAllAllocationSitesDependentCode(PretenureFlag flag) {
+ ASSERT(AllowCodeDependencyChange::IsAllowed());
+ DisallowHeapAllocation no_allocation_scope;
Object* cur = allocation_sites_list();
+ bool marked = false;
while (cur->IsAllocationSite()) {
AllocationSite* casted = AllocationSite::cast(cur);
if (casted->GetPretenureMode() == flag) {
casted->ResetPretenureDecision();
+ bool got_marked =
casted->dependent_code()->MarkCodeForDeoptimization(
+ isolate_,
+ DependentCode::kAllocationSiteTenuringChangedGroup);
+ if (got_marked) marked = true;
}
cur = casted->weak_next();
}
+ if (marked) Deoptimizer::DeoptimizeMarkedCode(isolate_);
}
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
23cd6d91752d1f6e360215b16e88e395f31f6571..bee38bd3e58a77efcd68fe4fcf76b516f9b4119f
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -11750,7 +11750,7 @@ bool DependentCode::Contains(DependencyGroup group,
Code* code) {
}
-void DependentCode::DeoptimizeDependentCodeGroup(
+bool DependentCode::MarkCodeForDeoptimization(
Isolate* isolate,
DependentCode::DependencyGroup group) {
ASSERT(AllowCodeDependencyChange::IsAllowed());
@@ -11759,7 +11759,7 @@ void DependentCode::DeoptimizeDependentCodeGroup(
int start = starts.at(group);
int end = starts.at(group + 1);
int code_entries = starts.number_of_entries();
- if (start == end) return;
+ if (start == end) return false;
// Mark all the code that needs to be deoptimized.
bool marked = false;
@@ -11785,6 +11785,16 @@ void DependentCode::DeoptimizeDependentCodeGroup(
clear_at(i);
}
set_number_of_entries(group, 0);
+ return marked;
+}
+
+
+void DependentCode::DeoptimizeDependentCodeGroup(
+ Isolate* isolate,
+ DependentCode::DependencyGroup group) {
+ ASSERT(AllowCodeDependencyChange::IsAllowed());
+ DisallowHeapAllocation no_allocation_scope;
+ bool marked = MarkCodeForDeoptimization(isolate, group);
if (marked) Deoptimizer::DeoptimizeMarkedCode(isolate);
}
@@ -12760,9 +12770,6 @@ const double AllocationSite::kPretenureRatio = 0.60;
void AllocationSite::ResetPretenureDecision() {
- dependent_code()->DeoptimizeDependentCodeGroup(
- GetIsolate(),
- DependentCode::kAllocationSiteTenuringChangedGroup);
set_pretenure_decision(kUndecided);
set_memento_found_count(0);
set_memento_create_count(0);
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
cdf1e2455d2c0e93c829a70955d900db54c32dba..94acf5056d6fc7952901cd38af8343ea3a77bc0a
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -5642,6 +5642,9 @@ class DependentCode: public FixedArray {
void DeoptimizeDependentCodeGroup(Isolate* isolate,
DependentCode::DependencyGroup group);
+ bool MarkCodeForDeoptimization(Isolate* isolate,
+ DependentCode::DependencyGroup group);
+
// The following low-level accessors should only be used by this class
// and the mark compact collector.
inline int number_of_entries(DependencyGroup group);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.