Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit 0ca96fd

Browse files
[render-test] Implement fps benchmarking tests (#15803)
1 parent bb0e5ff commit 0ca96fd

27 files changed

+422
-122
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#include <chrono>
4+
#include <functional>
5+
#include <mbgl/util/noncopyable.hpp>
6+
#include <memory>
7+
8+
namespace mbgl {
9+
namespace util {
10+
11+
class MonotonicTimer {
12+
public:
13+
static std::chrono::duration<double> now();
14+
15+
template <typename F, typename... Args>
16+
inline static std::chrono::duration<double> duration(F&& func, Args&&... args) {
17+
auto start = now();
18+
func(std::forward<Args>(args)...);
19+
return now() - start;
20+
}
21+
};
22+
23+
} // namespace util
24+
} // namespace mbgl

next/platform/android/android.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ target_sources(
213213
${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp
214214
${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp
215215
${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp
216+
${MBGL_ROOT}/platform/default/src/mbgl/util/monotonic_timer.cpp
216217
${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp
217218
${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp
218219
${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp

next/platform/ios/ios.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ target_sources(
3939
${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp
4040
${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp
4141
${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp
42+
${MBGL_ROOT}/platform/default/src/mbgl/util/monotonic_timer.cpp
4243
${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp
4344
${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp
4445
${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp

next/platform/linux/linux.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ target_sources(
3737
${MBGL_ROOT}/platform/default/src/mbgl/util/image.cpp
3838
${MBGL_ROOT}/platform/default/src/mbgl/util/jpeg_reader.cpp
3939
${MBGL_ROOT}/platform/default/src/mbgl/util/logging_stderr.cpp
40+
${MBGL_ROOT}/platform/default/src/mbgl/util/monotonic_timer.cpp
4041
${MBGL_ROOT}/platform/default/src/mbgl/util/png_reader.cpp
4142
${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp
4243
${MBGL_ROOT}/platform/default/src/mbgl/util/run_loop.cpp

next/platform/macos/macos.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ target_sources(
105105
${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp
106106
${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp
107107
${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp
108+
${MBGL_ROOT}/platform/default/src/mbgl/util/monotonic_timer.cpp
108109
${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp
109110
${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp
110111
${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp

next/platform/qt/qt.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ target_sources(
4343
${MBGL_ROOT}/platform/default/src/mbgl/storage/online_file_source.cpp
4444
${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp
4545
${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp
46+
${MBGL_ROOT}/platform/default/src/mbgl/util/monotonic_timer.cpp
4647
${MBGL_ROOT}/platform/qt/src/async_task.cpp
4748
${MBGL_ROOT}/platform/qt/src/async_task_impl.hpp
4849
${MBGL_ROOT}/platform/qt/src/number_format.cpp

platform/android/core-files.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
"platform/default/src/mbgl/map/map_snapshotter.cpp",
9494
"platform/default/src/mbgl/text/bidi.cpp",
9595
"platform/default/src/mbgl/util/compression.cpp",
96+
"platform/default/src/mbgl/util/monotonic_timer.cpp",
9697
"platform/default/src/mbgl/util/png_writer.cpp",
9798
"platform/default/src/mbgl/util/thread_local.cpp",
9899
"platform/default/src/mbgl/util/utf.cpp",

platform/default/include/mbgl/gfx/headless_backend.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ namespace gfx {
1515
// of readStillImage.
1616
class HeadlessBackend : public gfx::Renderable {
1717
public:
18+
enum class SwapBehaviour { NoFlush, Flush };
19+
1820
// Factory.
19-
static std::unique_ptr<HeadlessBackend>
20-
Create(const Size size = { 256, 256 },
21-
const gfx::ContextMode contextMode = gfx::ContextMode::Unique) {
22-
return Backend::Create<HeadlessBackend, Size, gfx::ContextMode>(size, contextMode);
21+
static std::unique_ptr<HeadlessBackend> Create(const Size size = {256, 256},
22+
SwapBehaviour swapBehavior = SwapBehaviour::NoFlush,
23+
const gfx::ContextMode contextMode = gfx::ContextMode::Unique) {
24+
return Backend::Create<HeadlessBackend, Size, SwapBehaviour, gfx::ContextMode>(size, swapBehavior, contextMode);
2325
}
2426

2527
virtual PremultipliedImage readStillImage() = 0;

platform/default/include/mbgl/gfx/headless_frontend.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#pragma once
22

3+
#include <mbgl/gfx/headless_backend.hpp>
34
#include <mbgl/map/camera.hpp>
45
#include <mbgl/renderer/renderer_frontend.hpp>
5-
#include <mbgl/gfx/headless_backend.hpp>
66
#include <mbgl/util/async_task.hpp>
77
#include <mbgl/util/optional.hpp>
88

9+
#include <atomic>
910
#include <memory>
1011

1112
namespace mbgl {
@@ -17,10 +18,12 @@ class TransformState;
1718
class HeadlessFrontend : public RendererFrontend {
1819
public:
1920
HeadlessFrontend(float pixelRatio_,
21+
gfx::HeadlessBackend::SwapBehaviour swapBehviour = gfx::HeadlessBackend::SwapBehaviour::NoFlush,
2022
gfx::ContextMode mode = gfx::ContextMode::Unique,
2123
const optional<std::string> localFontFamily = {});
2224
HeadlessFrontend(Size,
2325
float pixelRatio_,
26+
gfx::HeadlessBackend::SwapBehaviour swapBehviour = gfx::HeadlessBackend::SwapBehaviour::NoFlush,
2427
gfx::ContextMode mode = gfx::ContextMode::Unique,
2528
const optional<std::string> localFontFamily = {});
2629
~HeadlessFrontend() override;
@@ -29,6 +32,7 @@ class HeadlessFrontend : public RendererFrontend {
2932
void update(std::shared_ptr<UpdateParameters>) override;
3033
void setObserver(RendererObserver&) override;
3134

35+
double getFrameTime() const;
3236
Size getSize() const;
3337
void setSize(Size);
3438

@@ -45,13 +49,15 @@ class HeadlessFrontend : public RendererFrontend {
4549

4650
PremultipliedImage readStillImage();
4751
PremultipliedImage render(Map&);
52+
void renderOnce(Map&);
4853

4954
optional<TransformState> getTransformState() const;
5055

5156
private:
5257
Size size;
5358
float pixelRatio;
5459

60+
std::atomic<double> frameTime;
5561
std::unique_ptr<gfx::HeadlessBackend> backend;
5662
util::AsyncTask asyncInvalidate;
5763

platform/default/include/mbgl/gl/headless_backend.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@ namespace gl {
1010

1111
class HeadlessBackend final : public gl::RendererBackend, public gfx::HeadlessBackend {
1212
public:
13-
HeadlessBackend(Size = { 256, 256 }, gfx::ContextMode = gfx::ContextMode::Unique);
13+
HeadlessBackend(Size = {256, 256},
14+
SwapBehaviour = SwapBehaviour::NoFlush,
15+
gfx::ContextMode = gfx::ContextMode::Unique);
1416
~HeadlessBackend() override;
1517
void updateAssumedState() override;
1618
gfx::Renderable& getDefaultRenderable() override;
1719
PremultipliedImage readStillImage() override;
1820
RendererBackend* getRendererBackend() override;
1921

22+
void swap();
23+
2024
class Impl {
2125
public:
2226
virtual ~Impl() = default;
@@ -37,6 +41,7 @@ class HeadlessBackend final : public gl::RendererBackend, public gfx::HeadlessBa
3741
private:
3842
std::unique_ptr<Impl> impl;
3943
bool active = false;
44+
SwapBehaviour swapBehaviour = SwapBehaviour::NoFlush;
4045
};
4146

4247
} // namespace gl

0 commit comments

Comments
 (0)