lottie/example: workaround to render at 60fps.
[platform/core/uifw/lottie-player.git] / example / lottieviewtest.cpp
1 #include "evasapp.h"
2 #include "lottieview.h"
3 #include<iostream>
4 #include <dirent.h>
5 #include <stdio.h>
6 using namespace std;
7
8 /*
9  * To check the frame rate with rendermode off run
10  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest --disable-render
11  *
12  * To check the frame rate with  render backend
13  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest
14  *
15  */
16
17 class LottieViewTest
18 {
19 public:
20   LottieViewTest(EvasApp *app, bool renderMode) {
21       mApp = app;
22       mRenderMode = renderMode;
23       ecore_animator_frametime_set(1.0/120.0);
24   }
25
26   void show(int numberOfImage) {
27     auto resource = EvasApp::jsonFiles(std::string(DEMO_DIR));
28
29     if (resource.empty()) return;
30
31     int count = numberOfImage;
32     int colums = (int) ceil(sqrt(count));
33     int offset = 3;
34     int vw = (mApp->width() - (2 * offset * colums))/colums;
35     int vh = vw;
36     int posx = offset;
37     int posy = offset;
38     int resourceSize = resource.size();
39     for (int i = 0 ; i < numberOfImage; i++) {
40         int index = i % resourceSize;
41         std::unique_ptr<LottieView> view(new LottieView(mApp->evas(), mRenderMode));
42         view->setFilePath(resource[index].c_str());
43         view->setPos(posx, posy);
44         view->setSize(vw, vh);
45         view->show();
46         view->play();
47         view->loop(true);
48         //view->setRepeatMode(LottieView::RepeatMode::Reverse);
49
50         posx += vw+offset;
51         if ((mApp->width() - posx) < vw) {
52           posx = offset;
53           posy = posy + vh + offset;
54         }
55         mViews.push_back(std::move(view));
56     }
57   }
58
59   void render() {
60       //auto clock = std::chrono::high_resolution_clock::now();
61       for (auto &i : mViews) {
62           i->render();
63       }
64       //double d = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now()-clock).count();
65       //printf("total time taken = %f\n", d);
66   }
67
68 public:
69   EvasApp     *mApp;
70   bool         mRenderMode = false;
71   std::vector<std::unique_ptr<LottieView>>   mViews;
72 };
73
74 static void
75 onExitCb(void *data, void *extra)
76 {
77     LottieViewTest *view = (LottieViewTest *)data;
78     delete view;
79 }
80
81 static void
82 onRenderPreCb(void *data, void *extra)
83 {
84     LottieViewTest *view = (LottieViewTest *)data;
85     view->render();
86 }
87
88 int
89 main(int argc, char **argv)
90 {
91    EvasApp *app = new EvasApp(800, 800);
92    app->setup();
93
94    bool renderMode = true;
95    if (argc > 1) {
96        if (!strcmp(argv[1],"--disable-render"))
97            renderMode = false;
98    }
99    LottieViewTest *view = new LottieViewTest(app, renderMode);
100    view->show(250);
101
102    app->addExitCb(onExitCb, view);
103    app->addRenderPreCb(onRenderPreCb, view);
104
105    app->run();
106    delete app;
107    return 0;
108 }
109
110
111
112
113