웹킷 어디까지 왔나?
(GPU 가속 feature를 중심으로...)


웹킷 뉴스 그룹에서의 주요 안건들 요약
* HTML5 Microdata 지원 공지 (2011/9/22 : New feature announcement - Implement HTML5 Microdata in WebKit)
* HTML5 WebWorker 관련 기능 구현 논의 (2011/9/23 : starting implementation of postMessage tranferables)
* HTML5 Canvas 관련 기능 구현 논의 (2011/9/13 : Mouse Lock API)
* HTML5 time element 관련 기능 구현 논의 (2011/9/16 : Implementing HTML5 time element)
==> 요약: 현재 WebKit 진영에서는 CSS3와 HTML5에 관한 구현 논의가 주요 이슈임


GPU 가속 관련 현황 요약
* GPU는 CPU와 달리 데이터 병렬성이 풍부해 대용량 데이터 처리에 효율적임
* HTML5 Video를 이용 브라우저에서 HD 영상을 표시하기 위해서는 GPU 가속 기능 활용이 필수적임
* WebKit은 화면 처리를 위해 software rendering path와 hardware accelerated path를 제공함
* GPU 가속 feature는 WebKit 차원에서는 종료된 문제임; GPU 가속 기능 제공 여부는 브라우저 port의 문제임
* 애플의 사파리 브라우저는 오래전부터 hardware accelerated path를 심도 깊게 활용함; GPU 가속 기능 제공함
* 애플의 모바일 사파리 브라우저도 아이폰을 처음 출시할 때부터 GPU 가속 기능을 제공함
* 구글의 크롬 브라우저는 2010년 9월 (크롬7) 부터 GPU 가속 기능을 제공하기 시작함
* 구글의 폰용 안드로이드 브라우저는 아직 GPU 가속 기능을 제공하지 않음 (2011/10/19 현재)
* 구글의 패드용 안드로이드는 (안드로이드 3.0 허니콤은) GPU 가속 기능을 제공하나 아직 최적화 되지 않음; 간혹 화면이 깨지는 문제, 성능 문제 등이 보임 (2011/10/19 현재)
* 구글이 곧 발표할 아이스크림 샌드위치는 스마트 폰에서도 GPU 가속 기능을 제공하리라 전망함. 하지만 아직(2011/10/19)까지 구글의 명시적인 발표는 없음; 오늘(2011/10/21) 아이스크림 샌드위치 발표함. GPU 가속 지원 현황에 대해 좀 더 조사가 필요함 (젠장...)
==> 이제 Android 4.0을 (아이스크림 샌드위치를) 사용하는 모든 단말은 GPU 가속 기능을 제공해야 한다. 이로 인해 모든 안드로이드 App (웹 브라우저도 포함하겠지?..)은 GPU 가속 기능의 혜택을 누릴 수 있게 됐다. (2011.10.24. 내용 추가함. GPU 가속 기능이 OS 차원에서 지원된다는 얘기)
http://developer.android.com/sdk/android-4.0-highlights.html#DeveloperApis
(
Hardware-accelerated 2D drawing
All Android-powered devices running Android 4.0 are required to support hardware-accelerated 2D drawing. Developers can take advantage of this to add great UI effects while maintaining optimal performance on high-resolution screens, even on phones. For example, developers can rely on accelerated scaling, rotation, and other 2D operations, as well as accelerated UI components such as TextureView and compositing modes such as filtering, blending, and opacity.)
 
 

Reference
* 브라우저에서 그래픽 가속하기 (from WebKit mailing-group)
Accelerated 2D Tesselation Implementation (from WebKit mailing-group)
Chromium "GPU" LayoutTests (from WebKit mailing-group)
GPU Accelerated Compositing in Chrome (from Chrome 개발자 사이트)
Google Activates Chrome GPU Acceleration
Guess who is WebKit’s new best friend
Issue 6914: Make android use the GPU (if available) for UI and browsing (안드로이드 이슈 페이지)
 
(이상)
 
