| Index: runtime/observatory/lib/src/repositories/sample_profile.dart | 
| diff --git a/runtime/observatory/lib/src/repositories/sample_profile.dart b/runtime/observatory/lib/src/repositories/sample_profile.dart | 
| index 5ad82824a65d5b4a86fb8581e7706ec7201249cc..e25693ec7a0b55a0419518d7254e23c795014c80 100644 | 
| --- a/runtime/observatory/lib/src/repositories/sample_profile.dart | 
| +++ b/runtime/observatory/lib/src/repositories/sample_profile.dart | 
| @@ -32,10 +32,11 @@ class SampleProfileLoadingProgress extends M.SampleProfileLoadingProgress { | 
| Stream<SampleProfileLoadingProgressEvent> get onProgress => | 
| _onProgress.stream; | 
|  | 
| -  final S.Isolate isolate; | 
| +  final ServiceObjectOwner owner; | 
| final S.Class cls; | 
| final M.SampleProfileTag tag; | 
| final bool clear; | 
| +  final M.SampleProfileType type; | 
|  | 
| M.SampleProfileLoadingStatus _status = M.SampleProfileLoadingStatus.fetching; | 
| double _progress = 0.0; | 
| @@ -49,21 +50,32 @@ class SampleProfileLoadingProgress extends M.SampleProfileLoadingProgress { | 
| Duration get loadingTime => _loadingTime.elapsed; | 
| CpuProfile get profile => _profile; | 
|  | 
| -  SampleProfileLoadingProgress(this.isolate, this.tag, this.clear, {this.cls}) { | 
| +  SampleProfileLoadingProgress(this.owner, this.tag, this.clear, | 
| +      {this.type: M.SampleProfileType.cpu, this.cls}) { | 
| _run(); | 
| } | 
|  | 
| Future _run() async { | 
| _fetchingTime.start(); | 
| try { | 
| -      if (clear) { | 
| -        await isolate.invokeRpc('_clearCpuProfile', {}); | 
| +      if (clear && (type == M.SampleProfileType.cpu)) { | 
| +        await owner.invokeRpc('_clearCpuProfile', {}); | 
| } | 
|  | 
| -      final response = cls != null | 
| +      var response; | 
| +      if (type == M.SampleProfileType.cpu) { | 
| +        response = cls != null | 
| ? await cls.getAllocationSamples(_tagToString(tag)) | 
| -          : await isolate | 
| +          : await owner | 
| .invokeRpc('_getCpuProfile', {'tags': _tagToString(tag)}); | 
| +      } else if (type == M.SampleProfileType.memory) { | 
| +        assert(owner is M.VM); | 
| +        M.VM vm = owner as M.VM; | 
| +        response = await owner.invokeRpc('_getNativeAllocationSamples', {'tags': | 
| +          _tagToString(tag)}); | 
| +      } else { | 
| +        throw new Exception('Unknown M.SampleProfileType: $type'); | 
| +      } | 
|  | 
| _fetchingTime.stop(); | 
| _loadingTime.start(); | 
| @@ -72,7 +84,7 @@ class SampleProfileLoadingProgress extends M.SampleProfileLoadingProgress { | 
|  | 
| CpuProfile profile = new CpuProfile(); | 
|  | 
| -      Stream<double> progress = profile.loadProgress(isolate, response); | 
| +      Stream<double> progress = profile.loadProgress(owner, response); | 
| progress.listen((value) { | 
| _progress = value; | 
| _triggerOnProgress(); | 
| @@ -124,7 +136,7 @@ class IsolateSampleProfileRepository | 
| assert(forceFetch != null); | 
| S.Isolate isolate = i as S.Isolate; | 
| assert(isolate != null); | 
| -    if (_last != null && !clear && !forceFetch && _last.isolate == isolate) { | 
| +    if ((_last != null) && !clear && !forceFetch && (_last.owner == isolate)) { | 
| _last.reuse(); | 
| } else { | 
| _last = new SampleProfileLoadingProgress(isolate, t, clear); | 
| @@ -156,3 +168,22 @@ class ClassSampleProfileRepository implements M.ClassSampleProfileRepository { | 
| return cls.setTraceAllocations(false); | 
| } | 
| } | 
| + | 
| +class NativeMemorySampleProfileRepository | 
| +    implements M.NativeMemorySampleProfileRepository { | 
| +  SampleProfileLoadingProgress _last; | 
| + | 
| +  Stream<SampleProfileLoadingProgressEvent> get( | 
| +      M.VM vm, M.SampleProfileTag t, {bool forceFetch: false}) { | 
| +    assert(forceFetch != null); | 
| +    if ((_last != null) && !forceFetch) { | 
| +      _last.reuse(); | 
| +    } else { | 
| +      _last = new SampleProfileLoadingProgress(vm, t, false, type: | 
| +          M.SampleProfileType.memory | 
| +          ); | 
| +    } | 
| +    return _last.onProgress; | 
| +  } | 
| +} | 
| + | 
|  |