public IBenchmarkExecutionState CreateBenchmarkExecutionState(IBenchmarkExecution benchmarkExecution, int threadNumber) { if (string.IsNullOrEmpty(benchmarkExecution.Guid)) { throw new NullReferenceException("benchmarkExecution.Guid"); } return(new BenchmarkExecutionState { SequenceNumber = vSequenceNumberGenerator.NewSequenceNumber(nameof(BenchmarkExecutionState)), BenchmarkExecutionGuid = benchmarkExecution.Guid, ThreadNumber = threadNumber, ExecutingForHowManySeconds = 0, Failures = 0, Successes = 0, RemoteExecutingForHowManySeconds = 0, RemoteRequiringForHowManySeconds = 0, Finished = false, }); }
private async Task <ExtendedBenchmarkExecutionState> BeginExecuteForThreadAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, int threadNumber, DateTime executionStart) { var result = new ExtendedBenchmarkExecutionState(); result.BenchmarkExecutionState = BenchmarkExecutionFactory.CreateBenchmarkExecutionState(benchmarkExecution, threadNumber) as BenchmarkExecutionState; if (result.BenchmarkExecutionState == null) { throw new NullReferenceException(); } result.ThreadExecutionEnd = executionStart.AddSeconds(benchmarkDefinition.ExecutionTimeInSeconds); await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(result.BenchmarkExecutionState) }); await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = string.Format(Properties.Resources.CreatedThread, threadNumber) }); return(result); }
private async Task <BenchmarkExecutionState> ExecuteForThreadNativeCsAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, int threadNumber, DateTime executionStart, IHttpClient client) { var result = await BeginExecuteForThreadAsync(context, benchmarkDefinition, benchmarkExecution, threadNumber, executionStart); var benchmarkExecutionState = result.BenchmarkExecutionState; var threadExecutionEnd = result.ThreadExecutionEnd; var counter = 0; do { if (string.IsNullOrEmpty(benchmarkDefinition.Url)) { Thread.Sleep(TimeSpan.FromMilliseconds(500)); } else { try { var requestedAt = DateTime.Now; await client.GetStringAsync("?g=" + Guid.NewGuid()); var requestDuration = DateTime.Now.Subtract(requestedAt); await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.LogInformation, Message = string.Format(Properties.Resources.WebRequestFinished, (int)requestDuration.TotalMilliseconds, threadNumber) }); benchmarkExecutionState.Successes++; } catch { benchmarkExecutionState.Failures++; } } benchmarkExecutionState.ExecutingForHowManySeconds = (int)Math.Floor((DateTime.Now - executionStart).TotalSeconds); counter = (counter + 1) % 10; if (counter == 1) { await context.ReportAsync(new FeedbackToApplication { Type = FeedbackType.ImportantMessage, Message = XmlSerializer.Serialize(benchmarkExecutionState) }); } } while (DateTime.Now < threadExecutionEnd); await EndExecuteForThreadAsync(context, threadNumber, executionStart, benchmarkExecutionState); return(benchmarkExecutionState); }
private async Task <BenchmarkExecutionState> ExecuteForThreadJavaScriptAsync(IApplicationCommandExecutionContext context, IBenchmarkDefinition benchmarkDefinition, IBenchmarkExecution benchmarkExecution, DateTime executionStart, IHttpClient client) { var jQueryScript = await client.GetStringAsync("http://code.jquery.com/jquery-2.0.0.min.js"); var html = @"<!DOCTYPE html><html><head><meta http-equiv='X-UA-Compatible' content='IE=edge;chrome=1' /><script type='text/javascript'>" + jQueryScript + ' ' + @"$(document).ready(function() { executionEndTime = new Date(); executionEndTime.setSeconds(executionEndTime.getSeconds() + " + benchmarkDefinition.ExecutionTimeInSeconds + @"); successes = 0; function callAsManyTimesAsPossible(x) { " + @"$.ajax({ url: '" + benchmarkDefinition.Url + @"', cache: false, async: true }).success(function(text) { " + @"successes ++; currentTime = new Date(); if (currentTime <= executionEndTime) { callAsManyTimesAsPossible(x); } else { $(""#content"").html(successes); } " + @"}); } [" + string.Join(",", Enumerable.Range(1, benchmarkDefinition.NumberOfCallsInParallel)) + @"].forEach(function(x) { callAsManyTimesAsPossible(x); }); }); </script> </head><body lang='en'><div id='content'>Please wait..</div></body></html>"; var benchmarkExecutionState = (await BeginExecuteForThreadAsync(context, benchmarkDefinition, benchmarkExecution, 1, executionStart)).BenchmarkExecutionState; // var task = Task.Factory.StartNew(() => ContextOwner.NavigateToStringReturnContentAsNumber(html)); // return await task.ContinueWith(t => JavaScriptFinishedAsync(t, context, executionStart, benchmarkExecutionState)); return(await JavaScriptFinishedAsync(ContextOwner.NavigateToStringReturnContentAsNumber(html), context, executionStart, benchmarkExecutionState)); }