저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

  1. 박군 2012.01.10 17:25 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 webkit에 대해서 정보를 찾아보다 오게 됬습니다.
    상당한 양과 질의 정보에 많은 도움이 되어 감사하게 생각합니다.
    제가 완전 새내기 초보 수준이라 좀 이해가 안되는 부분이 있어 질문을 댓글로 남기려 하는데요
    제가 가지고 있는 보드에 webkit을 올리려고 하는데
    단순한 url을 가지고 view만 해주면 되는거라 궂이 webkit을 빌드 해서 라이브러리를 만들 필요 없이
    webkit core에 있는 소스만 가져와서 쓰려고 하는데 이것이 가능할지 궁금합니다?
    그리고 툴킷 포팅은 제가 가지고 있는 보드에서 쓰는 플랫폼에 맞춰서 수정하려고 하는데
    이 경우 win이나 gtk가 아니라서 cairo 자체를 수정 할수 있을까요?
    부족한 질문이라 애매하게 생각되실지 모르겠지만 조금이나마 조언을 구하 고자 합니다.

    • ingee 2012.01.11 13:01 신고  댓글주소  수정/삭제

      작업하시는 보드가 Android 보드라면 Android 커널에 WebKit 모듈이 있으니까 따로 WebKit을 빌드하거나 포팅할 필요가 없습니다.
      하지만 어째 말씀하시는 뉘앙스가 그런거 없는 (OS가 안드로이드가 아닌, OS에 WebKit이 포함되어 있지 않은) 보드 같은데... WebKit 소스를 있는 그대로 가져다가 실행되도록 하는 맞춰주는 과정이 포팅입니다. 그런 포팅 작업을 하자면 win, gtk, cairo 등을 선택해서 수정하는 작업이 필요합니다.
      행운이 함께 하기를 빕니다. :)

  2. 파바밧™ 2012.03.06 15:29 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 반갑습니다~ 지금 webkit 을 공부하고 있는데 아주 많은 도움이 되고 있어 정말 고맙습니다~
    다름이 아니라 webkit 에서 플러그인을 만들려고 하는데요 TestNetscapePlugin 예제로 디버깅을 하려는데 전혀 안되고 있어요 ㅠ.ㅠ

    혹시 플러그인과 관련해서 조언 좀 구할수 있을까요?

    • ingee 2012.03.06 22:51 신고  댓글주소  수정/삭제

      웹킷 플러그인은 해본 적이 없는 일이라 조언 드리기 어렵습니다. 그래도 도움되기를 바라며, 다른 브라우저의 플러그인 작업 경험을 바탕으로 일반적인 차원에서 몇마디 보탭니다.

      1. 우선 페이지 안에서의 플러그인 동작을 위해 NPAPI (맞나?? 넷스케이프가 정의한 플러그인 API) 함수들을 구현해야 합니다.

      2. 그리고 플러그인의 설치/검색/생성을 위해 브라우저가 정의한 함수들을 구현해야 합니다. 이건 브라우저마다 다른 부분입니다. 사파리 브라우저, 크롬 브라우저, 안드로이드 내장 브라우저가 제각각 정하는 규격이 있을 겁니다.

      쫌이라도 도움되면 기쁘겠습니다. 작업 결과물 나오면 여기에 폼나게 자랑 한번 해주세요.

  3. laconicblue 2012.04.16 11:27 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    webkit 에 대한 자세한 정보들 감사드립니다.
    저는 스위치 같은 임베디드 시스템만 만들다가, 터치 스크린을 장착한 장비를 처음으로 만지면서 webkit 을 사용하게 되었습니다.
    directfb + gtk + webkit (without X11) 을 잘 컴파일하고 GtkLancher 로 각 사이트가 열리는 것까지 확인했습니다.
    그런데 Gtklancher 내에서 click 으로 다음 사이트에 넘어 갈수록
    ps aux 나 /proc/(pid)/status 상에 나타나는 memory 사용량이 계속 늘어나 100 메가 이상이 되어 버리면서
    memory 부족으로 GtkLancher 가 죽어 버리는 일이 발생하는 군요..=-=

    html 에서 그림 파일을 로딩하게 하고 click 하면 다음 그림을 보여주는 방식으로 단순한 테스트 였습니다.
    그림은 10장 정도 이지만 20번 가까이 클릭하면 계속 증가하는 군요..

    Webkit 의 tool 로 제공되는 GtkLauncher 는 간단한 browser 로 사용이 불가능한 것인가요?
    저는 기본 사이트를 open 하고 그 사이트 내에서 click 으로 기능을 보여주는 것이 목표입니다.. ^^

    GtkLauncher 의 이런 메모리 사용에 대해 조언을 구할 수 있을까요?

    • ingee 2012.04.16 11:40 신고  댓글주소  수정/삭제

      메모리를 할당만하고 해지 못하는 것 같습니다. WebKit소스가 매크로로 정의하고 있는 memory free 함수가 실제 free 함수로 정의되어 있는지 확인하면 좋을 것 같습니다.
      실제 키워드를 일러주면 좋을텐데 웹킷 소스를 보고 있지 않은지라 그러지 못합니다. 이해해주세요.

    • laconicblue 2012.04.16 14:29 신고  댓글주소  수정/삭제

      감사합니다.

      답변이 너무 빨라서 놀랬습니다.. ^^

      이래저래 웹서핑에 의존하다가 차근히 보기 시작했습니다.

      일단, 증가하는 사이즈가 8M 정도씩되면서
      주로 이미지 테스트시에 보인 것으로 봐서
      DocLoader 에서 ResourceHandle 쪽을 따라(?) 가면서 사용되는 free 함수를 보도록 하겠습니다...

    • ingee 2012.04.16 15:10 신고  댓글주소  수정/삭제

      요즘 한가해서... 긁적... ㅠㅠ
      캐시 관리하는 쪽도 같이 보시면 좋을 것 같습니다. 메모리가 모자라면 캐시를 지우는 정책이 있을텐데 그게 잘 동작하지 않는 것 같습니다.
      좋은 결과 기원합니다.
      문제가 해결되면 어떻게 해결했다라는 코멘트 부탁드립니다. 여러 사람 살리실거에요.

