JavaScriptCore 분석

Dev 2009.12.10 17:50
간단한 내용이지만 고생하는 누군가에게 도움이 되면 좋겠다.


JavaScriptCore 분석

(WebKit rev 50723 기준)

 

JavaScriptCore 관련 소식/ ARM JIT 현황

l  JSC 소스에 PLATFORM(ARM_THUMB2), PLATFORM(ARM_TRADITIONAL) 컴파일 플랙에 대한 구현부가 존재한다.

l  WM6 포트에 적용할 수 있는지는 테스트해봐야 안다.

l  관련 뉴스 그룹 기사

n  2009/06/09: ARM JIT 릴리즈 됐다.
Today, we realized that there is a new ARM JIT port for WebKit. (http://trac.webkit.org/changeset/44514> )

n  2009/10/22: WinMobile에서는 안된다.
The current implementation is designed for Linux

n  2009/04/01: ARM port of JIT 공시
on a Nokia N810, and we gained 13% performance improvement. The memory consumption is increased by 3.3%.

 

 

JSC Class Diagram


 

다이어그램이 나타내는 내용 몇 가지를 다음과 같이 요약한다.

l  페이지의 root Frame WebView 1:1 관계다.

n  동일한 WebView에서 페이지를 이동할 때, root Frame 인스턴스는 유지된다.

n  페이지에 따라 sub Frame들이 필요할 때가 있는데 sub Frame들은 페이지 이동시 생성되거나 소멸된다.

n  sub Frame의 소멸은 Cache 때문에 즉각적으로 이루어지지 않는다.

l  Frame의 멤버로 ScriptController 인스턴스가 존재한다.

n  ScriptController WebCore 세계에서 JSCore를 쉽게 호출하도록 캡슐화(창구를 단일화)하는 역할을 한다.

n  WebCore가 페이지를 처리할 때, HTMLTokenParser JavaScript 소스 코드를 만나면 ScriptController::evaluate() 메소드를 호출한다. 그것으로 WebCore JSCore 사이의 모든 연결이 끝난다.

l  JSGlobalData는 싱글톤 객체로 system wide하게 1개 존재하며, 시스템과 life-cycle을 같이 한다.

n  JSGlobalDataJSC 동작에 필요한 모든 것을 나타낸다 (Lexer, Parser, Interpreter, and Data).

l  JSC::GlobalObject의 실 구현체는 WebCore::JSDOMWindow 이다.

n  JSDOMWindow Frame에 속해 있다.

l  ExecState JSCore의 실행 상태에 관한 모든 것을 나타낸다.

n  Mostly, an ExecState represents the state of execution in the VM. (Geoffrey Garen)

n  ExecState JSGlobalObject에 의해 생성/초기화 되며, JSGlobalObject life-cycle을 함께 한다.

l  JSContextRef ExecState와 동일하다.

n  JavaScriptCore/API/ 폴더 아래 있는 JSC public API을 호출하기 위해 정의한 타입이다.

n  JSC public APIC based API 이다. 이 때문에 ExecState* 객체 타입을 JSContextRef 타입으로 변환해서 사용해야 한다. 타입 변환을 위해 toRef()toJS() 함수를 사용한다.

n  toRef() toJS() 함수는 타입 캐스팅만 수행하는 inline 함수다. 때문에 런타임 실행 오버헤드가 없다 (컴파일 타임에 처리됨).

 

 

JavaScript 소스코드 실행 시퀀스, 

JSGlobalObject& ExecState 생성/초기화 시퀀스


 

l  JS 코드가 없는 페이지에서는 JSGlobalObject ExecState가 생성/초기화 되지 않는다.

l  JSGlobalObject ExecState 인스턴스는 JS 코드가 존재하는 페이지에서만 생성/초기화 된다.

 

 

(이상입니다.)

 

Posted by ingee

댓글을 달아 주세요

  1. 소혼 2009.12.12 16:24 신고  댓글주소  수정/삭제  댓글쓰기

    전혀 간단하지 않아요.
    아직 자세히 보지 않았지만 많은 도움이 될 것 같습니다.
    찬찬히 코드랑 비교하며 볼께요 ^^ 다시 한번 감사합니다.

  2. webkit 2010.07.14 19:14 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 프레임 로딩이 완전히 끝난시점에 자바스크립트를 실행하는데요, 이 코드가 실행되면서 dom구조를 바꾸게 되는데, 실행하고 나서 바로 dom을 확인하면 그대로이더라구요..
    그래서 자바스크립트를 실행하면 비동기적으로 이루어진다고 생각되는데, 그러면 실행이 완료되는 시점에 처리를해줄수있는 delegate같은게 있는지요? 제가 생각하고 있는게 맞는지 모르겠습니다 --;; 답변 부탁드리겠습니다.