Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo.moya@xamarin.com>2017-09-07 23:16:13 +0300
committerRodrigo Moya <rodrigo@gnome.org>2017-09-14 02:20:13 +0300
commit05bd5d300445adabcbc56cc81de383590db37285 (patch)
treecd3bd1bf6dcefadcd08cf7fbb669b2e3d7d84459 /mcs/class/Mono.Profiler.Log
parent2709ca7625d75e5b3cf8eac8a34b95395bd15c46 (diff)
[Mono.Profiler.Log] Support MLPD version 13
The differences from v14 are small, and given it is the current "stable" MLPD version, it's worth supporting it. The differences are: * ImagePointer field not present in v13 Assembly*Event's * In MonitorEvent, LogMonitorEvent is not in a separate field, but included as a flag in the extType field. * SampleHitEvent's have a type field in v13, which was removed in v14, because only cycles samples are emitted. * MONO_GC_EVENT_{MARK,RECLAIM}_{START,END} were removed in v14 * SampleUnmanagedBinary's SegmentPointer is not based on ptr_base in v13 * In v13, HeapRootsEvent's Attributes is (wrongly) a byte, in v14 this was fixed and changed back to a uleb128
Diffstat (limited to 'mcs/class/Mono.Profiler.Log')
-rw-r--r--mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogEnums.cs5
-rw-r--r--mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogProcessor.cs27
2 files changed, 25 insertions, 7 deletions
diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogEnums.cs b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogEnums.cs
index 9772f224ff6..9fc47b470f0 100644
--- a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogEnums.cs
+++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogEnums.cs
@@ -173,6 +173,11 @@ namespace Mono.Profiler.Log {
PreStartWorld = 8,
PostStartWorld = 9,
PostStartWorldUnlocked = 11,
+ // Following are v13 and older only
+ MarkBegin = 1,
+ MarkEnd = 2,
+ ReclaimBegin = 3,
+ ReclaimEnd = 4
}
// mono/metadata/mono-gc.h : MonoGCHandleType
diff --git a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogProcessor.cs b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogProcessor.cs
index f6928f74505..5da4229538f 100644
--- a/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogProcessor.cs
+++ b/mcs/class/Mono.Profiler.Log/Mono.Profiler.Log/LogProcessor.cs
@@ -230,13 +230,13 @@ namespace Mono.Profiler.Log {
if (load) {
ev = new AssemblyLoadEvent {
AssemblyPointer = ReadPointer (),
- ImagePointer = ReadPointer (),
+ ImagePointer = StreamHeader.FormatVersion >= 14 ? ReadPointer () : 0,
Name = Reader.ReadCString (),
};
} else if (unload) {
ev = new AssemblyUnloadEvent {
AssemblyPointer = ReadPointer (),
- ImagePointer = ReadPointer (),
+ ImagePointer = StreamHeader.FormatVersion >= 14 ? ReadPointer () : 0,
Name = Reader.ReadCString (),
};
} else
@@ -336,7 +336,7 @@ namespace Mono.Profiler.Log {
Type = (LogExceptionClause) Reader.ReadByte (),
Index = (long) Reader.ReadULeb128 (),
MethodPointer = ReadMethod (),
- ObjectPointer = ReadObject (),
+ ObjectPointer = StreamHeader.FormatVersion >= 14 ? ReadObject () : 0,
};
break;
default:
@@ -344,11 +344,20 @@ namespace Mono.Profiler.Log {
}
break;
case LogEventType.Monitor:
+ if (StreamHeader.FormatVersion < 14) {
+ if (extType.HasFlag (LogEventType.MonitorBacktrace)) {
+ extType = LogEventType.MonitorBacktrace;
+ } else {
+ extType = LogEventType.MonitorNoBacktrace;
+ }
+ }
switch (extType) {
case LogEventType.MonitorNoBacktrace:
case LogEventType.MonitorBacktrace:
ev = new MonitorEvent {
- Event = (LogMonitorEvent) Reader.ReadByte (),
+ Event = StreamHeader.FormatVersion >= 14 ?
+ (LogMonitorEvent) Reader.ReadByte () :
+ (LogMonitorEvent) ((((byte) type & 0xf0) >> 4) & 0x3),
ObjectPointer = ReadObject (),
Backtrace = ReadBacktrace (extType == LogEventType.MonitorBacktrace),
};
@@ -397,7 +406,7 @@ namespace Mono.Profiler.Log {
for (var i = 0; i < list.Length; i++) {
list [i] = new HeapRootsEvent.HeapRoot {
ObjectPointer = ReadObject (),
- Attributes = (LogHeapRootAttributes) Reader.ReadULeb128 (),
+ Attributes = StreamHeader.FormatVersion == 13 ? (LogHeapRootAttributes) Reader.ReadByte () : (LogHeapRootAttributes) Reader.ReadULeb128 (),
ExtraInfo = (long) Reader.ReadULeb128 (),
};
}
@@ -414,9 +423,13 @@ namespace Mono.Profiler.Log {
case LogEventType.Sample:
switch (extType) {
case LogEventType.SampleHit:
+ if (StreamHeader.FormatVersion < 14) {
+ // Read SampleType (always set to .Cycles) for versions < 14
+ Reader.ReadByte ();
+ }
ev = new SampleHitEvent {
ThreadId = ReadPointer (),
- UnmanagedBacktrace = ReadBacktrace (true, false),
+ UnmanagedBacktrace = ReadBacktrace (true, false), // FIXME: isn't this reversed?
ManagedBacktrace = ReadBacktrace (true),
};
break;
@@ -429,7 +442,7 @@ namespace Mono.Profiler.Log {
break;
case LogEventType.SampleUnmanagedBinary:
ev = new UnmanagedBinaryEvent {
- SegmentPointer = ReadPointer (),
+ SegmentPointer = StreamHeader.FormatVersion >= 14 ? ReadPointer () : Reader.ReadSLeb128 (),
SegmentOffset = (long) Reader.ReadULeb128 (),
SegmentSize = (long) Reader.ReadULeb128 (),
FileName = Reader.ReadCString (),