찾는데 힘들었다. 커맨드 라인 콘솔에서 java 소스 코드를 컴파일해서 ADB shell을 통해 안드로이드 플랫폼에서 실행시키기 까지의 과정을 보여준다.
(원본 링크) http://davanum.wordpress.com/2007/12/04/command-line-java-on-dalvikvm/


December 4, 2007

Command line Java on DalvikVM

Filed under: Uncategorized — Davanum Srinivas @ 11:21 am

Found this very useful when i was trying out the JNI under android (Short Story – Could not get it to work!).

Step #1: Start with a simple java class

package org.apache;

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Compile the java class

C:\android\CmdLine>javac -d . -g Helloworld.java

Step #2: Package the generated classes into a temporary jar

C:\android\CmdLine>jar -cvf Temp.jar *
added manifest
adding: Hello.java(in = 0) (out= 0)(stored 0%)
adding: HelloWorld.java(in = 149) (out= 122)(deflated 18%)
adding: org/(in = 0) (out= 0)(stored 0%)
adding: org/apache/(in = 0) (out= 0)(stored 0%)
adding: org/apache/HelloWorld.class(in = 556) (out= 344)(deflated 38%)

Step #3: Use the “dx” tool to generate a classes.dex from our temporary jar.

C:\android\CmdLine>dx --dex --output=c:/android/CmdLine/classes.dex c:/android/CmdLine/Temp.jar

Step #4: Use the “aapt” tool to create a new jar suitable for use with dalvikvm

C:\android\CmdLine>aapt add CmdLine.jar classes.dex
'classes.dex'...

and push it into a known location on the emulator

C:\android\CmdLine>adb push CmdLine.jar /data
30 KB/s (0 bytes in 481.000s)

Step #5: kick the tires of dalvikvm

C:\android\CmdLine>adb shell
# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -version
/system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -version
DalvikVM version 0.2.0
Copyright (C) 2007 Google, Inc.
Blah blah blah LICENSE blah blah.
Dalvik VM init failed (check log file)

Step #6: Run our code

# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -classpath /data/CmdLine.jar org.apache.HelloWorld
/system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -classpath /data/CmdLine.jar org.apache.HelloWorld
Hello World!

(끝)

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

http://android-developers.blogspot.com/ 블로그에서 NDK를 키워드로 기사를 검색해서 4개의 포스트를 찾았다. 4개 기사의 내용을 요약한다. 영어다. 갑갑한가? 나는 환장하겠다. 당분간 영어로 포스트를 올리게 될 것 같다. -_-;;


http://android-developers.blogspot.com/2010/05/android-22-and-developers-goodies.html
"Android 2.2 and developers goodies."
Posted by Xavier Ducrohet, Android SDK Tech Lead on 20 May 2010 at 9:00 AM
 - 20/May/2010 Android 2.2 announced. (7th platform release since Android 1.0)
 - (on the native side,) add new APIs to access Skia bitmap
 - tools update
  - Android SDK Tools, Revision 6, Eclipse plug-in 0.9.7
  - Android NDK, Revision 4

http://android-developers.blogspot.com/2010/03/android-ndk-r3.html
"Android NDK r3"
Posted by David Turner on 08 March 2010 at 11:25 AM
 - NDK r3 can used to target devices running Android 1.5 and higher
 - use GCC 4.4.0 (previously used GCC 4.2.1)
  so, generate slightly more compact and efficient machine code
 - support OpenGL ES 2.0

http://android-developers.blogspot.com/2009/09/now-available-android-16-ndk.html
"Now available: Android 1.6 NDK"
Posted by David Turner on 29 September 2009 at 10:00 AM
 - NDK is a companion to SDK
 - NDK is used to generate and embed ARM machine code within your App Package
 - NDK 1.6 features
  - support OpenGL ES 1.1
  - many fixes to the NDK build scripts

http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
"Introducing Android 1.5 NDK, Release 1"
Posted by David Turner on 25 June 2009 at 10:30 AM
 - finally, android App-developers can use native code for their App
 - provide libc, libm, JNI, libz, and liblog libraries


(끝)

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요