Exemplo n.º 1
0
        internal static unsafe ulong Enable(
            string?outputFile,
            EventPipeSerializationFormat format,
            uint circularBufferSizeInMB,
            EventPipeProviderConfiguration[] providers)
        {
            Span <EventPipeProviderConfigurationNative> providersNative = new Span <EventPipeProviderConfigurationNative>((void *)Marshal.AllocCoTaskMem(sizeof(EventPipeProviderConfigurationNative) * providers.Length), providers.Length);

            providersNative.Clear();

            try
            {
                for (int i = 0; i < providers.Length; i++)
                {
                    EventPipeProviderConfigurationNative.MarshalToNative(providers[i], ref providersNative[i]);
                }

                fixed(char *outputFilePath = outputFile)
                fixed(EventPipeProviderConfigurationNative * providersNativePointer = providersNative)
                {
                    return(Enable(outputFilePath, format, circularBufferSizeInMB, providersNativePointer, (uint)providersNative.Length));
                }
            }
            finally
            {
                for (int i = 0; i < providers.Length; i++)
                {
                    providersNative[i].Release();
                }

                fixed(EventPipeProviderConfigurationNative *providersNativePointer = providersNative)
                {
                    Marshal.FreeCoTaskMem((IntPtr)providersNativePointer);
                }
            }
        }
Exemplo n.º 2
0
 internal static void MarshalToNative(EventPipeProviderConfiguration managed, ref EventPipeProviderConfigurationNative native)
 {
     native.m_pProviderName = (char *)Marshal.StringToCoTaskMemUni(managed.ProviderName);
     native.m_keywords      = managed.Keywords;
     native.m_loggingLevel  = managed.LoggingLevel;
     native.m_pFilterData   = (char *)Marshal.StringToCoTaskMemUni(managed.FilterData);
 }