// 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. #include "common.h" #include "eventpipemetadatagenerator.h" #include "eventpipe.h" #ifdef FEATURE_PERFTRACING BYTE* EventPipeMetadataGenerator::GenerateEventMetadata( unsigned int eventID, LPCWSTR pEventName, INT64 keywords, unsigned int version, EventPipeEventLevel level, EventPipeParameterDesc *pParams, unsigned int paramCount, size_t &metadataLength) { CONTRACTL { THROWS; GC_NOTRIGGER; MODE_ANY; PRECONDITION(pEventName != NULL); PRECONDITION(paramCount == 0 || pParams != NULL); } CONTRACTL_END; // eventID : 4 bytes // eventName : (eventName.Length + 1) * 2 bytes // keywords : 8 bytes // eventVersion : 4 bytes // level : 4 bytes // parameterCount : 4 bytes size_t eventNameLength = wcslen(pEventName); metadataLength = 24 + ((eventNameLength + 1) * sizeof(WCHAR)); // Each parameter has a 4 byte TypeCode + (parameterName.Length + 1) * 2 bytes. for(unsigned int i=0; iType; pCurrent += sizeof(unsigned int); size_t parameterNameLength = wcslen(pParam->Name); wcsncpy((WCHAR *)pCurrent, pParam->Name, parameterNameLength); pCurrent += parameterNameLength * sizeof(WCHAR); *((WCHAR *)pCurrent) = W('\0'); pCurrent += sizeof(WCHAR); } _ASSERTE(metadataLength == (pCurrent - pMetadata)); return pMetadata; } #endif // FEATURE_PERFTRACING