~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/ThirdParty/ANGLE/src/tests/perf_tests/TracePerfTest.cpp

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
 
3
// Use of this source code is governed by a BSD-style license that can be
 
4
// found in the LICENSE file.
 
5
//
 
6
// TracePerf:
 
7
//   Performance test for ANGLE replaying traces.
 
8
//
 
9
 
 
10
#include <gtest/gtest.h>
 
11
#include "common/system_utils.h"
 
12
#include "tests/perf_tests/ANGLEPerfTest.h"
 
13
#include "util/egl_loader_autogen.h"
 
14
 
 
15
#include "restricted_traces/trex_1300_1310/trex_1300_1310_capture_context1.h"
 
16
#include "restricted_traces/trex_200_210/trex_200_210_capture_context1.h"
 
17
#include "restricted_traces/trex_800_810/trex_800_810_capture_context1.h"
 
18
#include "restricted_traces/trex_900_910/trex_900_910_capture_context1.h"
 
19
 
 
20
#include <cassert>
 
21
#include <functional>
 
22
#include <sstream>
 
23
 
 
24
using namespace angle;
 
25
using namespace egl_platform;
 
26
 
 
27
namespace
 
28
{
 
29
 
 
30
enum class TracePerfTestID
 
31
{
 
32
    TRex200,
 
33
    TRex800,
 
34
    TRex900,
 
35
    TRex1300,
 
36
};
 
37
 
 
38
struct TracePerfParams final : public RenderTestParams
 
39
{
 
40
    // Common default options
 
41
    TracePerfParams()
 
42
    {
 
43
        majorVersion = 2;
 
44
        minorVersion = 0;
 
45
        windowWidth  = 1920;
 
46
        windowHeight = 1080;
 
47
        trackGpuTime = true;
 
48
 
 
49
        // Display the frame after every drawBenchmark invocation
 
50
        iterationsPerStep = 1;
 
51
    }
 
52
 
 
53
    std::string story() const override
 
54
    {
 
55
        std::stringstream strstr;
 
56
 
 
57
        strstr << RenderTestParams::story();
 
58
 
 
59
        switch (testID)
 
60
        {
 
61
            case TracePerfTestID::TRex200:
 
62
                strstr << "_trex_200";
 
63
                break;
 
64
            case TracePerfTestID::TRex800:
 
65
                strstr << "_trex_800";
 
66
                break;
 
67
            case TracePerfTestID::TRex900:
 
68
                strstr << "_trex_900";
 
69
                break;
 
70
            case TracePerfTestID::TRex1300:
 
71
                strstr << "_trex_1300";
 
72
                break;
 
73
            default:
 
74
                assert(0);
 
75
                break;
 
76
        }
 
77
 
 
78
        return strstr.str();
 
79
    }
 
80
 
 
81
    TracePerfTestID testID;
 
82
};
 
83
 
 
84
std::ostream &operator<<(std::ostream &os, const TracePerfParams &params)
 
85
{
 
86
    os << params.backendAndStory().substr(1);
 
87
    return os;
 
88
}
 
89
 
 
90
class TracePerfTest : public ANGLERenderTest, public ::testing::WithParamInterface<TracePerfParams>
 
91
{
 
92
  public:
 
93
    TracePerfTest();
 
94
 
 
95
    void initializeBenchmark() override;
 
96
    void destroyBenchmark() override;
 
97
    void drawBenchmark() override;
 
98
 
 
99
    uint32_t mStartFrame;
 
100
    uint32_t mEndFrame;
 
101
    std::function<void(uint32_t)> mReplayFunc;
 
102
};
 
103
 
 
104
TracePerfTest::TracePerfTest()
 
105
    : ANGLERenderTest("TracePerf", GetParam()), mStartFrame(0), mEndFrame(0)
 
106
{}
 
107
 
 
108
void TracePerfTest::initializeBenchmark()
 
109
{
 
110
    const auto &params = GetParam();
 
111
 
 
112
    // TODO: Note the start and end frames in the trace
 
113
    //       i.e. mStartFrame = trex_200_210::kReplayFrameStart
 
114
    switch (params.testID)
 
115
    {
 
116
        // For each case, bootstrap the trace
 
117
        case TracePerfTestID::TRex200:
 
118
            mStartFrame = 200;
 
119
            mEndFrame   = 210;
 
120
            mReplayFunc = trex_200_210::ReplayContext1Frame;
 
121
            trex_200_210::SetBinaryDataDir(ANGLE_TRACE_DATA_DIR_trex_200_210);
 
122
            trex_200_210::SetupContext1Replay();
 
123
            break;
 
124
        case TracePerfTestID::TRex800:
 
125
            mStartFrame = 800;
 
126
            mEndFrame   = 810;
 
127
            mReplayFunc = trex_800_810::ReplayContext1Frame;
 
128
            trex_800_810::SetBinaryDataDir(ANGLE_TRACE_DATA_DIR_trex_800_810);
 
129
            trex_800_810::SetupContext1Replay();
 
130
            break;
 
131
        case TracePerfTestID::TRex900:
 
132
            mStartFrame = 900;
 
133
            mEndFrame   = 910;
 
134
            mReplayFunc = trex_900_910::ReplayContext1Frame;
 
135
            trex_900_910::SetBinaryDataDir(ANGLE_TRACE_DATA_DIR_trex_900_910);
 
136
            trex_900_910::SetupContext1Replay();
 
137
            break;
 
138
        case TracePerfTestID::TRex1300:
 
139
            mStartFrame = 1300;
 
140
            mEndFrame   = 1310;
 
141
            mReplayFunc = trex_1300_1310::ReplayContext1Frame;
 
142
            trex_1300_1310::SetBinaryDataDir(ANGLE_TRACE_DATA_DIR_trex_1300_1310);
 
143
            trex_1300_1310::SetupContext1Replay();
 
144
            break;
 
145
        default:
 
146
            assert(0);
 
147
            break;
 
148
    }
 
149
 
 
150
    ASSERT_TRUE(mEndFrame > mStartFrame);
 
151
 
 
152
    getWindow()->setVisible(true);
 
153
}
 
154
 
 
155
void TracePerfTest::destroyBenchmark() {}
 
156
 
 
157
void TracePerfTest::drawBenchmark()
 
158
{
 
159
    startGpuTimer();
 
160
 
 
161
    for (uint32_t frame = mStartFrame; frame < mEndFrame; ++frame)
 
162
    {
 
163
        mReplayFunc(frame);
 
164
        getGLWindow()->swap();
 
165
    }
 
166
 
 
167
    stopGpuTimer();
 
168
}
 
169
 
 
170
TracePerfParams TRexReplayPerfOpenGLOrGLESParams_200_210()
 
171
{
 
172
    TracePerfParams params;
 
173
    params.eglParameters = OPENGL_OR_GLES();
 
174
    params.testID        = TracePerfTestID::TRex200;
 
175
    return params;
 
176
}
 
177
 
 
178
TracePerfParams TRexReplayPerfOpenGLOrGLESParams_800_810()
 
179
{
 
180
    TracePerfParams params;
 
181
    params.eglParameters = OPENGL_OR_GLES();
 
182
    params.testID        = TracePerfTestID::TRex800;
 
183
    return params;
 
184
}
 
185
 
 
186
TracePerfParams TRexReplayPerfOpenGLOrGLESParams_900_910()
 
187
{
 
188
    TracePerfParams params;
 
189
    params.eglParameters = OPENGL_OR_GLES();
 
190
    params.testID        = TracePerfTestID::TRex900;
 
191
    return params;
 
192
}
 
193
 
 
194
TracePerfParams TRexReplayPerfOpenGLOrGLESParams_1300_1310()
 
195
{
 
196
    TracePerfParams params;
 
197
    params.eglParameters = OPENGL_OR_GLES();
 
198
    params.testID        = TracePerfTestID::TRex1300;
 
199
    return params;
 
200
}
 
201
 
 
202
TracePerfParams TRexReplayPerfVulkanParams_200_210()
 
203
{
 
204
    TracePerfParams params;
 
205
    params.eglParameters = VULKAN();
 
206
    params.testID        = TracePerfTestID::TRex200;
 
207
    return params;
 
208
}
 
209
 
 
210
TracePerfParams TRexReplayPerfVulkanParams_800_810()
 
211
{
 
212
    TracePerfParams params;
 
213
    params.eglParameters = VULKAN();
 
214
    params.testID        = TracePerfTestID::TRex800;
 
215
    return params;
 
216
}
 
217
 
 
218
TracePerfParams TRexReplayPerfVulkanParams_900_910()
 
219
{
 
220
    TracePerfParams params;
 
221
    params.eglParameters = VULKAN();
 
222
    params.testID        = TracePerfTestID::TRex900;
 
223
    return params;
 
224
}
 
225
 
 
226
TracePerfParams TRexReplayPerfVulkanParams_1300_1310()
 
227
{
 
228
    TracePerfParams params;
 
229
    params.eglParameters = VULKAN();
 
230
    params.testID        = TracePerfTestID::TRex1300;
 
231
    return params;
 
232
}
 
233
 
 
234
TEST_P(TracePerfTest, Run)
 
235
{
 
236
    run();
 
237
}
 
238
 
 
239
ANGLE_INSTANTIATE_TEST(TracePerfTest,
 
240
                       TRexReplayPerfOpenGLOrGLESParams_200_210(),
 
241
                       TRexReplayPerfOpenGLOrGLESParams_800_810(),
 
242
                       TRexReplayPerfOpenGLOrGLESParams_900_910(),
 
243
                       TRexReplayPerfOpenGLOrGLESParams_1300_1310(),
 
244
                       TRexReplayPerfVulkanParams_200_210(),
 
245
                       TRexReplayPerfVulkanParams_800_810(),
 
246
                       TRexReplayPerfVulkanParams_900_910(),
 
247
                       TRexReplayPerfVulkanParams_1300_1310());
 
248
 
 
249
}  // anonymous namespace