2011년 11월 16일 수요일

Ubuntu에서 ccache 사용하기

http://lethean.pe.kr/2010/02/04/using-ccache-in-ubuntu/

반복적인 build를 더 빠르게하기 위한 방법으로 ccache를 설치해 사용해보자.

2011년 10월 23일 일요일

EFL application의 Frames Per Second(FPS)로 성능 측정하기

EFL application은 ecore에서 제공하는 main loop을 기반으로 동작하며, ecore_evas는 evas canvas engine이 하위 window system 또는 frame buffer에 출력하는 기능을 제공한다.

EFL application의 rendering 성능을 측정하기 가장 적합한 위치는 바로 ecore_evas 단이 되며, ecore_evas에서는 자체적으로 다음 환경 변수의 설정에 따라 FPS를 측정해 console에 출력하는 기능을 제공한다.

$ export ECORE_EVAS_FPS_DEBUG=1

위와 같이 환경변수를 설정한 후 EFL application을 실행해 보자

$ elementary_test

다음은 elementary_test의 animation 항목을 선택한 화면이다.


console에서는 다음과 같이 성능을 출력하게 된다.

emotion_test 실행시 gstreamer pipeline 그래프로 보기

Gstreamer가 실행되었을때 사용된 pipeline을 그래프로 보기 위한 방법에 대해 소개한다.

먼저, 다음 패키지를 설치한다.

  • graphviz: dot file을 png또는 svg 형식으로 변경하는데 필요
  • inkscape: svg 형식의 파일로 graph를 보는데 필요
  • gimp: png등의 이미지 파일을 보는데 필요 (file browser에서 double click으로 gimp없이도 볼 수 있음). 또는 shotwell 프로그램을 사용해도 됨.

  1. 위 3개 패키지를 다음 명령으로 설치한다.

    $ sudo apt-get install graphviz inkscape gimp


  2. gstreamer의 pipeline을 dot 형식으로 저장하기 위해, 파일들이 저장될 directory를 환경 변수를 이용해 설정한다. 해당 디렉토리는 emotion_test 실행전에 먼저 생성되어 있어야 한다.

    $ export GST_DEBUG_DUMP_DOT_DIR=~/tmp/

  3. emotion_test를 실행해 동영상을 play한다. 이때, emotion 또한 gstreamer의 pipeline을 dot형식으로 저장하기 위해 추가적인 환경변수 설정이 필요하다.

    $ export EMOTION_GSTREAMER_DOT=1
    $ emotion_test CarsCD1.avi


  4. dot 형식 파일을 png 또는 svg 형식으로 변환한다.

    $ cd ~/tmp
    $ dot 0.00.00.155218834-1.dot -Tpng -o pipeline.png
    $ dot 0.00.00.155218834-1.dot -Tsvg -o pipeline.svg


  5. png 형식 또는 svg 형식으로 된 pipeline graph를 열어본다.

    $ shotwell pipeline.png
    $ inkscape pipeline.svg


  6. png 파일 결과 예





2011년 10월 21일 금요일

Ubuntu에 EFL 받아 build 및 실행 하기

1. EFL community에서 소스코드 받기전 필요한 packages들을 설치하는 script

$ cat pkgs-req.sh


#!/bin/bash


sudo apt-get -y install subversion autoconf automake autopoint gettext build-essential pkg-config libtool autotools-dev zlib1g-dev libfreetype6-dev libx11-dev libpng12-dev libxext-dev libxrender-dev libxinerama-dev libxcursor-dev libxrandr-dev libxdamage-dev libxcomposite-dev libxss-dev libssl-dev libcurl4-openssl-dev libdbus-1-dev libpam0g-dev libxml2-dev libxslt1-dev libltdl-dev libtag1-dev libtagc0-dev libxine-dev libsqlite3-dev fontconfig libfontconfig1-dev liblua5.1-0-dev libxfixes-dev libxp-dev libxinerama-dev libxkbfile-dev libtiff4-dev librsvg2-dev libgif-dev libxcb-shape0-dev libv8-dev mesa-common-dev libudev-dev libspectre-dev libraw-dev libpoppler-dev libgnutls-dev libasound2-dev libc-ares-dev libdrm-dev vim doxygen libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools libgles1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libglu1-mesa-dev mesa-utils libgl1-mesa-dev libexif-dev ccache libdbus-glib-1-dev gstreamer0.10-plugins-bad gstreamer0.10-plugins-cutter gstreamer0.10-plugins-ugly gstreamer0.10-plugins-good gstreamer0.10-ffmpeg


2. 스크립트를 수행해 위 패키지들을 설치한다.


$./pkgs-req.sh


3. svn.enlightenment.org하에 trunk 디렉토리 이하 코드를 다운로드 받는 스크립트

$ cat get-source-from-svn.sh

#!/bin/sh
svn co http://svn.enlightenment.org/svn/e/trunk

-----------------------------------
방화벽으로 인해 proxy server를 사용하고 있는경우 다음과 같이 작성하고, ~/.subversion/servers 파일을 수정한다.


#!/bin/sh
svn co https://svn.enlightenment.org/svn/e/trunk


$ vi ~/.subversion/servers

:
:

[global]
http-proxy-host = proxy server address
http-proxy-port = proxy port number

:
:
-----------------------------------


4. 스크립트를 수행해 소스 코드를 받는다. (시간이 많이 걸림)

$ ./get-source-from-svn.sh

5. 필요한 패키지들을 build & install 하는 스크립트

$ cat build_e.sh

#!/bin/sh

sudo ls
set -e

PREFIX="/usr/local"

SVN="http://svn.enlightenment.org/svn/e/trunk"
OPT="--prefix=$PREFIX --enable-gl-x11 --enable-ecore-evas-opengl-x11 --enable-opengl-x11"

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

PROJECTS="eina eet evas ecore expedite embryo edje e_dbus efreet eeze ethumb eio emotion elementary excessive espionnage e terminology PROTO/elev8"

export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
export PATH="$PREFIX/bin:$PATH"
export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH"

for PROJ in $PROJECTS; do
  cd trunk/$PROJ
    make clean distclean || true
    ./autogen.sh $OPT && make -j12 && sudo make install -j12
  cd ../..
  sudo ldconfig
done

6. 위 build & install script 를 실행한다. (시간이 많이 걸림)

$ ./build_e.sh


7.전체 코드를 받은 이후 부터는  update build를 한번에 수행하는 스크립트로...

$ cat update-build.sh


#!/bin/bash
sudo ls &&
pushd trunk &&
svn up --accept theirs-full &&
popd &&
./build_e.sh

8. 설치된 예제 실행해 보기
  1. expedite: evas engine 성능 측정 프로그램

    $ expedite -e xlib



  2. elementary_test: evas 기반 widget library test program

    $ ELM_ENGINE=gl elementary_test


  3. emotion_test: emotion library test program

    $ emotion_test CarsCD1.avi CarsCD2.avi CarsCD3.avi

2011년 10월 4일 화요일

eclipse에서 elementary_test project import하기

선행 작업:
1. Eclipse C/C++용으로 설치.
2. EFL (elementary와 이를 위한 library)이 시스템에 build되어 있어야 함.

수행할 일:
1. eclipse 실행
    # ./eclipse &

2. File - Import... 메뉴 선택

3. Import 대화상자에서 C/C++ - [Existing code as Makefile Project] 선택

4. Import Existing Code 대화상자에서
    Project Name: elementary_test
    Existing Code Location: 소스코드 디렉토리 ./trunk/elementary/src/bin
    Toolchain for Indexer Settings: GNU Autotools Toolchain 선택

5. Import 완료

6. 빌드하고 실행.