-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathExtensions.cs
More file actions
86 lines (77 loc) · 3.28 KB
/
Extensions.cs
File metadata and controls
86 lines (77 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright (c) TensorStack. All rights reserved.
// Licensed under the Apache 2.0 License.
using Microsoft.Extensions.Logging;
using System;
using System.Diagnostics;
using TensorStack.Common.Tensor;
using TensorStack.StableDiffusion.Common;
namespace TensorStack.StableDiffusion
{
public static class Extensions
{
/// <summary>
/// Notifies the specified message.
/// </summary>
/// <param name="progressCallback">The progress callback.</param>
/// <param name="message">The message.</param>
public static void Notify(this IProgress<GenerateProgress> progressCallback, string message)
{
progressCallback?.Report(new GenerateProgress(message));
}
/// <summary>
/// Notifies the specified message.
/// </summary>
/// <param name="progressCallback">The progress callback.</param>
/// <param name="message">The message.</param>
public static void Notify(this IProgress<GenerateProgress> progressCallback, GenerateProgress message)
{
progressCallback?.Report(message);
}
/// <summary>
/// Notifies the specified step.
/// </summary>
/// <param name="progressCallback">The progress callback.</param>
/// <param name="step">The step.</param>
/// <param name="steps">The steps.</param>
/// <param name="latents">The latents.</param>
/// <param name="elapsed">The elapsed.</param>
public static void Notify(this IProgress<GenerateProgress> progressCallback, int step, int steps, Tensor<float> latents, long elapsed)
{
progressCallback?.Report(new GenerateProgress
{
Max = steps,
Value = step,
Tensor = latents.Clone(),
Type = GenerateProgress.ProgressType.Step,
Message = $"Step: {step:D2}/{steps:D2}",
Elapsed = elapsed > 0 ? Stopwatch.GetElapsedTime(elapsed) : TimeSpan.Zero
});
}
/// <summary>
/// Log and return timestamp.
/// </summary>
/// <param name="logger">The logger.</param>
/// <param name="level">The level.</param>
/// <param name="message">The message.</param>
/// <param name="parameters">The parameters.</param>
public static long LogBegin(this ILogger logger, LogLevel level, string message, params object[] parameters)
{
logger?.Log(level, message, parameters);
return Stopwatch.GetTimestamp();
}
/// <summary>
/// Logs the end of scope with begin timestamp.
/// </summary>
/// <param name="logger">The logger.</param>
/// <param name="level">The level.</param>
/// <param name="timestamp">The timestamp.</param>
/// <param name="message">The message.</param>
/// <param name="parameters">The parameters.</param>
public static void LogEnd(this ILogger logger, LogLevel level, long timestamp, string message, params object[] parameters)
{
var elapsed = Stopwatch.GetElapsedTime(timestamp);
var formatted = string.Format(message, parameters);
logger?.Log(level, "{formatted}, Elapsed: {elapsed}", formatted, elapsed);
}
}
}