디지털 장인정신

블로그 이미지
WebKit개발자의 혼자쓰는 블로그
스페로

Article Category

All (71)
Technology (47)
Creativity (19)
Private (4)

Recent Comment

Recent Trackback

Calendar

«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Archive

My Link

  • Total339,104
  • Today15
  • Yesterday243
  1. 2013.05.15
    chromium command line
  2. 2013.02.20
    webkit의 scale (1)
  3. 2012.12.13
    qt의 triple buffering (2)
  4. 2012.12.12
    Profiling WebKit with Perf (1)
  5. 2012.12.11
    High-DPI and viewport and sub pixel layout (2)
  6. 2012.10.23
    WebKit css3 animations on Accelerated Compositing (1)
  7. 2012.10.20
    WebKit Filters Animation Internal (1)
  8. 2012.10.15
    WebKit2 Injected Bundle (1)
  9. 2012.06.02
    oprofile (2)
  10. 2012.05.31
    massif 메모리 사용량을 측정하자

pinch zoom: --force-compositing-mode --enable-threaded-compositing --simulate-touch-screen-with-mouse --enable-pinch

single process: --single-process

debug: --no-sandbox

gpu debug: --gpu-process --disable-gpu-sandbox or --in-process-gpu --disable-gpu-sandbox

'Technology > Working Note' 카테고리의 다른 글

chromium command line  (0) 2013.05.15
webkit의 scale  (1) 2013.02.20
qt의 triple buffering  (2) 2012.12.13
Chromium build  (2) 2012.05.25
Ubuntu 11.10 reinstall  (1) 2011.11.29
Qt Build  (2) 2011.09.23
Trackback 12 and Comment 0

webkit wiki

http://trac.webkit.org/wiki/ScalesAndZooms


CSS Device Adaptation spec

http://dev.w3.org/csswg/css-device-adapt/


meta bug

https://bugs.webkit.org/show_bug.cgi?id=95959


other browser

http://www.opera.com/docs/specs/presto28/css/viewportdeviceadaptation/

http://samples.msdn.microsoft.com/ietestcenter/default.htm#css3deviceadaptation


Viewport

http://www.quirksmode.org/mobile/viewports.html

http://www.quirksmode.org/mobile/viewports2.html

http://www.quirksmode.org/dom/events/resize_mobile.html

'Technology > Working Note' 카테고리의 다른 글

chromium command line  (0) 2013.05.15
webkit의 scale  (1) 2013.02.20
qt의 triple buffering  (2) 2012.12.13
Chromium build  (2) 2012.05.25
Ubuntu 11.10 reinstall  (1) 2011.11.29
Qt Build  (2) 2011.09.23
Trackback 9 and Comment 1

http://qt-project.org/doc/qt-5.0/qtgui/qsurfaceformat.html#SwapBehavior-enum

https://qt.gitorious.org/qt/qtwayland/blobs/master/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglwindow.cpp

http://wayland.freedesktop.org/qt5.html

'Technology > Working Note' 카테고리의 다른 글

chromium command line  (0) 2013.05.15
webkit의 scale  (1) 2013.02.20
qt의 triple buffering  (2) 2012.12.13
Chromium build  (2) 2012.05.25
Ubuntu 11.10 reinstall  (1) 2011.11.29
Qt Build  (2) 2011.09.23
Trackback 4 and Comment 2

it is like oprofile but a lot nicer

sudo perf top -p PID

https://perf.wiki.kernel.org/index.php/Main_Page



result

31.37%  libQt5Gui.so.5.0.0          [.] 0xa5a08                                                                                                                           

