Skip to content

Commit a4cdfc6

Browse files
committed
Added support for proper box plot display
1 parent 33f4875 commit a4cdfc6

9 files changed

+461
-326
lines changed

source/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ set(SOURCES
2929
model/generic_tree_item.h
3030
model/generic_tree_model.cpp
3131
model/generic_tree_model.h
32-
model/performance_data.cpp
33-
model/performance_data.h
3432
model/recently_opened.cpp
3533
model/recently_opened.h
3634
model/telemetry_container.cpp
@@ -40,6 +38,9 @@ set(SOURCES
4038
utilities/color.h
4139
utilities/data_decimator.cpp
4240
utilities/data_decimator.h
41+
utilities/performance_calculator.cpp
42+
utilities/performance_calculator.h
43+
utilities/providers.h
4344
utilities/settings.cpp
4445
utilities/settings.h
4546
utilities/xplane_installations.cpp

source/model/performance_data.cpp

Lines changed: 0 additions & 116 deletions
This file was deleted.

source/model/performance_data.h

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//
2+
// Created by Sidney on 12/03/2024.
3+
//
4+
5+
#include "performance_calculator.h"
6+
7+
performance_calculator::performance_calculator(const telemetry_provider_field &field, uint32_t start, uint32_t end)
8+
{
9+
m_samples = field.get_data_points_in_range(start, end);
10+
11+
std::sort(m_samples.begin(), m_samples.end(), [](const telemetry_data_point &lhs, const telemetry_data_point &rhs) {
12+
return lhs.value.toDouble() < rhs.value.toDouble();
13+
});
14+
}
15+
16+
double performance_calculator::calculate_average() const
17+
{
18+
if(m_samples.isEmpty())
19+
return 0.0;
20+
21+
double sum = 0.0;
22+
23+
for(const auto &sample : m_samples)
24+
sum += sample.value.toDouble();
25+
26+
return sum / m_samples.size();
27+
}
28+
29+
double performance_calculator::calculate_percentile(float percentile) const
30+
{
31+
if(m_samples.isEmpty())
32+
return 0.0;
33+
34+
double total_time = 0.0;
35+
36+
for(const auto &sample : m_samples)
37+
total_time += sample.value.toDouble();
38+
39+
const double needle = total_time * percentile;
40+
41+
total_time = 0.0;
42+
43+
for(const auto &sample : m_samples)
44+
{
45+
if(total_time >= needle)
46+
return sample.value.toDouble();
47+
48+
total_time += sample.value.toDouble();
49+
}
50+
51+
return m_samples.back().value.toDouble();
52+
}
53+
54+
double performance_calculator::get_median_value(size_t start, size_t end) const
55+
{
56+
Q_ASSERT(start < m_samples.size());
57+
Q_ASSERT(end < m_samples.size());
58+
59+
const size_t count = end - start;
60+
const size_t half = count / 2;
61+
62+
if(count & 0x1)
63+
{
64+
const double right = m_samples[half + start].value.toDouble();
65+
const double left = m_samples[half - 1 + start].value.toDouble();
66+
67+
return (right + left) / 2.0;
68+
}
69+
70+
return m_samples[half + start].value.toDouble();
71+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//
2+
// Created by Sidney on 12/03/2024.
3+
//
4+
5+
#ifndef PERFORMANCE_DATA_H
6+
#define PERFORMANCE_DATA_H
7+
8+
#include "../model/telemetry_container.h"
9+
10+
class performance_calculator
11+
{
12+
public:
13+
performance_calculator(const telemetry_provider_field &field, uint32_t start, uint32_t end);
14+
15+
size_t get_sample_count() const { return m_samples.size(); }
16+
17+
double calculate_average() const;
18+
double calculate_percentile(float percentile) const;
19+
20+
double get_sample(size_t index) const { return m_samples.at(index).value.toDouble(); }
21+
double get_median_value(size_t start, size_t end) const;
22+
23+
double get_minimum() const { return m_samples.first().value.toDouble(); }
24+
double get_maximum() const { return m_samples.last().value.toDouble(); }
25+
26+
private:
27+
QVector<telemetry_data_point> m_samples;
28+
};
29+
30+
#endif //PERFORMANCE_DATA_H

source/utilities/providers.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// Created by Sidney on 08/12/2024.
3+
//
4+
5+
#ifndef PROVIDERS_H
6+
#define PROVIDERS_H
7+
8+
#include "../model/telemetry_container.h"
9+
10+
struct provider_timing
11+
{
12+
static inline const char *identifier = "com.laminarresearch.test_main_class";
13+
14+
enum field_id
15+
{
16+
cpu,
17+
gpu,
18+
fps,
19+
time,
20+
plugin,
21+
};
22+
23+
static const telemetry_provider_field &get_field(const telemetry_container &container, field_id id) { return container.find_provider(identifier).find_field(uint8_t(id)); }
24+
};
25+
26+
struct provider_sim_apup
27+
{
28+
static inline const char *identifier = "com.laminarresarch.sim_apup";
29+
30+
enum field_id
31+
{
32+
do_world,
33+
do_world_3d,
34+
loaded_aircraft
35+
};
36+
37+
static const telemetry_provider_field &get_field(const telemetry_container &container, field_id id) { return container.find_provider(identifier).find_field(uint8_t(id)); }
38+
};
39+
40+
#endif //PROVIDERS_H

0 commit comments

Comments
 (0)