예제 #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.ID != (TraceEventID)0xFFFE)
                        return data;

                    // 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)
                    {
                        AddDynamicProvider(provider);
                        //SLAB update
                        this.ManifestReceived(provider);
                    }

                    return data;
                });
            }
            else if (allCallbackCalled)
            {
                foreach (ProviderManifest provider in state.providers.Values)
                    provider.AddProviderEvents(source, allCallback);
            }
        }