Skip to content

Commit d407d8a

Browse files
author
Cristian Levcovici
committed
Add VisibleDomainRelativePercent.Create overloads for TimeRange and ResourceTimeRange columns.
1 parent 36f83b0 commit d407d8a

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/Microsoft.Performance.SDK/Processing/Projection/ViewportRelativePercentProjection.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,54 @@ var columnRelativeToVisibleDomain
3434
return columnRelativeToVisibleDomain;
3535
}
3636

37+
/// <summary>
38+
/// Creates a projection that returns the percentage of the visible time consumed by this
39+
/// <see cref="TimeRange"/>.
40+
/// </summary>
41+
/// <param name="timeRangeColumn">
42+
/// Time range.
43+
/// </param>
44+
/// <returns>
45+
/// Percent of time consumed by the given time range in a given visible domain.
46+
/// </returns>
47+
public static IProjection<int, double> Create(
48+
IProjection<int, TimeRange> timeRangeColumn)
49+
{
50+
Guard.NotNull(timeRangeColumn, nameof(timeRangeColumn));
51+
52+
var aggregateRowsInVisibleDomainColumn
53+
= Projection.AggregateInVisibleDomain<TimeRange, TimestampDelta>(timeRangeColumn);
54+
55+
var columnRelativeToVisibleDomain
56+
= Percent.Create(timeRangeColumn.Compose(timeRange => timeRange.Duration), aggregateRowsInVisibleDomainColumn);
57+
58+
return columnRelativeToVisibleDomain;
59+
}
60+
61+
/// <summary>
62+
/// Creates a projection that returns the percentage of the visible time consumed by this
63+
/// <see cref="ResourceTimeRange"/>.
64+
/// </summary>
65+
/// <param name="resourceTimeRangeColumn">
66+
/// Resource time range.
67+
/// </param>
68+
/// <returns>
69+
/// Percent of time consumed by the given resource time range in a given visible domain.
70+
/// </returns>
71+
public static IProjection<int, double> Create(
72+
IProjection<int, ResourceTimeRange> resourceTimeRangeColumn)
73+
{
74+
Guard.NotNull(resourceTimeRangeColumn, nameof(resourceTimeRangeColumn));
75+
76+
var aggregateRowsInVisibleDomainColumn
77+
= Projection.AggregateInVisibleDomain<ResourceTimeRange, TimestampDelta>(resourceTimeRangeColumn);
78+
79+
var columnRelativeToVisibleDomain
80+
= Percent.Create(resourceTimeRangeColumn.Compose(resourceTimeRange => resourceTimeRange.Duration), aggregateRowsInVisibleDomainColumn);
81+
82+
return columnRelativeToVisibleDomain;
83+
}
84+
3785
/// <summary>
3886
/// Creates a projection that maps a percentage relative to an entire domain to a percentage
3987
/// relative to the current visible domain.

0 commit comments

Comments
 (0)