| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 part of service; | 5 part of service; |
| 6 | 6 |
| 7 // Some value smaller than the object ring, so requesting a large array | 7 // Some value smaller than the object ring, so requesting a large array |
| 8 // doesn't result in an expired ref because the elements lapped it in the | 8 // doesn't result in an expired ref because the elements lapped it in the |
| 9 // object ring. | 9 // object ring. |
| 10 const int kDefaultFieldLimit = 100; | 10 const int kDefaultFieldLimit = 100; |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 break; | 260 break; |
| 261 case 'Script': | 261 case 'Script': |
| 262 obj = new Script._empty(owner); | 262 obj = new Script._empty(owner); |
| 263 break; | 263 break; |
| 264 case 'Socket': | 264 case 'Socket': |
| 265 obj = new Socket._empty(owner); | 265 obj = new Socket._empty(owner); |
| 266 break; | 266 break; |
| 267 case 'Sentinel': | 267 case 'Sentinel': |
| 268 obj = new Sentinel._empty(owner); | 268 obj = new Sentinel._empty(owner); |
| 269 break; | 269 break; |
| 270 case 'InstanceSet': |
| 271 obj = new InstanceSet._empty(owner); |
| 272 break; |
| 270 case 'TypeArguments': | 273 case 'TypeArguments': |
| 271 obj = new TypeArguments._empty(owner); | 274 obj = new TypeArguments._empty(owner); |
| 272 break; | 275 break; |
| 273 case 'Instance': | 276 case 'Instance': |
| 274 obj = new Instance._empty(owner); | 277 obj = new Instance._empty(owner); |
| 275 break; | 278 break; |
| 276 default: | 279 default: |
| 277 break; | 280 break; |
| 278 } | 281 } |
| 279 if (obj == null) { | 282 if (obj == null) { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 } | 407 } |
| 405 } | 408 } |
| 406 | 409 |
| 407 if (mapIsRef) { | 410 if (mapIsRef) { |
| 408 return; | 411 return; |
| 409 } | 412 } |
| 410 size = map['size']; | 413 size = map['size']; |
| 411 } | 414 } |
| 412 } | 415 } |
| 413 | 416 |
| 417 class RetainingObject implements M.RetainingObject { |
| 418 int get retainedSize => object.retainedSize; |
| 419 final HeapObject object; |
| 420 RetainingObject(this.object); |
| 421 } |
| 422 |
| 414 abstract class ServiceObjectOwner extends ServiceObject { | 423 abstract class ServiceObjectOwner extends ServiceObject { |
| 415 /// Creates an empty [ServiceObjectOwner]. | 424 /// Creates an empty [ServiceObjectOwner]. |
| 416 ServiceObjectOwner._empty(ServiceObjectOwner owner) : super._empty(owner); | 425 ServiceObjectOwner._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 417 | 426 |
| 418 /// Builds a [ServiceObject] corresponding to the [id] from [map]. | 427 /// Builds a [ServiceObject] corresponding to the [id] from [map]. |
| 419 /// The result may come from the cache. The result will not necessarily | 428 /// The result may come from the cache. The result will not necessarily |
| 420 /// be [loaded]. | 429 /// be [loaded]. |
| 421 ServiceObject getFromMap(ObservableMap map); | 430 ServiceObject getFromMap(ObservableMap map); |
| 422 } | 431 } |
| 423 | 432 |
| (...skipping 1893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2317 class AllocationCount extends Observable implements M.AllocationCount { | 2326 class AllocationCount extends Observable implements M.AllocationCount { |
| 2318 @observable int instances = 0; | 2327 @observable int instances = 0; |
| 2319 @observable int bytes = 0; | 2328 @observable int bytes = 0; |
| 2320 | 2329 |
| 2321 void reset() { | 2330 void reset() { |
| 2322 instances = 0; | 2331 instances = 0; |
| 2323 bytes = 0; | 2332 bytes = 0; |
| 2324 } | 2333 } |
| 2325 | 2334 |
| 2326 bool get empty => (instances == 0) && (bytes == 0); | 2335 bool get empty => (instances == 0) && (bytes == 0); |
| 2336 bool get notEmpty => (instances != 0) || (bytes != 0); |
| 2327 } | 2337 } |
| 2328 | 2338 |
| 2329 class Allocations implements M.Allocations{ | 2339 class Allocations implements M.Allocations { |
| 2330 // Indexes into VM provided array. (see vm/class_table.h). | 2340 // Indexes into VM provided array. (see vm/class_table.h). |
| 2331 static const ALLOCATED_BEFORE_GC = 0; | 2341 static const ALLOCATED_BEFORE_GC = 0; |
| 2332 static const ALLOCATED_BEFORE_GC_SIZE = 1; | 2342 static const ALLOCATED_BEFORE_GC_SIZE = 1; |
| 2333 static const LIVE_AFTER_GC = 2; | 2343 static const LIVE_AFTER_GC = 2; |
| 2334 static const LIVE_AFTER_GC_SIZE = 3; | 2344 static const LIVE_AFTER_GC_SIZE = 3; |
| 2335 static const ALLOCATED_SINCE_GC = 4; | 2345 static const ALLOCATED_SINCE_GC = 4; |
| 2336 static const ALLOCATED_SINCE_GC_SIZE = 5; | 2346 static const ALLOCATED_SINCE_GC_SIZE = 5; |
| 2337 static const ACCUMULATED = 6; | 2347 static const ACCUMULATED = 6; |
| 2338 static const ACCUMULATED_SIZE = 7; | 2348 static const ACCUMULATED_SIZE = 7; |
| 2339 | 2349 |
| 2340 final AllocationCount accumulated = new AllocationCount(); | 2350 final AllocationCount accumulated = new AllocationCount(); |
| 2341 final AllocationCount current = new AllocationCount(); | 2351 final AllocationCount current = new AllocationCount(); |
| 2342 | 2352 |
| 2343 void update(List stats) { | 2353 void update(List stats) { |
| 2344 accumulated.instances = stats[ACCUMULATED]; | 2354 accumulated.instances = stats[ACCUMULATED]; |
| 2345 accumulated.bytes = stats[ACCUMULATED_SIZE]; | 2355 accumulated.bytes = stats[ACCUMULATED_SIZE]; |
| 2346 current.instances = stats[LIVE_AFTER_GC] + stats[ALLOCATED_SINCE_GC]; | 2356 current.instances = stats[LIVE_AFTER_GC] + stats[ALLOCATED_SINCE_GC]; |
| 2347 current.bytes = stats[LIVE_AFTER_GC_SIZE] + stats[ALLOCATED_SINCE_GC_SIZE]; | 2357 current.bytes = stats[LIVE_AFTER_GC_SIZE] + stats[ALLOCATED_SINCE_GC_SIZE]; |
| 2348 } | 2358 } |
| 2349 | 2359 |
| 2350 bool get empty => accumulated.empty && current.empty; | 2360 bool get empty => accumulated.empty && current.empty; |
| 2361 bool get notEmpty => accumulated.notEmpty || current.notEmpty; |
| 2351 } | 2362 } |
| 2352 | 2363 |
| 2353 class Class extends HeapObject implements M.Class { | 2364 class Class extends HeapObject implements M.Class { |
| 2354 @observable Library library; | 2365 @observable Library library; |
| 2355 | 2366 |
| 2356 @observable bool isAbstract; | 2367 @observable bool isAbstract; |
| 2357 @observable bool isConst; | 2368 @observable bool isConst; |
| 2358 @observable bool isFinalized; | 2369 @observable bool isFinalized; |
| 2359 @observable bool isPatch; | 2370 @observable bool isPatch; |
| 2360 @observable bool isImplemented; | 2371 @observable bool isImplemented; |
| 2361 | 2372 |
| 2362 @observable SourceLocation location; | 2373 @observable SourceLocation location; |
| 2363 | 2374 |
| 2364 @observable DartError error; | 2375 @observable DartError error; |
| 2365 @observable int vmCid; | 2376 @observable int vmCid; |
| 2366 | 2377 |
| 2367 final Allocations newSpace = new Allocations(); | 2378 final Allocations newSpace = new Allocations(); |
| 2368 final Allocations oldSpace = new Allocations(); | 2379 final Allocations oldSpace = new Allocations(); |
| 2369 final AllocationCount promotedByLastNewGC = new AllocationCount(); | 2380 final AllocationCount promotedByLastNewGC = new AllocationCount(); |
| 2370 | 2381 |
| 2382 @observable bool get hasAllocations => newSpace.notEmpty || oldSpace.notEmpty; |
| 2371 @observable bool get hasNoAllocations => newSpace.empty && oldSpace.empty; | 2383 @observable bool get hasNoAllocations => newSpace.empty && oldSpace.empty; |
| 2372 @observable bool traceAllocations = false; | 2384 @observable bool traceAllocations = false; |
| 2373 @reflectable final fields = new ObservableList<Field>(); | 2385 @reflectable final fields = new ObservableList<Field>(); |
| 2374 @reflectable final functions = new ObservableList<ServiceFunction>(); | 2386 @reflectable final functions = new ObservableList<ServiceFunction>(); |
| 2375 | 2387 |
| 2376 @observable Class superclass; | 2388 @observable Class superclass; |
| 2377 @reflectable final interfaces = new ObservableList<Instance>(); | 2389 @reflectable final interfaces = new ObservableList<Instance>(); |
| 2378 @reflectable final subclasses = new ObservableList<Class>(); | 2390 @reflectable final subclasses = new ObservableList<Class>(); |
| 2379 | 2391 |
| 2380 @observable Instance superType; | 2392 @observable Instance superType; |
| (...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3022 _upgradeCollection(map, isolate); | 3034 _upgradeCollection(map, isolate); |
| 3023 super._update(map, mapIsRef); | 3035 super._update(map, mapIsRef); |
| 3024 | 3036 |
| 3025 name = map['name']; | 3037 name = map['name']; |
| 3026 vmName = (map.containsKey('_vmName') ? map['_vmName'] : name); | 3038 vmName = (map.containsKey('_vmName') ? map['_vmName'] : name); |
| 3027 dartOwner = map['owner']; | 3039 dartOwner = map['owner']; |
| 3028 declaredType = map['declaredType']; | 3040 declaredType = map['declaredType']; |
| 3029 isStatic = map['static']; | 3041 isStatic = map['static']; |
| 3030 isFinal = map['final']; | 3042 isFinal = map['final']; |
| 3031 isConst = map['const']; | 3043 isConst = map['const']; |
| 3032 staticValue = map['staticValue']; | |
| 3033 | 3044 |
| 3034 if (dartOwner is Class) { | 3045 if (dartOwner is Class) { |
| 3035 Class ownerClass = dartOwner; | 3046 Class ownerClass = dartOwner; |
| 3036 library = ownerClass.library; | 3047 library = ownerClass.library; |
| 3037 | 3048 |
| 3038 } else { | 3049 } else { |
| 3039 library = dartOwner; | 3050 library = dartOwner; |
| 3040 } | 3051 } |
| 3041 | 3052 |
| 3042 if (mapIsRef) { | 3053 if (mapIsRef) { |
| 3043 return; | 3054 return; |
| 3044 } | 3055 } |
| 3056 staticValue = map['staticValue']; |
| 3045 | 3057 |
| 3046 guardNullable = map['_guardNullable']; | 3058 guardNullable = map['_guardNullable']; |
| 3047 if (map['_guardClass'] is Class) { | 3059 if (map['_guardClass'] is Class) { |
| 3048 guardClass = map['_guardClass']; | 3060 guardClass = map['_guardClass']; |
| 3049 guardClassKind = M.GuardClassKind.single; | 3061 guardClassKind = M.GuardClassKind.single; |
| 3050 } else { | 3062 } else { |
| 3051 switch (map['_guardClass']) { | 3063 switch (map['_guardClass']) { |
| 3052 case 'various': | 3064 case 'various': |
| 3053 guardClassKind = M.GuardClassKind.dynamic; | 3065 guardClassKind = M.GuardClassKind.dynamic; |
| 3054 break; | 3066 break; |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3736 | 3748 |
| 3737 dartOwner = map['_owner']; | 3749 dartOwner = map['_owner']; |
| 3738 name = map['name']; | 3750 name = map['name']; |
| 3739 if (mapIsRef) { | 3751 if (mapIsRef) { |
| 3740 return; | 3752 return; |
| 3741 } | 3753 } |
| 3742 types = map['types']; | 3754 types = map['types']; |
| 3743 } | 3755 } |
| 3744 } | 3756 } |
| 3745 | 3757 |
| 3758 class InstanceSet extends HeapObject implements M.InstanceSet { |
| 3759 HeapObject dartOwner; |
| 3760 int count; |
| 3761 Iterable<HeapObject> samples; |
| 3762 |
| 3763 InstanceSet._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 3764 |
| 3765 void _update(ObservableMap map, bool mapIsRef) { |
| 3766 _upgradeCollection(map, isolate); |
| 3767 super._update(map, mapIsRef); |
| 3768 |
| 3769 if (mapIsRef) { |
| 3770 return; |
| 3771 } |
| 3772 count = map['totalCount']; |
| 3773 samples = map['samples']; |
| 3774 } |
| 3775 } |
| 3776 |
| 3746 class MegamorphicCache extends HeapObject implements M.MegamorphicCache { | 3777 class MegamorphicCache extends HeapObject implements M.MegamorphicCache { |
| 3747 @observable int mask; | 3778 @observable int mask; |
| 3748 @observable Instance buckets; | 3779 @observable Instance buckets; |
| 3749 @observable String selector; | 3780 @observable String selector; |
| 3750 @observable Instance argumentsDescriptor; | 3781 @observable Instance argumentsDescriptor; |
| 3751 | 3782 |
| 3752 bool get immutable => false; | 3783 bool get immutable => false; |
| 3753 | 3784 |
| 3754 MegamorphicCache._empty(ServiceObjectOwner owner) : super._empty(owner); | 3785 MegamorphicCache._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 3755 | 3786 |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4420 var v = list[i]; | 4451 var v = list[i]; |
| 4421 if ((v is ObservableMap) && _isServiceMap(v)) { | 4452 if ((v is ObservableMap) && _isServiceMap(v)) { |
| 4422 list[i] = owner.getFromMap(v); | 4453 list[i] = owner.getFromMap(v); |
| 4423 } else if (v is ObservableList) { | 4454 } else if (v is ObservableList) { |
| 4424 _upgradeObservableList(v, owner); | 4455 _upgradeObservableList(v, owner); |
| 4425 } else if (v is ObservableMap) { | 4456 } else if (v is ObservableMap) { |
| 4426 _upgradeObservableMap(v, owner); | 4457 _upgradeObservableMap(v, owner); |
| 4427 } | 4458 } |
| 4428 } | 4459 } |
| 4429 } | 4460 } |
| OLD | NEW |