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

Unified Diff: src/ic.cc

Issue 9403009: Count ICs that have type information. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 10 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/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index f774b928ce7c7656b19bdc7d69abb103ae218967..6edfa91bd420729d8484d51508bf1cecbb909ba4 100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -296,8 +296,20 @@ Failure* IC::ReferenceError(const char* type, Handle<String> name) {
}
-void IC::PostPatching() {
- if (FLAG_watch_ic_patching) {
+void IC::PostPatching(Address address, Code* target, Code* old_target) {
+ bool increment_ics_with_typeinfo = false;
+ if (FLAG_type_info_threshold > 0) {
+ if (old_target->is_inline_cache_stub() &&
+ target->is_inline_cache_stub()) {
+ State old_state = old_target->ic_state();
+ State new_state = target->ic_state();
+ if ((old_state == UNINITIALIZED || old_state == PREMONOMORPHIC) &&
+ (new_state != UNINITIALIZED && new_state != PREMONOMORPHIC)) {
+ increment_ics_with_typeinfo = true;
+ }
+ }
+ }
+ if (FLAG_watch_ic_patching || FLAG_type_info_threshold) {
Isolate::Current()->runtime_profiler()->NotifyICChanged();
// We do not want to optimize until the ICs have settled down,
// so when they are patched, we postpone optimization for the
@@ -313,7 +325,19 @@ void IC::PostPatching() {
if (raw_frame->is_java_script()) {
JSFunction* function =
JSFunction::cast(JavaScriptFrame::cast(raw_frame)->function());
- function->shared()->set_profiler_ticks(0);
+ if (function->IsOptimized()) continue;
+ SharedFunctionInfo* shared = function->shared();
+ if (FLAG_watch_ic_patching) {
+ shared->set_profiler_ticks(0);
+ }
+ if (increment_ics_with_typeinfo) {
+ Code* code = shared->code();
+ if (address > code->instruction_start() &&
Vyacheslav Egorov (Chromium) 2012/02/15 12:07:39 I think Code has Contains method.
Jakob Kummerow 2012/02/17 16:07:52 Thanks for the suggestion; but this is obsolete an
+ address < code->instruction_end()) {
+ shared->set_ic_typeinfo_count(shared->ic_typeinfo_count() + 1);
Vyacheslav Egorov (Chromium) 2012/02/15 12:07:39 Please add a small comment that this what this cod
Jakob Kummerow 2012/02/17 16:07:52 This is obsolete too.
+ increment_ics_with_typeinfo = false; // Done.
+ }
+ }
}
it.Advance();
}

Powered by Google App Engine
This is Rietveld 408576698