11.69%  libnvidia-glcore.so.304.43  [.] 0x13cb53f                                                                                                                         

 7.52%  perf-18917.map              [.] 0x7f2847734593                                                                                                                    

 6.01%  [kernel]                    [k] native_write_msr_safe                                                                                                             

 2.38%  libGL.so.304.43             [.] 0x7a85d                                                                                                                           

 1.00%  [kernel]                    [k] __schedule                                                                                                                        

 0.89%  [kernel]                    [k] set_next_entity                                                                                                                   

 0.85%  libJavaScriptCore.so.1.0.0  [.] _ZNK3JSC7JSValue3getEPNS_9ExecStateENS_12PropertyNameERNS_12PropertySlotE.constprop.219                                           

 0.84%  [kernel]                    [k] __ticket_spin_lock                                                                                                                

 0.80%  [kernel]                    [k] update_curr                                                                                                                       

 0.76%  libc-2.15.so                [.] __sched_yield                                                                                                                     

 0.70%  libWebCore.so.1.0.0         [.] WebCore::WebGLSharedObject::validate(WebCore::WebGLContextGroup const*, WebCore::WebGLRenderingContext const*) const              

 0.58%  libc-2.15.so                [.] __memmove_ssse3_back                                                                                                              

 0.51%  libnvidia-tls.so.304.43     [.] 0x1c70                                                                                                                            

 0.50%  libc-2.15.so                [.] _int_malloc                                                                                                                       

 0.46%  libJavaScriptCore.so.1.0.0  [.] operationGetById                                                                                                                  

 0.43%  libJavaScriptCore.so.1.0.0  [.] cti_op_stricteq                                                                                                                   

 0.42%  [kernel]                    [k] update_shares                                                                                                                     

 0.39%  libWTF.so.1.0.0             [.] WTF::Mutex::lock()                                                                                                                

 0.38%  libWebCore.so.1.0.0         [.] WebCore::GraphicsContext3D::makeContextCurrent()                                                                                  

 0.38%  libJavaScriptCore.so.1.0.0  [.] _ZNK3JSC7JSValue3getEPNS_9ExecStateENS_12PropertyNameERNS_12PropertySlotE.constprop.425                                           

 0.37%  [kernel]                    [k] update_stats_wait_end                                                                                                             

 0.37%  [kernel]                    [k] hrtick_update                                                                                                                     

 0.37%  libglib-2.0.so.0.3200.3     [.] poll@plt                                                                                                                          

 0.36%  libWebCore.so.1.0.0         [.] WebCore::JSWebGLRenderingContext::getOwnPropertySlot(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&)        

 0.36%  [kernel]                    [k] pick_next_task_fair                                                                                                               

 0.35%  [kernel]                    [k] update_cfs_load                                                                                                                   

 0.35%  libpthread-2.15.so          [.] pthread_mutex_unlock                                                                                                              

 0.35%  libJavaScriptCore.so.1.0.0  [.] cti_op_jtrue                                                                                                                      

 0.33%  [kernel]                    [k] pick_next_entity                                                                                                                  

 0.31%  libc-2.15.so                [.] __libc_enable_asynccancel                                                                                                         

 0.31%  [kernel]                    [k] sock_alloc_send_pskb                                                                                                              

 0.31%  [kernel]                    [k] rb_insert_color                                                                                                                   

 0.30%  [kernel]                    [k] __rb_erase_color                                                                                                                  

 0.30%  [kernel]                    [k] system_call                                                                                                                       

 0.30%  [kernel]                    [k] kmem_cache_alloc_node                                                                                                             

 0.29%  [kernel]                    [k] put_prev_entity                                                                                                                   

 0.29%  [kernel]                    [k] get_vmalloc_info                                                                                                                  

 0.28%  [kernel]                    [k] _raw_spin_lock                                                                                                                    

 0.26%  [kernel]                    [k] native_read_tsc                                                                                                                   

 0.24%  libQt5Core.so.5.0.0         [.] QThreadStorageData::get() const                                                                                                   

 0.23%  libWebCore.so.1.0.0         [.] WebCore::WebGLRenderingContext::handleNPOTTextures(char const*, bool)                                                             

 0.22%  [kernel]                    [k] sys_sched_yield                                                                                                                   

 0.22%  libc-2.15.so                [.] __memset_sse2                                                                                                                     

 0.22%  [kernel]                    [k] __enqueue_entity                                                                                                                  

 0.21%  libWebCore.so.1.0.0         [.] WebCore::WebGLRenderingContext::vertexAttribPointer(unsigned int, int, unsigned int, unsigned char, int, long long, int&)         

 0.21%  libxcb.so.1.1.0             [.] 0xa790                                                                                                                            

 0.20%  [kernel]                    [k] nr_blockdev_pages                                                                                                                 

 0.20%  libWebCore.so.1.0.0         [.] WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&, unsigned int) 

 0.20%  ld-2.15.so                  [.] __tls_get_addr                                                                                                                    

 0.20%  libc-2.15.so                [.] __strncmp_sse42                                                                                                                   

 0.19%  libWebCore.so.1.0.0         [.] WebCore::WebGLRenderingContext::sizeInBytes(unsigned int)                                                                         

 0.19%  libJavaScriptCore.so.1.0.0  [.] JSC::CodeBlock::updateAllPredictionsAndCountLiveness(JSC::OperationInProgress, unsigned int&, unsigned int&)                      

 0.18%  [kernel]                    [k] effective_load.isra.57                                                                                                            



