blob: 5298122dbd529de05d95d3cc39e3f11fd4754b81 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
#ifndef __EVENTPIPE_EVENTINSTANCE_H__
#define __EVENTPIPE_EVENTINSTANCE_H__
#ifdef FEATURE_PERFTRACING
#include "eventpipe.h"
#include "eventpipeevent.h"
#include "eventpipesession.h"
#include "fastserializableobject.h"
#include "fastserializer.h"
class EventPipeEventInstance
{
// Declare friends.
friend EventPipeConfiguration;
public:
EventPipeEventInstance(EventPipeSession &session, EventPipeEvent &event, DWORD threadID, BYTE *pData, unsigned int length, LPCGUID pActivityId, LPCGUID pRelatedActivityId);
// Get the event associated with this instance.
EventPipeEvent* GetEvent() const;
// Get the stack contents object to either read or write to it.
StackContents* GetStack();
// Get the timestamp.
LARGE_INTEGER GetTimeStamp() const;
// Get a pointer to the data payload.
BYTE* GetData() const;
// Get the length of the data.
unsigned int GetLength() const;
// Serialize this object using FastSerialization.
void FastSerialize(FastSerializer *pSerializer, StreamLabel metadataLabel);
#ifdef _DEBUG
// Serialize this event to the JSON file.
void SerializeToJsonFile(EventPipeJsonFile *pFile);
bool EnsureConsistency();
#endif // _DEBUG
protected:
#ifdef _DEBUG
unsigned int m_debugEventStart;
#endif // _DEBUG
EventPipeEvent *m_pEvent;
DWORD m_threadID;
LARGE_INTEGER m_timeStamp;
GUID m_activityId;
GUID m_relatedActivityId;
BYTE *m_pData;
unsigned int m_dataLength;
StackContents m_stackContents;
#ifdef _DEBUG
unsigned int m_debugEventEnd;
#endif // _DEBUG
private:
// This is used for metadata events by EventPipeConfiguration because
// the metadata event is created after the first instance of the event
// but must be inserted into the file before the first instance of the event.
void SetTimeStamp(LARGE_INTEGER timeStamp);
};
// A specific type of event instance for use by the SampleProfiler.
// This is needed because the SampleProfiler knows how to walk stacks belonging
// to threads other than the current thread.
class SampleProfilerEventInstance : public EventPipeEventInstance
{
public:
SampleProfilerEventInstance(EventPipeSession &session, EventPipeEvent &event, Thread *pThread, BYTE *pData, unsigned int length);
};
#endif // FEATURE_PERFTRACING
#endif // __EVENTPIPE_EVENTINSTANCE_H__
|