Put preservation of optimized code map behind a flag.
authormstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 16 May 2013 08:39:24 +0000 (08:39 +0000)
committermstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 16 May 2013 08:39:24 +0000 (08:39 +0000)
R=hpayer@chromium.org

Review URL: https://codereview.chromium.org/15119004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14700 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/flag-definitions.h
src/objects-visiting-inl.h

index 98f1d12..5c7c646 100644 (file)
@@ -268,6 +268,8 @@ DEFINE_bool(lookup_sample_by_shared, true,
             "info, not JSFunction itself")
 DEFINE_bool(cache_optimized_code, true,
             "cache optimized code for closures")
+DEFINE_bool(flush_optimized_code_cache, true,
+            "flushes the cache of optimized code for closures on every GC")
 DEFINE_bool(inline_construct, true, "inline constructor calls")
 DEFINE_bool(inline_arguments, true, "inline functions with arguments object")
 DEFINE_bool(inline_accessors, true, "inline JavaScript accessors")
index d0a70c3..f83f00f 100644 (file)
@@ -311,6 +311,12 @@ void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo(
   if (shared->ic_age() != heap->global_ic_age()) {
     shared->ResetForNewContext(heap->global_ic_age());
   }
+  if (FLAG_cache_optimized_code &&
+      FLAG_flush_optimized_code_cache &&
+      !shared->optimized_code_map()->IsSmi()) {
+    // Always flush the optimized code map if requested by flag.
+    shared->ClearOptimizedCodeMap();
+  }
   MarkCompactCollector* collector = heap->mark_compact_collector();
   if (collector->is_code_flushing_enabled()) {
     if (FLAG_cache_optimized_code && !shared->optimized_code_map()->IsSmi()) {