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

Side by Side Diff: runtime/vm/object.cc

Issue 1292723002: Enable allocation tracing for classes owned by vm isolate (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 1735 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 Exceptions::Throw(thread, exception); 1746 Exceptions::Throw(thread, exception);
1747 UNREACHABLE(); 1747 UNREACHABLE();
1748 } 1748 }
1749 ClassTable* class_table = isolate->class_table(); 1749 ClassTable* class_table = isolate->class_table();
1750 if (space == Heap::kNew) { 1750 if (space == Heap::kNew) {
1751 class_table->UpdateAllocatedNew(cls_id, size); 1751 class_table->UpdateAllocatedNew(cls_id, size);
1752 } else { 1752 } else {
1753 class_table->UpdateAllocatedOld(cls_id, size); 1753 class_table->UpdateAllocatedOld(cls_id, size);
1754 } 1754 }
1755 const Class& cls = Class::Handle(class_table->At(cls_id)); 1755 const Class& cls = Class::Handle(class_table->At(cls_id));
1756 if (cls.trace_allocation()) { 1756 if (cls.TraceAllocation(isolate)) {
1757 Profiler::RecordAllocation(isolate, cls_id); 1757 Profiler::RecordAllocation(isolate, cls_id);
1758 } 1758 }
1759 NoSafepointScope no_safepoint; 1759 NoSafepointScope no_safepoint;
1760 InitializeObject(address, cls_id, size, (isolate == Dart::vm_isolate())); 1760 InitializeObject(address, cls_id, size, (isolate == Dart::vm_isolate()));
1761 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); 1761 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag);
1762 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); 1762 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_));
1763 return raw_obj; 1763 return raw_obj;
1764 } 1764 }
1765 1765
1766 1766
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after
2748 a.Register(code); 2748 a.Register(code);
2749 } 2749 }
2750 2750
2751 2751
2752 void Class::DisableCHAOptimizedCode() { 2752 void Class::DisableCHAOptimizedCode() {
2753 CHACodeArray a(*this); 2753 CHACodeArray a(*this);
2754 a.DisableCode(); 2754 a.DisableCode();
2755 } 2755 }
2756 2756
2757 2757
2758 bool Class::TraceAllocation(Isolate* isolate) const {
2759 ClassTable* class_table = isolate->class_table();
2760 return class_table->TraceAllocationFor(id());
2761 }
2762
2763
2758 void Class::SetTraceAllocation(bool trace_allocation) const { 2764 void Class::SetTraceAllocation(bool trace_allocation) const {
2759 const bool changed = trace_allocation != this->trace_allocation(); 2765 Isolate* isolate = Isolate::Current();
2766 const bool changed = trace_allocation != this->TraceAllocation(isolate);
2760 if (changed) { 2767 if (changed) {
2761 set_state_bits(
2762 TraceAllocationBit::update(trace_allocation, raw_ptr()->state_bits_));
2763 Isolate* isolate = Isolate::Current();
2764 ClassTable* class_table = isolate->class_table(); 2768 ClassTable* class_table = isolate->class_table();
2765 class_table->TraceAllocationsFor(id(), trace_allocation); 2769 class_table->SetTraceAllocationFor(id(), trace_allocation);
2766 DisableAllocationStub(); 2770 DisableAllocationStub();
2767 } 2771 }
2768 } 2772 }
2769 2773
2770 2774
2771 void Class::set_cha_codes(const Array& cache) const { 2775 void Class::set_cha_codes(const Array& cache) const {
2772 StorePointer(&raw_ptr()->cha_codes_, cache.raw()); 2776 StorePointer(&raw_ptr()->cha_codes_, cache.raw());
2773 } 2777 }
2774 2778
2775 2779
(...skipping 1424 matching lines...) Expand 10 before | Expand all | Expand 10 after
4200 const char* library_name = lib.IsNull() ? "" : lib.ToCString(); 4204 const char* library_name = lib.IsNull() ? "" : lib.ToCString();
4201 const char* class_name = String::Handle(Name()).ToCString(); 4205 const char* class_name = String::Handle(Name()).ToCString();
4202 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1; 4206 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1;
4203 char* chars = Thread::Current()->zone()->Alloc<char>(len); 4207 char* chars = Thread::Current()->zone()->Alloc<char>(len);
4204 OS::SNPrint(chars, len, format, library_name, class_name); 4208 OS::SNPrint(chars, len, format, library_name, class_name);
4205 return chars; 4209 return chars;
4206 } 4210 }
4207 4211
4208 4212
4209 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const { 4213 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const {
4214 Isolate* isolate = Isolate::Current();
4210 JSONObject jsobj(stream); 4215 JSONObject jsobj(stream);
4211 if ((raw() == Class::null()) || (id() == kFreeListElement)) { 4216 if ((raw() == Class::null()) || (id() == kFreeListElement)) {
4212 // TODO(turnidge): This is weird and needs to be changed. 4217 // TODO(turnidge): This is weird and needs to be changed.
4213 jsobj.AddProperty("type", "null"); 4218 jsobj.AddProperty("type", "null");
4214 return; 4219 return;
4215 } 4220 }
4216 AddCommonObjectProperties(&jsobj, "Class", ref); 4221 AddCommonObjectProperties(&jsobj, "Class", ref);
4217 jsobj.AddFixedServiceId("classes/%" Pd "", id()); 4222 jsobj.AddFixedServiceId("classes/%" Pd "", id());
4218 const String& user_name = String::Handle(PrettyName()); 4223 const String& user_name = String::Handle(PrettyName());
4219 const String& vm_name = String::Handle(Name()); 4224 const String& vm_name = String::Handle(Name());
4220 AddNameProperties(&jsobj, user_name, vm_name); 4225 AddNameProperties(&jsobj, user_name, vm_name);
4221 if (ref) { 4226 if (ref) {
4222 return; 4227 return;
4223 } 4228 }
4224 4229
4225 const Error& err = Error::Handle(EnsureIsFinalized(Isolate::Current())); 4230 const Error& err = Error::Handle(EnsureIsFinalized(Isolate::Current()));
4226 if (!err.IsNull()) { 4231 if (!err.IsNull()) {
4227 jsobj.AddProperty("error", err); 4232 jsobj.AddProperty("error", err);
4228 } 4233 }
4229 jsobj.AddProperty("abstract", is_abstract()); 4234 jsobj.AddProperty("abstract", is_abstract());
4230 jsobj.AddProperty("const", is_const()); 4235 jsobj.AddProperty("const", is_const());
4231 jsobj.AddProperty("_finalized", is_finalized()); 4236 jsobj.AddProperty("_finalized", is_finalized());
4232 jsobj.AddProperty("_implemented", is_implemented()); 4237 jsobj.AddProperty("_implemented", is_implemented());
4233 jsobj.AddProperty("_patch", is_patch()); 4238 jsobj.AddProperty("_patch", is_patch());
4234 jsobj.AddProperty("_traceAllocations", trace_allocation()); 4239 jsobj.AddProperty("_traceAllocations", TraceAllocation(isolate));
4235 const Class& superClass = Class::Handle(SuperClass()); 4240 const Class& superClass = Class::Handle(SuperClass());
4236 if (!superClass.IsNull()) { 4241 if (!superClass.IsNull()) {
4237 jsobj.AddProperty("super", superClass); 4242 jsobj.AddProperty("super", superClass);
4238 } 4243 }
4239 jsobj.AddProperty("library", Object::Handle(library())); 4244 jsobj.AddProperty("library", Object::Handle(library()));
4240 const Script& script = Script::Handle(this->script()); 4245 const Script& script = Script::Handle(this->script());
4241 if (!script.IsNull()) { 4246 if (!script.IsNull()) {
4242 jsobj.AddLocation(script, token_pos(), ComputeEndTokenPos()); 4247 jsobj.AddLocation(script, token_pos(), ComputeEndTokenPos());
4243 } 4248 }
4244 { 4249 {
(...skipping 17126 matching lines...) Expand 10 before | Expand all | Expand 10 after
21371 return tag_label.ToCString(); 21376 return tag_label.ToCString();
21372 } 21377 }
21373 21378
21374 21379
21375 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 21380 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
21376 Instance::PrintJSONImpl(stream, ref); 21381 Instance::PrintJSONImpl(stream, ref);
21377 } 21382 }
21378 21383
21379 21384
21380 } // namespace dart 21385 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698