示例#1
0
        /// <summary>
        /// Compiles the method referenced by this method compiler.
        /// </summary>
        public void Compile()
        {
            MethodData.HasCode = false;

            if (Method.IsCompilerGenerated)
            {
                IsCILDecodeRequired  = false;
                IsStackFrameRequired = false;
            }

            //Debug.WriteLine($"{MethodScheduler.GetTimestamp()} - Compiling: [{MethodData.Version}] {Method}"); //DEBUGREMOVE

            PlugMethod();

            PatchDelegate();

            ExternalMethod();

            InternalMethod();

            ExecutePipeline();

            //Debug.WriteLine($"{MethodScheduler.GetTimestamp()} - Compiled: [{MethodData.Version}] {Method}"); //DEBUGREMOVE

            Symbol.SetReplacementStatus(MethodData.Inlined);

            if (Statistics)
            {
                var log = new TraceLog(TraceType.MethodCounters, Method, string.Empty, MethodData.Version);
                log.Log(MethodData.Counters.Export());

                Compiler.PostTraceLog(log);
            }
        }
示例#2
0
        public void Complete()
        {
            if (!IsEnabled)
            {
                return;
            }

            if (!Compiler.Statistics)
            {
                return;
            }

            MoreLogInfo();

            Debug.WriteLine(trace?.ToString());             // REMOVE

            int totalTypes   = 0;
            int totalMethods = 0;

            foreach (var type in TypeSystem.AllTypes)
            {
                if (type.IsModule)
                {
                    continue;
                }

                totalTypes++;

                foreach (var method in type.Methods)
                {
                    if ((!(!method.HasImplementation && method.IsAbstract)) && !method.HasOpenGenericParams && !method.DeclaringType.HasOpenGenericParams)
                    {
                        totalMethods++;
                    }
                }
            }

            Compiler.GlobalCounters.Update("MethodScanner.TotalTypes", totalTypes);
            Compiler.GlobalCounters.Update("MethodScanner.TotalMethods", totalMethods);

            Compiler.GlobalCounters.Update("MethodScanner.AllocatedTypes", allocatedTypes.Count);
            Compiler.GlobalCounters.Update("MethodScanner.InvokedMethods", invokedMethods.Count);
            Compiler.GlobalCounters.Update("MethodScanner.ScheduledMethods", scheduledMethods.Count);
            Compiler.GlobalCounters.Update("MethodScanner.AccessedFields", accessedFields.Count);
            Compiler.GlobalCounters.Update("MethodScanner.InvokedInterfaceType", invokedInteraceTypes.Count);

            Compiler.PostTraceLog(trace);
        }
示例#3
0
        /// <summary>
        /// Compiles the method referenced by this method compiler.
        /// </summary>
        public void Compile()
        {
            PlugMethod();

            PatchDelegate();

            ExternalMethod();

            InternalMethod();

            ExecutePipeline();

            Symbol.SetReplacementStatus(MethodData.Inlined);

            if (Statistics)
            {
                var log = new TraceLog(TraceType.MethodCounters, Method, string.Empty, MethodData.Version);
                log.Log(MethodData.Counters.Export());

                Compiler.PostTraceLog(log);
            }
        }
示例#4
0
 private void PostTraceLog(TraceLog traceLog)
 {
     Compiler.PostTraceLog(traceLog);
 }
示例#5
0
 protected void PostTraceLog(TraceLog traceLog)
 {
     Compiler.PostTraceLog(traceLog);
 }