mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
 | |
| 
 | |
|  * Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
|  * of this software and associated documentation files (the "Software"), to deal
 | |
|  * in the Software without restriction, including without limitation the rights
 | |
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
|  * copies of the Software, and to permit persons to whom the Software is
 | |
|  * furnished to do so, subject to the following conditions:
 | |
| 
 | |
|  * The above copyright notice and this permission notice shall be included in all
 | |
|  * copies or substantial portions of the Software.
 | |
| 
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | |
|  * SOFTWARE.
 | |
|  */
 | |
| 
 | |
| #include "evasapp.h"
 | |
| #include "lottieview.h"
 | |
| #include<iostream>
 | |
| #include <dirent.h>
 | |
| #include <stdio.h>
 | |
| #include <chrono>
 | |
| using namespace std;
 | |
| 
 | |
| static Eina_Bool onTestDone(void *data);
 | |
| /*
 | |
|  * To check the frame rate with rendermode off run
 | |
|  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest --disable-render
 | |
|  *
 | |
|  * To check the frame rate with  render backend
 | |
|  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest
 | |
|  *
 | |
|  */
 | |
| 
 | |
| class LottieViewTest
 | |
| {
 | |
| public:
 | |
|   LottieViewTest(EvasApp *app, Strategy st, double timeout) {
 | |
|       mStartTime = std::chrono::high_resolution_clock::now();
 | |
|       mStrategy = st;
 | |
|       mApp = app;
 | |
| 
 | |
|       if (timeout > 0) {
 | |
|         ecore_timer_add(timeout, onTestDone, mApp);
 | |
|       }
 | |
|       // work around for 60fps
 | |
|       ecore_animator_frametime_set(1.0f/120.0f);
 | |
|   }
 | |
| 
 | |
|   void show(int numberOfImage) {
 | |
|     auto resource = EvasApp::jsonFiles(std::string(DEMO_DIR));
 | |
| 
 | |
|     if (resource.empty()) return;
 | |
| 
 | |
|     int count = numberOfImage;
 | |
|     int colums = (int) ceil(sqrt(count));
 | |
|     int offset = 3;
 | |
|     int vw = (mApp->width() - (offset * colums))/colums;
 | |
|     int vh = vw;
 | |
|     int posx = offset;
 | |
|     int posy = offset;
 | |
|     int resourceSize = resource.size();
 | |
|     for (int i = 0 ; i < numberOfImage; i++) {
 | |
|         int index = i % resourceSize;
 | |
|         std::unique_ptr<LottieView> view(new LottieView(mApp->evas(), mStrategy));
 | |
|         view->setFilePath(resource[index].c_str());
 | |
|         view->setPos(posx, posy);
 | |
|         view->setSize(vw, vh);
 | |
|         view->show();
 | |
|         view->play();
 | |
|         view->loop(true);
 | |
|         //view->setRepeatMode(LottieView::RepeatMode::Reverse);
 | |
|         posx += vw+offset;
 | |
|         if ((mApp->width() - posx) < vw) {
 | |
|           posx = offset;
 | |
|           posy = posy + vh + offset;
 | |
|         }
 | |
|         mViews.push_back(std::move(view));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|     ~LottieViewTest() {
 | |
|       const auto frames = mViews.empty() ? 0 : mViews[0]->renderCount();
 | |
|       const double secs = std::chrono::duration<double>(std::chrono::high_resolution_clock::now() - mStartTime).count();
 | |
|       std::cout<<"\tTestTime : "<< secs<<" sec \n\tTotalFrames : "<<frames<<"\n\tFramesPerSecond : "<< frames / secs <<" fps\n";
 | |
|     }
 | |
| 
 | |
|   static int help() {
 | |
|             printf("Usage ./lottieviewTest [-s] [strategy] [-t] [timeout] [-c] [count]\n");
 | |
|             printf("\n \t-t : timeout duration in seconds\n");
 | |
|             printf("\n \t-c : number of resource in the grid\n");
 | |
|             printf("\n \t-s : Rendering Strategy\n");
 | |
|             printf("\t\t 0  - Test Lottie SYNC Renderer with CPP API\n");
 | |
|             printf("\t\t 1  - Test Lottie ASYNC Renderer with CPP API\n");
 | |
|             printf("\t\t 2  - Test Lottie SYNC Renderer with C API\n");
 | |
|             printf("\t\t 3  - Test Lottie ASYNC Renderer with C API\n");
 | |
|             printf("\t\t 4  - Test Lottie Tree Api using Efl VG Render\n");
 | |
|             printf(" Default : ./lottieviewTest -s 1 \n");
 | |
|             return 0;
 | |
|   }
 | |
| public:
 | |
|   EvasApp     *mApp;
 | |
|   Strategy     mStrategy;
 | |
|   std::vector<std::unique_ptr<LottieView>>   mViews;
 | |
|   std::chrono::high_resolution_clock::time_point  mStartTime;
 | |
| };
 | |
| 
 | |
| static void
 | |
| onExitCb(void *data, void */*extra*/)
 | |
| {
 | |
|     LottieViewTest *view = (LottieViewTest *)data;
 | |
|     delete view;
 | |
| }
 | |
| 
 | |
| 
 | |
| static Eina_Bool
 | |
| onTestDone(void *data)
 | |
| {
 | |
|     EvasApp *app = (EvasApp *)data;
 | |
|     app->exit();
 | |
|     return ECORE_CALLBACK_CANCEL;
 | |
| }
 | |
| 
 | |
| int
 | |
| main(int argc, char **argv)
 | |
| {
 | |
|     Strategy st = Strategy::renderCppAsync;
 | |
|     auto index = 0;
 | |
|     double timeOut = 0;
 | |
|     size_t itemCount = 250;
 | |
|     while (index < argc) {
 | |
|       const char* option = argv[index];
 | |
|       index++;
 | |
|       if (!strcmp(option,"--help") || !strcmp(option,"-h")) {
 | |
|           return LottieViewTest::help();
 | |
|       } else if (!strcmp(option,"-s")) {
 | |
|          st = (index < argc) ? static_cast<Strategy>(atoi(argv[index])) : Strategy::renderCppAsync;
 | |
|          index++;
 | |
|       } else if (!strcmp(option,"-t")) {
 | |
|          timeOut = (index < argc) ? atoi(argv[index]) : 10;
 | |
|          index++;
 | |
|       } else if (!strcmp(option,"-c")) {
 | |
|          itemCount = (index < argc) ? atoi(argv[index]) : 10;
 | |
|          index++;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|    EvasApp *app = new EvasApp(800, 800);
 | |
|    app->setup();
 | |
| 
 | |
|    LottieViewTest *view = new LottieViewTest(app, st, timeOut);
 | |
|    view->show(itemCount);
 | |
| 
 | |
|    app->addExitCb(onExitCb, view);
 | |
| 
 | |
|    app->run();
 | |
|    delete app;
 | |
|    return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