'Technology > Webkit' 카테고리의 다른 글

Profiling WebKit with Perf  (1) 2012.12.12
High-DPI and viewport and sub pixel layout  (2) 2012.12.11
WebKit css3 animations on Accelerated Compositing  (1) 2012.10.23
WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
Trackback 4 and Comment 1

에플 레티나 디스플레이 때문에 요즘 웹킷 그래픽스 folk들 사이에서는 HDPI지원을 위한 패치들이 한참이다.

관련된 주제들은 다음과 같다.


1. SubPixel layout

http://trac.webkit.org/wiki/LayoutUnit

http://trac.webkit.org/changeset/116009


2. SubPixel font rendering

https://docs.google.com/document/d/1wpzgGMqXgit6FBVaO76epnnFC_rQPdVKswrDQWyqO1M/edit#heading=h.bjsw53t8jqke


3. DEVICEPIXELRATIO & Viewport

http://www.html5rocks.com/en/tutorials/canvas/hidpi/

http://www.html5rocks.com/en/mobile/high-dpi/

http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html

http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html

http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html

http://developer.apple.com/library/safari/#documentation/NetworkingInternet/Conceptual/SafariImageDeliveryBestPractices/Introduction/Introduction.html

http://developer.android.com/guide/webapps/targeting.html


패치는 커녕 follow-up만으로도 힘이 붙인다.

'Technology > Webkit' 카테고리의 다른 글

Profiling WebKit with Perf  (1) 2012.12.12
High-DPI and viewport and sub pixel layout  (2) 2012.12.11
WebKit css3 animations on Accelerated Compositing  (1) 2012.10.23
WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
Trackback 0 and Comment 2

우선 WebCore의 animation의 구조부터 보자


1. AnimationController

- timer로 animation loop를 돌린다.

- Map<renderer, CompositeAnimation>으로 document의 모든 animation을 관리한다.


2. CompositeAnimation

- Map<name, KeyframeAnimation> 혹은 Map<int, ImplicitAnimation>으로 animation들을 관리한다. 하나의 renderer가 여러 keyframe&transition animation의 적용을 받을수 있기 때문이다.


3. AnimationBase

- RefPtr<Animation> : name, TimingFunction, delay, duration, iterCount 등을 관리


4. KeyframeAnimation extends AnimationBase

-  KeyframeList : keyframe당 style들을 저장. animation하는 CSSPropertyID들도 저장

- RenderStyle : animation되기 전의 style. animation시 keyframe당 style을 이 객체로 부터 복사해서 만든다.

Software path에서는 KeyframeAnimation::animate 메소드로 animation을 blend한다. 그럼 무려 RenderStyle로 blend를 하는 비효율을 보여준다.

AC path에서는 GraphicsLayer.h에 정의되어있는 KeyframeValueList 로 blend를 한다. 아주 효율적이다.

KeyframeValueList는 RenderLayerBacking::startAnimation에서 KeyframeList로부터 만들어낸다. 즉 각 platform GraphicsLayer는 RenderStyle과 관련없는 animation의 정수만 뽑아낸 KeyframeValueList를 받아 알아서 animation을 진행한다.

그럼 transition은 AC에서 어떻게 처리할까? RenderLayerBacking::startTransition이 transition을 keyframe animation처럼 KeyframeValueList 만들어서 GraphicsLayer에 넘겨준다.

