| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 056bc38b731fed81d2bbca22a3564b2b06c3e6e4..d84a6209140f27ea2d3bf814c8ca7e5af2ce7494 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -62,6 +62,7 @@ DEFINE_FLAG(bool, show_internal_names, false,
|
| DEFINE_FLAG(bool, throw_on_javascript_int_overflow, false,
|
| "Throw an exception when the result of an integer calculation will not "
|
| "fit into a javascript integer.");
|
| +DEFINE_FLAG(bool, trace_cha, false, "Trace CHA operations");
|
| DEFINE_FLAG(bool, use_field_guards, true, "Guard field cids.");
|
| DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache");
|
| DEFINE_FLAG(bool, trace_field_guards, false, "Trace changes in field's cids.");
|
| @@ -1609,7 +1610,7 @@ RawError* Object::Init(Isolate* isolate) {
|
|
|
|
|
| void Object::Print() const {
|
| - OS::Print("%s\n", ToCString());
|
| + ISL_Print("%s\n", ToCString());
|
| }
|
|
|
|
|
| @@ -2715,7 +2716,7 @@ class CHACodeArray : public WeakCodeReferences {
|
| virtual void ReportDeoptimization(const Code& code) {
|
| if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
|
| Function& function = Function::Handle(code.function());
|
| - OS::PrintErr("Deoptimizing %s because CHA optimized (%s).\n",
|
| + ISL_Print("Deoptimizing %s because CHA optimized (%s).\n",
|
| function.ToFullyQualifiedCString(),
|
| cls_.ToCString());
|
| }
|
| @@ -2724,10 +2725,10 @@ class CHACodeArray : public WeakCodeReferences {
|
| virtual void ReportSwitchingCode(const Code& code) {
|
| if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
|
| Function& function = Function::Handle(code.function());
|
| - OS::PrintErr("Switching %s to unoptimized code because CHA invalid"
|
| - " (%s)\n",
|
| - function.ToFullyQualifiedCString(),
|
| - cls_.ToCString());
|
| + ISL_Print("Switching %s to unoptimized code because CHA invalid"
|
| + " (%s)\n",
|
| + function.ToFullyQualifiedCString(),
|
| + cls_.ToCString());
|
| }
|
| }
|
|
|
| @@ -2738,6 +2739,10 @@ class CHACodeArray : public WeakCodeReferences {
|
|
|
|
|
| void Class::RegisterCHACode(const Code& code) {
|
| + if (FLAG_trace_cha) {
|
| + ISL_Print("RegisterCHACode %s class %s\n",
|
| + Function::Handle(code.function()).ToQualifiedCString(), ToCString());
|
| + }
|
| ASSERT(code.is_optimized());
|
| CHACodeArray a(*this);
|
| a.Register(code);
|
| @@ -5219,7 +5224,7 @@ void Function::SwitchToUnoptimizedCode() const {
|
| const Code& current_code = Code::Handle(zone, CurrentCode());
|
|
|
| if (FLAG_trace_deoptimization_verbose) {
|
| - OS::Print("Disabling optimized code: '%s' entry: %#" Px "\n",
|
| + ISL_Print("Disabling optimized code: '%s' entry: %#" Px "\n",
|
| ToFullyQualifiedCString(),
|
| current_code.EntryPoint());
|
| }
|
| @@ -6897,10 +6902,10 @@ bool Function::CheckSourceFingerprint(const char* prefix, int32_t fp) const {
|
| // to replace the old values.
|
| // sed -i .bak -f /tmp/newkeys runtime/vm/method_recognizer.h
|
| // sed -i .bak -f /tmp/newkeys runtime/vm/flow_graph_builder.h
|
| - OS::Print("s/V(%s, %d)/V(%s, %d)/\n",
|
| + ISL_Print("s/V(%s, %d)/V(%s, %d)/\n",
|
| prefix, fp, prefix, SourceFingerprint());
|
| } else {
|
| - OS::Print("FP mismatch while recognizing method %s:"
|
| + ISL_Print("FP mismatch while recognizing method %s:"
|
| " expecting %d found %d\n",
|
| ToFullyQualifiedCString(),
|
| fp,
|
| @@ -7501,19 +7506,18 @@ class FieldDependentArray : public WeakCodeReferences {
|
| virtual void ReportDeoptimization(const Code& code) {
|
| if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
|
| Function& function = Function::Handle(code.function());
|
| - OS::PrintErr("Deoptimizing %s because guard on field %s failed.\n",
|
| - function.ToFullyQualifiedCString(),
|
| - field_.ToCString());
|
| + ISL_Print("Deoptimizing %s because guard on field %s failed.\n",
|
| + function.ToFullyQualifiedCString(), field_.ToCString());
|
| }
|
| }
|
|
|
| virtual void ReportSwitchingCode(const Code& code) {
|
| if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
|
| Function& function = Function::Handle(code.function());
|
| - OS::PrintErr("Switching %s to unoptimized code because guard"
|
| - " on field %s was violated.\n",
|
| - function.ToFullyQualifiedCString(),
|
| - field_.ToCString());
|
| + ISL_Print("Switching %s to unoptimized code because guard"
|
| + " on field %s was violated.\n",
|
| + function.ToFullyQualifiedCString(),
|
| + field_.ToCString());
|
| }
|
| }
|
|
|
| @@ -7678,7 +7682,7 @@ bool Field::UpdateGuardedCidAndLength(const Object& value) const {
|
| }
|
|
|
| if (FLAG_trace_field_guards) {
|
| - OS::Print(" => %s\n", GuardedPropertiesAsCString());
|
| + ISL_Print(" => %s\n", GuardedPropertiesAsCString());
|
| }
|
|
|
| return false;
|
| @@ -7733,7 +7737,7 @@ void Field::RecordStore(const Object& value) const {
|
| }
|
|
|
| if (FLAG_trace_field_guards) {
|
| - OS::Print("Store %s %s <- %s\n",
|
| + ISL_Print("Store %s %s <- %s\n",
|
| ToCString(),
|
| GuardedPropertiesAsCString(),
|
| value.ToCString());
|
| @@ -7741,7 +7745,7 @@ void Field::RecordStore(const Object& value) const {
|
|
|
| if (UpdateGuardedCidAndLength(value)) {
|
| if (FLAG_trace_field_guards) {
|
| - OS::Print(" => %s\n", GuardedPropertiesAsCString());
|
| + ISL_Print(" => %s\n", GuardedPropertiesAsCString());
|
| }
|
|
|
| DeoptimizeDependentCode();
|
| @@ -10455,11 +10459,11 @@ class PrefixDependentArray : public WeakCodeReferences {
|
|
|
| virtual void ReportSwitchingCode(const Code& code) {
|
| if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
|
| - OS::PrintErr("Prefix '%s': disabling %s code for %s function '%s'\n",
|
| - String::Handle(prefix_.name()).ToCString(),
|
| - code.is_optimized() ? "optimized" : "unoptimized",
|
| - CodePatcher::IsEntryPatched(code) ? "patched" : "unpatched",
|
| - Function::Handle(code.function()).ToCString());
|
| + ISL_Print("Prefix '%s': disabling %s code for %s function '%s'\n",
|
| + String::Handle(prefix_.name()).ToCString(),
|
| + code.is_optimized() ? "optimized" : "unoptimized",
|
| + CodePatcher::IsEntryPatched(code) ? "patched" : "unpatched",
|
| + Function::Handle(code.function()).ToCString());
|
| }
|
| }
|
|
|
| @@ -13444,7 +13448,7 @@ const char* Context::ToCString() const {
|
|
|
| static void IndentN(int count) {
|
| for (int i = 0; i < count; i++) {
|
| - OS::PrintErr(" ");
|
| + ISL_Print(" ");
|
| }
|
| }
|
|
|
| @@ -13452,17 +13456,17 @@ static void IndentN(int count) {
|
| void Context::Dump(int indent) const {
|
| if (IsNull()) {
|
| IndentN(indent);
|
| - OS::PrintErr("Context@null\n");
|
| + ISL_Print("Context@null\n");
|
| return;
|
| }
|
|
|
| IndentN(indent);
|
| - OS::PrintErr("Context@%p vars(%" Pd ") {\n", this->raw(), num_variables());
|
| + ISL_Print("Context@%p vars(%" Pd ") {\n", this->raw(), num_variables());
|
| Object& obj = Object::Handle();
|
| for (intptr_t i = 0; i < num_variables(); i++) {
|
| IndentN(indent + 2);
|
| obj = At(i);
|
| - OS::PrintErr("[%" Pd "] = %s\n", i, obj.ToCString());
|
| + ISL_Print("[%" Pd "] = %s\n", i, obj.ToCString());
|
| }
|
|
|
| const Context& parent_ctx = Context::Handle(parent());
|
| @@ -13470,7 +13474,7 @@ void Context::Dump(int indent) const {
|
| parent_ctx.Dump(indent + 2);
|
| }
|
| IndentN(indent);
|
| - OS::PrintErr("}\n");
|
| + ISL_Print("}\n");
|
| }
|
|
|
|
|
|
|