| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 repositories; | 5 part of repositories; |
| 6 | 6 |
| 7 class AllocationProfileRepository implements M.AllocationProfileRepository { | 7 class AllocationProfileRepository implements M.AllocationProfileRepository { |
| 8 static const _api = '_getAllocationProfile'; | 8 static const _api = '_getAllocationProfile'; |
| 9 static const _defaultsApi = '_getDefaultClassesAliases'; |
| 9 | 10 |
| 10 Future<M.AllocationProfile> get(M.IsolateRef i, | 11 Future<M.AllocationProfile> get(M.IsolateRef i, |
| 11 {bool gc: false, bool reset: false}) async { | 12 {bool gc: false, bool reset: false, bool combine: true}) async { |
| 12 assert(gc != null); | 13 assert(gc != null); |
| 13 assert(reset != null); | 14 assert(reset != null); |
| 14 S.Isolate isolate = i as S.Isolate; | 15 S.Isolate isolate = i as S.Isolate; |
| 15 assert(isolate != null); | 16 assert(isolate != null); |
| 16 var params = {}; | 17 var params = {}; |
| 17 if (gc) { | 18 if (gc) { |
| 18 params['gc'] = 'full'; | 19 params['gc'] = 'full'; |
| 19 } | 20 } |
| 20 if (reset) { | 21 if (reset) { |
| 21 params['reset'] = true; | 22 params['reset'] = true; |
| 22 } | 23 } |
| 23 final response = await isolate.invokeRpc(_api, params); | 24 final response = await isolate.invokeRpc(_api, params); |
| 25 Map defaults; |
| 26 if (combine) { |
| 27 defaults = await isolate.vm.invokeRpcNoUpgrade(_defaultsApi, {}); |
| 28 defaults = defaults['map']; |
| 29 } |
| 24 isolate.updateHeapsFromMap(response['heaps']); | 30 isolate.updateHeapsFromMap(response['heaps']); |
| 25 for (S.ServiceMap clsAllocations in response['members']) { | 31 for (S.ServiceMap clsAllocations in response['members']) { |
| 26 S.Class cls = clsAllocations['class']; | 32 S.Class cls = clsAllocations['class']; |
| 27 if (cls == null) { | 33 if (cls == null) { |
| 28 continue; | 34 continue; |
| 29 } | 35 } |
| 30 cls.newSpace.update(clsAllocations['new']); | 36 cls.newSpace.update(clsAllocations['new']); |
| 31 cls.oldSpace.update(clsAllocations['old']); | 37 cls.oldSpace.update(clsAllocations['old']); |
| 32 } | 38 } |
| 33 return new AllocationProfile(response); | 39 return new AllocationProfile(response, defaults: defaults); |
| 34 } | 40 } |
| 35 } | 41 } |
| OLD | NEW |