public MutatorContext(RuntimeGlobalAccessorImpl runtime)
 {
     _runtime = runtime;
 }
示例#2
0
        private static void DoWork(IAutoMemoryManagerFabric gcFabric, GcSimulatorConfigurationType cfg)
        {
            Console.WriteLine("Using GC " + gcFabric.Name);

            var p = new MutatorParameters();

            foreach (var item in cfg.Probabilities.Items.OrderBy(e => e.StackDepth))
            {
                var entry = new MutatorParametersEntry();
                entry.StackDepth = item.StackDepth;

                foreach (var attr in item.AnyAttr)
                {
                    if (Enum.TryParse <MutatorActionKind>(attr.LocalName, true, out var actionKind) && int.TryParse(attr.Value, out var value))
                    {
                        entry.SetValue(actionKind, value);
                    }
                }

                p.Add(entry);
            }

            ////var p = new MutatorParameters() {
            ////    // stackDepth,
            ////    // |   callProbability,
            ////    // |   |    returnProbability,
            ////    // |   |    |     newobjProbability,
            ////    // |   |    |     |   putStatic,
            ////    // |   |    |     |   |   changeStatic,
            ////    // |   |    |     |   |   |   eraseStatic,
            ////    // |   |    |     |   |   |   |   putRefProbability,
            ////    // |   |    |     |   |   |   |   |   changeRefProbability,
            ////    // |   |    |     |   |   |   |   |   |   eraseRefProbabilty
            ////    // |   |    |     |   |   |   |   |   |   |
            ////    { 0,   100, 0,    75, 10, 10, 10, 90, 90, 90 },
            ////    { 100, 100, 100,  75, 10, 10, 10, 90, 90, 90 }
            ////};
            ////p.Mode = MutatorParametersModeKind.Sequence;

            //var p = new MutatorParameters() {
            //    // stackDepth,
            //    // |   callProbability,
            //    // |   |    returnProbability,
            //    // |   |    |     newobjProbability,
            //    // |   |    |     |   putStatic,
            //    // |   |    |     |   |   changeStatic,
            //    // |   |    |     |   |   |   eraseStatic,
            //    // |   |    |     |   |   |   |   putRefProbability,
            //    // |   |    |     |   |   |   |   |   changeRefProbability,
            //    // |   |    |     |   |   |   |   |   |   eraseRefProbabilty
            //    // |   |    |     |   |   |   |   |   |   |
            //    { 0,   20,  00,   20, 10, 10, 10, 10, 10, 10 },
            //    { 100, 10,  10,   20, 10, 10, 10, 10, 10, 10 },
            //};
            //p.Mode = MutatorParametersModeKind.Flat;


            using (var runtime = new RuntimeGlobalAccessorImpl(gcFabric))
            {
                var mutatorCtx = new MutatorContext(runtime);
                var m          = mutatorCtx.CreateMutator(null, p);

                var mutatorWorkingEv = new ManualResetEvent(true);

                runtime.GetRoots      += () => m.GetRoots().ToArray();
                runtime.StopRequested += () => mutatorWorkingEv.Reset();
                runtime.StopReleased  += () => mutatorWorkingEv.Set();

                var mutatorThread = new Thread(() => {
                    foreach (var item in m.DoWork())
                    {
                        Console.WriteLine(item);
                        mutatorWorkingEv.WaitOne();
                    }
                });

                mutatorThread.Start();

                mutatorThread.Join();
            }
        }