GCC Code Coverage Report


Directory: ./
File: tasks/iskhakov_d_vertical_gauss_filter/tbb/src/ops_tbb.cpp
Date: 2026-05-11 08:26:31
Exec Total Coverage
Lines: 42 44 95.5%
Functions: 6 6 100.0%
Branches: 47 72 65.3%

Line Branch Exec Source
1 #include "iskhakov_d_vertical_gauss_filter/tbb/include/ops_tbb.hpp"
2
3 #include <oneapi/tbb/parallel_for.h>
4
5 #include <array>
6 #include <cstddef>
7 #include <cstdint>
8 #include <utility>
9 #include <vector>
10
11 #include "iskhakov_d_vertical_gauss_filter/common/include/common.hpp"
12
13 namespace iskhakov_d_vertical_gauss_filter {
14
15 namespace {
16 const int kDivConst = 16;
17 const std::array<std::array<int, 3>, 3> kGaussKernel = {{{1, 2, 1}, {2, 4, 2}, {1, 2, 1}}};
18
19 uint8_t IskhakovDGetPixelMirrorTbb(const std::vector<uint8_t> &src, int col, int row, int width, int height) {
20 1404 if (col < 0) {
21 col = -col - 1;
22
12/18
✗ Branch 0 not taken.
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 156 times.
✓ Branch 4 taken 52 times.
✓ Branch 5 taken 104 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 104 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 156 times.
✓ Branch 10 taken 52 times.
✓ Branch 11 taken 104 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 104 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 156 times.
✓ Branch 16 taken 52 times.
✓ Branch 17 taken 104 times.
1248 } else if (col >= width) {
23 156 col = (2 * width) - col - 1;
24 }
25 468 if (row < 0) {
26 row = -row - 1;
27
6/6
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 104 times.
✓ Branch 2 taken 52 times.
✓ Branch 3 taken 104 times.
✓ Branch 4 taken 52 times.
✓ Branch 5 taken 104 times.
468 } else if (row >= height) {
28 156 row = (2 * height) - row - 1;
29 }
30
10/16
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 156 times.
✓ Branch 4 taken 52 times.
✓ Branch 5 taken 104 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 156 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 156 times.
✓ Branch 10 taken 52 times.
✓ Branch 11 taken 104 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 156 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 156 times.
1404 return src[(row * width) + col];
31 }
32
33 } // namespace
34
35
1/2
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
20 IskhakovDVerticalGaussFilterTBB::IskhakovDVerticalGaussFilterTBB(const InType &in) {
36 SetTypeOfTask(GetStaticTypeOfTask());
37 GetInput() = in;
38 20 GetOutput() = OutType{};
39 20 }
40
41 20 bool IskhakovDVerticalGaussFilterTBB::ValidationImpl() {
42 const auto &in = GetInput();
43
44
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if (in.width <= 0 || in.height <= 0) {
45 return false;
46 }
47
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if (in.data.size() != static_cast<size_t>(in.width) * static_cast<size_t>(in.height)) {
48 return false;
49 }
50 return true;
51 }
52
53 20 bool IskhakovDVerticalGaussFilterTBB::PreProcessingImpl() {
54 20 return true;
55 }
56
57 20 bool IskhakovDVerticalGaussFilterTBB::RunImpl() {
58 const auto &in = GetInput();
59
60 20 int width = in.width;
61 20 int height = in.height;
62 20 const std::vector<uint8_t> &matrix = in.data;
63 20 std::vector<uint8_t> result(static_cast<size_t>(width) * static_cast<size_t>(height));
64
65
1/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
20 tbb::parallel_for(0, width, [&](int horizontal_band) {
66
2/2
✓ Branch 0 taken 156 times.
✓ Branch 1 taken 52 times.
208 for (int vertical_band = 0; vertical_band < height; ++vertical_band) {
67 int sum = 0;
68
69 sum += kGaussKernel[0][0] *
70
3/4
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 156 times.
312 IskhakovDGetPixelMirrorTbb(matrix, horizontal_band - 1, vertical_band - 1, width, height);
71 156 sum += kGaussKernel[0][1] * IskhakovDGetPixelMirrorTbb(matrix, horizontal_band, vertical_band - 1, width, height);
72 156 sum += kGaussKernel[0][2] *
73
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
✓ Branch 2 taken 52 times.
✓ Branch 3 taken 104 times.
312 IskhakovDGetPixelMirrorTbb(matrix, horizontal_band + 1, vertical_band - 1, width, height);
74
75
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
156 sum += kGaussKernel[1][0] * IskhakovDGetPixelMirrorTbb(matrix, horizontal_band - 1, vertical_band, width, height);
76
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
156 sum += kGaussKernel[1][1] * IskhakovDGetPixelMirrorTbb(matrix, horizontal_band, vertical_band, width, height);
77 156 sum += kGaussKernel[1][2] * IskhakovDGetPixelMirrorTbb(matrix, horizontal_band + 1, vertical_band, width, height);
78
79 156 sum += kGaussKernel[2][0] *
80
3/4
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 156 times.
312 IskhakovDGetPixelMirrorTbb(matrix, horizontal_band - 1, vertical_band + 1, width, height);
81
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
156 sum += kGaussKernel[2][1] * IskhakovDGetPixelMirrorTbb(matrix, horizontal_band, vertical_band + 1, width, height);
82 156 sum += kGaussKernel[2][2] *
83 156 IskhakovDGetPixelMirrorTbb(matrix, horizontal_band + 1, vertical_band + 1, width, height);
84
85 156 result[(vertical_band * width) + horizontal_band] = static_cast<uint8_t>(sum / kDivConst);
86 }
87 52 });
88
89 20 GetOutput().width = width;
90 20 GetOutput().height = height;
91 20 GetOutput().data = std::move(result);
92 20 return true;
93 }
94
95 20 bool IskhakovDVerticalGaussFilterTBB::PostProcessingImpl() {
96 20 return true;
97 }
98
99 } // namespace iskhakov_d_vertical_gauss_filter
100