summaryrefslogtreecommitdiff
path: root/test/api/render_caching.cpp
blob: 44ed15336e8ef31339181ed375b09c3b3bd1055c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <mbgl/test/util.hpp>
#include <mbgl/test/fixture_log_observer.hpp>

#include <mbgl/map/map.hpp>
#include <mbgl/renderer/backend_scope.hpp>
#include <mbgl/gl/headless_backend.hpp>
#include <mbgl/gl/offscreen_view.hpp>
#include <mbgl/util/default_thread_pool.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/renderer/renderer.hpp>
// #include <mbgl/util/image.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/test/stub_renderer_frontend.hpp>

#include <future>
#include <memory>

class FrameObserver : public mbgl::MapObserver {
public:
    void onDidFinishRenderingFrame(RenderMode mode) {
        if (mode == RenderMode::Full) {
//            fprintf(stderr, "onDidFinishRenderingFrame: full\n");
//            mbgl::util::RunLoop::Get()->stop();
        } else {
//            fprintf(stderr, "onDidFinishRenderingFrame: partial\n");
        }
    }
    void onDidFinishRenderingMap(RenderMode mode) {
//        fprintf(stderr, "onDidFinishRenderingMap\n");
        if (mode == RenderMode::Full) {
//            fprintf(stderr, "onDidFinishRenderingMap: full\n");
            mbgl::util::RunLoop::Get()->stop();
        } else {
//            fprintf(stderr, "onDidFinishRenderingMap: partial\n");
        }
    }
};


TEST(API, RenderExpiredRasterTile) {
    using namespace mbgl;

    Log::setObserver(std::make_unique<FixtureLogObserver>());

    util::RunLoop loop;

    HeadlessBackend backend;
    BackendScope scope { backend };
    OffscreenView view { backend.getContext(), { 512, 256 } };
    float pixelRatio { 1 };
    DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets");
    fileSource.setOnlineStatus(false);
    ThreadPool threadPool(4);
    StubRendererFrontend rendererFrontend { std::make_unique<Renderer>(backend, pixelRatio, fileSource, threadPool), view };

    Response response;
    response.expires = util::parseTimestamp("Tue, 04 Nov 2014 02:13:24 GMT");

    response.data = std::make_shared<std::string>(util::read_file("test/fixtures/api/assets/raster/6-10-24.png"));
    fileSource.put(Resource::tile("https://tiles/{z}-{x}-{y}.png", 1, 10, 24, 6, Tileset::Scheme::XYZ), response);
    response.data = std::make_shared<std::string>(util::read_file("test/fixtures/api/assets/raster/10-163-395.png"));
    fileSource.put(Resource::tile("https://tiles/{z}-{x}-{y}.png", 1, 163, 395, 10, Tileset::Scheme::XYZ), response);


    FrameObserver observer;
    Map map { rendererFrontend, observer, view.getSize(), pixelRatio, fileSource,
        threadPool, MapMode::Continuous };

    map.getStyle().loadJSON(R"STYLE({
      "version": 8,
      "sources": {
        "raster": {
          "type": "raster",
          "tiles": ["https://tiles/{z}-{x}-{y}.png"]
        }
      },
      "layers": [{
        "id": "raster",
        "type": "raster",
        "source": "raster"
      }]
    })STYLE");

    map.setLatLngZoom({ 37.8, -122.4 }, 10);

    loop.run();

    PremultipliedImage result = view.readStillImage();
    test::checkImage("test/fixtures/api/cached_raster", result, 0.0006, 0.1);

//    auto flo = dynamic_cast<FixtureLogObserver*>(Log::removeObserver().get());
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 10/163/395=>10 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 10/164/395=>10 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 9/81/197=>9 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 9/82/197=>9 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 8/40/98=>8 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 8/41/98=>8 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 7/20/49=>7 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 6/10/24=>6 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 5/5/12=>5 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 4/2/6=>4 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 3/1/3=>3 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 2/0/1=>2 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 1/0/0=>1 for source raster: Online connectivity is disabled.")));
//    EXPECT_EQ(1u, flo->count(FixtureLog::Message(EventSeverity::Error, Event::Style, -1,
//        "Failed to load tile 0/0/0=>0 for source raster: Online connectivity is disabled.")));
//    auto unchecked = flo->unchecked();
//    EXPECT_TRUE(unchecked.empty()) << unchecked;
}