즉 AC입장에서는 keyframe animation과 transition의 처리 루틴이 같다.

'Technology > Webkit' 카테고리의 다른 글

Profiling WebKit with Perf  (1) 2012.12.12
High-DPI and viewport and sub pixel layout  (2) 2012.12.11
WebKit css3 animations on Accelerated Compositing  (1) 2012.10.23
WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
Trackback 0 and Comment 1

I investigated when enabling Accelerated Compositing. However, process is the same to software path until RenderLayer::styleChanged() in 3. Notify filters changed.


1. Animation loop : loop using timer in AnimationControllerPrivate

FrameView::serviceScriptedAnimations() <- request animation frame callback

AnimationController::serviceAnimations()

AnimationControllerPrivate::animationFrameCallbackFired()

AnimationControllerPrivate::animationTimerFired()

AnimationControllerPrivate::updateAnimationTimer()

1) m_animationTimer.startRepeating() if needed: creating loop

AnimationControllerPrivate::updateAnimations()

Document::updateStyleIfNeeded()

void RenderObject::setAnimatableStyle(PassRefPtr<RenderStyle> style)

{

    if (!isText() && style)

        setStyle(animation()->updateAnimations(this, style.get()));

    else

        setStyle(style);

}

1) Blend FilterOperation

2) Notify filters changed


2. Blend FilterOperation : Create FilterOperations per frame.

AnimationController::updateAnimations()

CompositeAnimation::animate()

KeyframeAnimation::animate()

CSSPropertyAnimation::blendProperties()

PropertyWrapperAcceleratedFilter::blend()

BasicColorMatrixFilterOperation::blend()


3. Notify filters changed : notify FilterOperations changed to RenderLayer

RenderObject::setStyle()

RenderLayerModelObject::styleDidChange()

RenderLayer::styleChanged()

4) ensure backing if needed

5) notify flush


4. ensure backing if needed : create RenderLayerBacking at the first time.

RenderLayerCompositor::updateLayerCompositingState()

RenderLayerCompositor::updateBacking()

RenderLayer::ensureBacking()


5. notify flush : notify FilterOperations changed to GraphicsLayer

RenderLayerBacking::updateGraphicsLayerGeometry()

RenderLayerBacking::updateFilters()

GraphicsLayerTextureMapper::setFilters()

LayerTreeCoordinator[AcceleratedCompositingContext]::scheduleLayerFlush()

'Technology > Webkit' 카테고리의 다른 글

High-DPI and viewport and sub pixel layout  (2) 2012.12.11
WebKit css3 animations on Accelerated Compositing  (1) 2012.10.23
WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
massif 메모리 사용량을 측정하자  (0) 2012.05.31
Trackback 1 and Comment 1

Refer to

http://lists.webkit.org/pipermail/webkit-gtk/2012-May/001078.html


WebProcess의 addon을 달 수 있는 기능. 현재는 거의 WebKitTestRunner때문에 만들어졌다고 봐도 과언이 아니다. 
일반적인 plugin mechanism과 달리 오직 하나의 InjectedBundle만 WebProcess에 inject할 수 있다.

