Exemple #1
0
        public async Task ExecuteAsync(IApplicationCommandExecutionContext context)
        {
            var executionStart      = DateTime.Now;
            var benchmarkDefinition = ContextOwner.SelectedBenchmarkDefinition;
            var benchmarkExecution  = BenchmarkExecutionFactory.CreateBenchmarkExecution(benchmarkDefinition) as BenchmarkExecution;
            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(benchmarkExecution) });

            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = string.Format(Properties.Resources.CreatingThreads, benchmarkDefinition.NumberOfCallsInParallel) });

            var initialTelemetryData = await TelemetryDataReader.ReadAsync(benchmarkDefinition);

            using (var client = HttpClientFactory.Create()) {
                var url = benchmarkDefinition.Url;
                if (!string.IsNullOrEmpty(url))
                {
                    client.BaseAddress = new Uri(url);
                }

                BenchmarkExecutionState firstBestExecutionState = null;
                switch (benchmarkDefinition.BenchmarkExecutionType)
                {
                case BenchmarkExecutionType.CsNative: {
                    var clientCopy      = client;
                    var tasks           = Enumerable.Range(1, benchmarkDefinition.NumberOfCallsInParallel).Select(t => ExecuteForThreadNativeCsAsync(context, benchmarkDefinition, benchmarkExecution, t, executionStart, clientCopy));
                    var executionStates = await Task.WhenAll(tasks);

                    firstBestExecutionState = executionStates[0];
                }
                break;

                case BenchmarkExecutionType.JavaScript: {
                    firstBestExecutionState = await ExecuteForThreadJavaScriptAsync(context, benchmarkDefinition, benchmarkExecution, executionStart, client);
                }
                break;
                }
                var finalTelemetryData = await TelemetryDataReader.ReadAsync(benchmarkDefinition);

                if (firstBestExecutionState != null && finalTelemetryData.Count != 0)
                {
                    firstBestExecutionState.RemoteRequiringForHowManySeconds = SecondsSpent(initialTelemetryData, finalTelemetryData, t => t.RequiringForHowManyMilliSeconds);
                    firstBestExecutionState.RemoteExecutingForHowManySeconds = SecondsSpent(initialTelemetryData, finalTelemetryData, t => t.ExecutingForHowManyMilliSeconds);
                    await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(firstBestExecutionState) });
                }
            }


            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = Properties.Resources.AllThreadsFinished });
        }
Exemple #2
0
        private async Task EndExecuteForThreadAsync(IApplicationCommandExecutionContext context, int threadNumber, DateTime executionStart, BenchmarkExecutionState benchmarkExecutionState)
        {
            benchmarkExecutionState.ExecutingForHowManySeconds = (int)Math.Floor((DateTime.Now - executionStart).TotalSeconds);
            benchmarkExecutionState.Finished = true;
            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(benchmarkExecutionState) });

            await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = string.Format(Properties.Resources.FinishedThread, threadNumber) });
        }
Exemple #3
0
        private async Task <BenchmarkExecutionState> JavaScriptFinishedAsync(int contentAsNumber, IApplicationCommandExecutionContext context, DateTime executionStart, BenchmarkExecutionState benchmarkExecutionState)
        {
            benchmarkExecutionState.Successes = contentAsNumber;

            await EndExecuteForThreadAsync(context, 1, executionStart, benchmarkExecutionState);

            return(benchmarkExecutionState);
        }