• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

daisytuner / sdfglib / 18495103886

14 Oct 2025 11:32AM UTC coverage: 61.523% (-0.2%) from 61.682%
18495103886

push

github

web-flow
Optimization Report (#275)

* define initial draft

* local static variable

* extend to loop structure and possible targets

* restructure

* remove maps

* follow new api

* remove singelton

2 of 41 new or added lines in 4 files covered. (4.88%)

9111 of 14809 relevant lines covered (61.52%)

103.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/optimization_report/optimization_report.cpp
1
#include "sdfg/optimization_report/optimization_report.h"
2

3
#include <nlohmann/json_fwd.hpp>
4
#include <sdfg/analysis/analysis.h>
5
#include <sdfg/analysis/loop_analysis.h>
6
#include "sdfg/serializer/json_serializer.h"
7
#include "sdfg/structured_control_flow/map.h"
8
#include "sdfg/structured_sdfg.h"
9

10

11
namespace sdfg {
12

NEW
13
OptimizationReport::OptimizationReport(StructuredSDFG& sdfg, bool aggregate)
×
NEW
14
    : sdfg_(sdfg), report_(nlohmann::json::object()), aggregate_(aggregate) {
×
NEW
15
    analysis::AnalysisManager manager(sdfg);
×
NEW
16
    auto& loop_analysis = manager.get<analysis::LoopAnalysis>();
×
17

18
    // Add outermost loops
NEW
19
    report_["regions"] = nlohmann::json::array();
×
NEW
20
    report_["type"] = aggregate ? "aggregate" : "detailed";
×
21

NEW
22
    for (int i = 0; i < loop_analysis.outermost_loops().size(); i++) {
×
NEW
23
        nlohmann::json loop_json;
×
NEW
24
        auto loop = loop_analysis.outermost_loops().at(i);
×
NEW
25
        loop_json["loopnest_index"] = i;
×
NEW
26
        loop_json["element_id"] = loop->element_id();
×
NEW
27
        serializer::JSONSerializer serializer;
×
NEW
28
        nlohmann::json debug_info;
×
NEW
29
        serializer.debug_info_to_json(debug_info, loop->debug_info());
×
NEW
30
        loop_json["debug_info"] = debug_info;
×
31

NEW
32
        if (auto while_loop = dynamic_cast<const structured_control_flow::While*>(loop)) {
×
NEW
33
            loop_json["type"] = "while";
×
NEW
34
        } else if (auto for_loop = dynamic_cast<const structured_control_flow::For*>(loop)) {
×
NEW
35
            loop_json["type"] = "for";
×
NEW
36
        } else if (auto map = dynamic_cast<const structured_control_flow::Map*>(loop)) {
×
NEW
37
            loop_json["type"] = "map";
×
NEW
38
        }
×
NEW
39
        report_["regions"].push_back(loop_json);
×
NEW
40
    }
×
NEW
41
}
×
42

43

NEW
44
nlohmann::json OptimizationReport::get_report() { return report_; }
×
45

NEW
46
void OptimizationReport::add_pass_entry(const std::string& pass_name, long duration, bool applied) {
×
47
    /* if (!aggregate_) {
48
        if (!report_.contains("passes")) {
49
            report_["passes"] = nlohmann::json::array();
50
        }
51
        nlohmann::json pass_json;
52
        pass_json["name"] = pass_name;
53
        pass_json["duration_us"] = duration;
54
        pass_json["applied"] = applied;
55
        report_["passes"].push_back(pass_json);
56
    } else {
57
        if (!report_.contains("passes")) {
58
            report_["passes"] = nlohmann::json::object();
59
        }
60
        if (!report_["passes"].contains(pass_name)) {
61
            report_["passes"][pass_name] = nlohmann::json::object();
62
            report_["passes"][pass_name]["count"] = 0;
63
            report_["passes"][pass_name]["total_duration_us"] = 0;
64
        }
65
        report_["passes"][pass_name]["count"] = report_["passes"][pass_name]["count"].get<int>() + 1;
66
        report_["passes"][pass_name]["total_duration_us"] =
67
    report_["passes"][pass_name]["total_duration_us"].get<long>() + duration;
68
    } */
NEW
69
}
×
70

NEW
71
void OptimizationReport::add_transformation_entry(
×
72
    const std::string& transformation_name, long apply_duration, const nlohmann::json& transformation_desc
73
) {
74
    /* if (!aggregate_) {
75
        if (!report_.contains("transformations")) {
76
            report_["transformations"] = nlohmann::json::array();
77
        }
78
        nlohmann::json transformation_json;
79
        transformation_json["name"] = transformation_name;
80
        transformation_json["duration_us"] = apply_duration;
81
        transformation_json["description"] = transformation_desc;
82
        report_["transformations"].push_back(transformation_json);
83
    } else {
84
        if (!report_.contains("transformations")) {
85
            report_["transformations"] = nlohmann::json::object();
86
        }
87
        if (!report_["transformations"].contains(transformation_name)) {
88
            report_["transformations"][transformation_name] = nlohmann::json::object();
89
            report_["transformations"][transformation_name]["count"] = 0;
90
            report_["transformations"][transformation_name]["total_duration_us"] = 0;
91
        }
92
        report_["transformations"][transformation_name]["count"] =
93
    report_["transformations"][transformation_name]["count"].get<int>() + 1;
94
        report_["transformations"][transformation_name]["total_duration_us"] =
95
    report_["transformations"][transformation_name]["total_duration_us"].get<long>() + apply_duration;
96
    } */
NEW
97
}
×
98

99
void OptimizationReport::
NEW
100
    add_target_test(size_t loopnest_index, structured_control_flow::ScheduleType schedule_type, bool success) {
×
NEW
101
    if (!report_["regions"].at(loopnest_index).contains("targets")) {
×
NEW
102
        report_["regions"].at(loopnest_index)["targets"] = nlohmann::json::object();
×
NEW
103
    }
×
NEW
104
    report_["regions"].at(loopnest_index)["targets"][schedule_type.value()] = success;
×
NEW
105
}
×
106

107
} // namespace sdfg
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc