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

Unified Diff: runtime/observatory/lib/src/repositories/sample_profile.dart

Issue 2771293003: Resubmission of native memory allocation info surfacing in Observatory. Fixed crashing tests and st… (Closed)
Patch Set: Added page to Observatory to display native memory allocation information. Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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..f98e0159d8b02f5003ebc86ce28cc4610dfc7612 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
- ? await cls.getAllocationSamples(_tagToString(tag))
- : await isolate
- .invokeRpc('_getCpuProfile', {'tags': _tagToString(tag)});
+ var response;
+ if (type == M.SampleProfileType.cpu) {
+ response = cls != null
+ ? await cls.getAllocationSamples(_tagToString(tag))
+ : 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,20 @@ 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;
+ }
+}
« no previous file with comments | « runtime/observatory/lib/src/models/repositories/sample_profile.dart ('k') | runtime/observatory/lib/src/service/object.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698