Beispiel #1
0
    public DynamicTraceEventParser(TraceEventSource source)
        : base(source)
    {
        if (source == null)         // Happens during deserialization.
        {
            return;
        }

        // Try to retieve persisted state
        state = (DynamicTraceEventParserState)StateObject;
        if (state == null)
        {
            StateObject      = state = new DynamicTraceEventParserState();
            dynamicManifests = new Dictionary <Guid, DynamicManifestInfo>();

            this.source.RegisterUnhandledEvent(delegate(TraceEvent data)
            {
                if (data.Opcode != (TraceEventOpcode)0xFE)
                {
                    return;
                }
                if (data.ID != 0 && (byte)data.ID != 0xFE)     // Zero is for classic ETW.
                {
                    return;
                }

                // Look up our information.
                DynamicManifestInfo dynamicManifest;
                if (!dynamicManifests.TryGetValue(data.ProviderGuid, out dynamicManifest))
                {
                    dynamicManifest = new DynamicManifestInfo();
                    dynamicManifests.Add(data.ProviderGuid, dynamicManifest);
                }

                ProviderManifest provider = dynamicManifest.AddChunk(data);
                // We have a completed manifest, add it to our list.
                if (provider != null)
                {
                    AddProvider(provider);
                }
            });
        }
        else if (allCallbackCalled)
        {
            foreach (ProviderManifest provider in state.providers.Values)
            {
                provider.AddProviderEvents(source, allCallback);
            }
        }
    }
    public DynamicTraceEventParser(TraceEventSource source)
        : base(source)
    {
        if (source == null)         // Happens during deserialization.
            return;

        // Try to retieve persisted state
        state = (DynamicTraceEventParserState)StateObject;
        if (state == null)
        {
            StateObject = state = new DynamicTraceEventParserState();
            dynamicManifests = new Dictionary<Guid, DynamicManifestInfo>();

            this.source.RegisterUnhandledEvent(delegate(TraceEvent data)
            {
                if (data.Opcode != (TraceEventOpcode)0xFE)
                    return;
                if (data.ID != 0 && (byte) data.ID != 0xFE)    // Zero is for classic ETW.
                    return;

                // Look up our information.
                DynamicManifestInfo dynamicManifest;
                if (!dynamicManifests.TryGetValue(data.ProviderGuid, out dynamicManifest))
                {
                    dynamicManifest = new DynamicManifestInfo();
                    dynamicManifests.Add(data.ProviderGuid, dynamicManifest);
                }

                ProviderManifest provider = dynamicManifest.AddChunk(data);
                // We have a completed manifest, add it to our list.
                if (provider != null)
                    AddProvider(provider);
            });
        }
        else if (allCallbackCalled)
        {
            foreach (ProviderManifest provider in state.providers.Values)
                provider.AddProviderEvents(source, allCallback);
        }
    }