디지털 장인정신

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

Article Category

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

Recent Comment

Recent Trackback

Calendar

«   2018/04   »
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          

Archive

My Link

  • Total320,986
  • Today47
  • Yesterday64
  1. 2012.10.20
    WebKit Filters Animation Internal (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