일반적인 plugin mechanism이란? (recommend to read  http://www.apibook.com/blog/)
API를 plugin을 통해 extending하는 방법. 크롬이 NPAPI API를 통해 author가 작성한 플러그인을 사용하거나 3D Max에서 서드파티가 제공하는 addon을 붙이는 방법이다. author는 plugin API를 구현한뒤 shared library로 만든다. 어플리케이션이 런타임에 shared library를 로드하고 해당 API를 콜하게 된다.
보통 plugin manager를 만들어 여러 shared library를 동시에 로드할 수 있게끔 구현한다. (크롬이 flash plugin과 pdf reader plugin을 동시에 쓸수 있는것 처럼)
근데 Injected Bundle은 오직 하나의 shared library만 로드할 수 있도록 심플하게 구현되어있다. (가장위의 refer 참조)

Call Flow
1. initialize
in Source/WebKit2/WebProcess/WebProcess.cpp

void WebProcess::postInjectedBundleMessage(const CoreIPC::DataReference& messageData)

{

    InjectedBundle* injectedBundle = WebProcess::shared().injectedBundle();

    ...

}


in Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp

void WKBundleInitialize(WKBundleRef bundle, WKTypeRef initializationUserData)

{

    WTR::InjectedBundle::shared().initialize(bundle, initializationUserData);

}


in Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp

void InjectedBundle::initialize(WKBundleRef bundle, WKTypeRef initializationUserData)

{

    WKBundleClient client = {


    };

    WKBundleSetClient(m_bundle, &client);

}


in Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp

void InjectedBundle::initializeClient(WKBundleClient* client)

{

    m_client.initialize(client);

}


2. create page

in Source/WebKit2/WebProcess/WebPage/WebPage/WebPage.cpp

PassRefPtr<WebPage> WebPage::create(uint64_t pageID, const WebPageCreationParameters& parameters)

{

    ....

    if (page->pageGroup()->isVisibleToInjectedBundle() && WebProcess::shared().injectedBundle())

        WebProcess::shared().injectedBundle()->didCreatePage(page.get());

    ....

}


in Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp

void InjectedBundle::didCreatePage(WKBundlePageRef page)

{

    m_pages.append(adoptPtr(new InjectedBundlePage(page)));

}


in Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp

InjectedBundlePage::InjectedBundlePage(WKBundlePageRef page)

    : m_page(page)

    , m_world(AdoptWK, WKBundleScriptWorldCreateWorld())

{

    WKBundlePageLoaderClient loaderClient = {    };

    WKBundlePageSetPageLoaderClient(m_page, &loaderClient);


    WKBundlePageResourceLoadClient resourceLoadClient = {    };

    WKBundlePageSetResourceLoadClient(m_page, &resourceLoadClient);


    WKBundlePagePolicyClient policyClient = {    };

    WKBundlePageSetPolicyClient(m_page, &policyClient);


    WKBundlePageUIClient uiClient = {    };

    WKBundlePageSetUIClient(m_page, &uiClient);


    WKBundlePageEditorClient editorClient = {    };

    WKBundlePageSetEditorClient(m_page, &editorClient);


#if ENABLE(FULLSCREEN_API)

    WKBundlePageFullScreenClient fullScreenClient = {    };

    WKBundlePageSetFullScreenClient(m_page, &fullScreenClient);

#endif

}


in Source/WebKit2/WebProcess/WebPage/WebPage/WebPage.cpp

void WebPage::initializeInjectedBundleLoaderClient(WKBundlePageLoaderClient* client)

{

    ....

    m_loaderClient.initialize(client);

}


3. loader callback

in Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

void WebFrameLoaderClient::postProgressFinishedNotification()

{

    if (WebPage* webPage = m_frame->page()) {

        if (m_frame->isMainFrame()) {

            // Notify the bundle client.

            webPage->injectedBundleLoaderClient().didFinishProgress(webPage);


            webPage->send(Messages::WebPageProxy::DidFinishProgress());

        }

    }

}


in Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp

void InjectedBundlePage::didFinishProgress(WKBundlePageRef, const void *clientInfo)

{

    static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didFinishProgress();

}



Build

InjectedBundle은 shared library로 따로 빌드된다. WebKitTestRunner를 실행히 env로 shared library의 path가 세팅된다.


in  Tools/WebKitTestRunner/GNUmakefile.am

# The InjectedBundle library allows the render process to load harness code.

if ENABLE_WEBKIT2

noinst_LTLIBRARIES += Libraries/libTestRunnerInjectedBundle.la

endif



How to send InjectedBundle path from UI Process to Web Process

위에서 서술하다 싶이 env로 UI Process의 TestController가 알아낸후 WebContext에게 알려준다.

in Tools/WebKitTestRunner/gtk/main.cpp

int main(int argc, char** argv)

{

    gtk_init(&argc, &argv);

    // Prefer the not installed web and plugin processes.

    WTR::TestController controller(argc, const_cast<const char**>(argv));

    return 0;

}


in Tools/WebKitTestRunner/TestController.cpp

void TestController::initialize(int argc, const char* argv[])

{

    ...

    initializeInjectedBundlePath();


    ...

    m_context.adopt(WKContextCreateWithInjectedBundlePath(injectedBundlePath()));

    ...

}


in Source/WebKit2/UIrocess/WebContext.cpp

PassRefPtr<WebContext> WebContext::create(const String& injectedBundlePath)

{

    JSC::initializeThreading();

    WTF::initializeMainThread();

    RunLoop::initializeMainRunLoop();

    return adoptRef(new WebContext(ProcessModelSharedSecondaryProcess, injectedBundlePath));

}


What is InjectedBundle in UI Process

UI Process에도 callback을 inject하는 듯한 코드들이 있다. (밑에처럼)

이것은 shared library를 ld하여 callback을 등록한다는 개념의 injected bundle보다는, 그냥 callback을 등록하는 코드이다.

코드를 reuse하기위해 콜백등록 패턴을 그냥 쓰는데, 코드를 읽는데 굉장한 혼란을 준다.


in Tools/WebKitTestRunner/TestController.cpp

void TestController::initialize(int argc, const char* argv[])

{

    ...

    WKContextInjectedBundleClient injectedBundleClient = {

        kWKContextInjectedBundleClientCurrentVersion,

        this,

        didReceiveMessageFromInjectedBundle,

        didReceiveSynchronousMessageFromInjectedBundle,

        0 // getInjectedBundleInitializationUserData

    };

    WKContextSetInjectedBundleClient(m_context.get(), &injectedBundleClient);

    ...

}


'Technology > Webkit' 카테고리의 다른 글

WebKit css3 animations on Accelerated Compositing  (1) 2012.10.23
WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
massif 메모리 사용량을 측정하자  (0) 2012.05.31
cachegrind in valgrind  (5) 2012.05.31
Trackback 1 and Comment 1

how to use

http://lbrandy.com/blog/2008/11/oprofile-profiling-in-linux-for-fun-and-profit/


how to profile WebKit

http://trac.webkit.org/wiki/QtWebKitProfilingSetup


how to build vmlinux and attach to oprofile

http://lovebug356.blogspot.kr/2008/06/oprofile-setup-on-ubuntu.html


ubuntu 12.04 is not supported

https://launchpad.net/ubuntu/precise/amd64/oprofile/0.9.6-1.3ubuntu1


various profile wiki

http://wiki.gnashdev.org/Profiling

'Technology > Webkit' 카테고리의 다른 글

WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
massif 메모리 사용량을 측정하자  (0) 2012.05.31
cachegrind in valgrind  (5) 2012.05.31
WebKit2 Rendering 분석 (only if using Texture Mapper)  (1) 2012.01.28
Trackback 0 and Comment 2

massif를 이용하면 메모리 사용량을 알 수 있습니다.

역시 valgrind tool중 하나 입니다.

luxtella@luxtella-T5500:bin(qt4.8.1)> valgrind --tool=massif ./QtTestBrowser

이렇게 실행하면 massif.out.8919 이런파일이 dump됩니다.

luxtella@luxtella-T5500:bin(qt4.8.1)> massif-visualizer ./massif.out.8919

이렇게 gui tool로 보면

1. 어느 모듈이 시간에 따라 얼마나 메모리를 사용했는지 알수 있고




2. 각 구간별로 그 메모리를 어떤 연유로 사용하게 됬는지 알 수 있습니다.
이게 편한 기능인데 WebKit안에서는 모두 fastMalloc으로 heap을 잡기 때문에 누가 heap을 잡았을까가 궁금한 부분이 잖아요.



'Technology > Webkit' 카테고리의 다른 글

WebKit Filters Animation Internal  (1) 2012.10.20
WebKit2 Injected Bundle  (1) 2012.10.15
oprofile  (2) 2012.06.02
massif 메모리 사용량을 측정하자  (0) 2012.05.31
cachegrind in valgrind  (5) 2012.05.31
WebKit2 Rendering 분석 (only if using Texture Mapper)  (1) 2012.01.28
Trackback 1 and Comment 0
prev Prev : [1] : [2] : [3] : [4] : [5] : Next next