lottie/example: updated example to use async rendering .
[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   }
24
25   void show(int numberOfImage) {
26     auto resource = EvasApp::jsonFiles(std::string(DEMO_DIR));
27
28     if (resource.empty()) return;
29
30     int count = numberOfImage;
31     int colums = (int) ceil(sqrt(count));
32     int offset = 3;
33     int vw = (mApp->width() - (2 * offset * colums))/colums;
34     int vh = vw;
35     int posx = offset;
36     int posy = offset;
37     int resourceSize = resource.size();
38     for (int i = 0 ; i < numberOfImage; i++) {
39         int index = i % resourceSize;
40         std::unique_ptr<LottieView> view(new LottieView(mApp->evas(), mRenderMode));
41         view->setFilePath(resource[index].c_str());
42         view->setPos(posx, posy);
43         view->setSize(vw, vh);
44         view->show();
45         view->play();
46         view->loop(true);
47         //view->setRepeatMode(LottieView::RepeatMode::Reverse);
48
49         posx += vw+offset;
50         if ((mApp->width() - posx) < vw) {
51           posx = offset;
52           posy = posy + vh + offset;
53         }
54         mViews.push_back(std::move(view));
55     }
56   }
57
58   void render() {
59       //auto clock = std::chrono::high_resolution_clock::now();
60       for (auto &i : mViews) {
61           i->render();
62       }
63       //double d = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now()-clock).count();
64       //printf("total time taken = %f\n", d);
65   }
66
67 public:
68   EvasApp     *mApp;
69   bool         mRenderMode = false;
70   std::vector<std::unique_ptr<LottieView>>   mViews;
71 };
72
73 static void
74 onExitCb(void *data, void *extra)
75 {
76     LottieViewTest *view = (LottieViewTest *)data;
77     delete view;
78 }
79
80 static void
81 onRenderPreCb(void *data, void *extra)
82 {
83     LottieViewTest *view = (LottieViewTest *)data;
84     view->render();
85 }
86
87 int
88 main(int argc, char **argv)
89 {
90    EvasApp *app = new EvasApp(800, 800);
91    app->setup();
92
93    bool renderMode = true;
94    if (argc > 1) {
95        if (!strcmp(argv[1],"--disable-render"))
96            renderMode = false;
97    }
98    LottieViewTest *view = new LottieViewTest(app, renderMode);
99    view->show(400);
100
101    app->addExitCb(onExitCb, view);
102    app->addRenderPreCb(onRenderPreCb, view);
103
104    app->run();
105    delete app;
106    return 0;
107 }
108
109
110
111
112