Gecko overview
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

Gecko Overview PowerPoint PPT Presentation


  • 70 Views
  • Uploaded on
  • Presentation posted in: General

Gecko Overview. Chris Waterson <[email protected]> June 10, 2002. Overview. Basic data flow Key data structures Detailed walk-through Incrementalism Future tech-talks Wrap-up, Q&A. Basic Data Flow. Source document arrives via network APIs

Download Presentation

Gecko Overview

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Gecko overview

Gecko Overview

Chris Waterson

<[email protected]>

June 10, 2002


Overview

Overview

  • Basic data flow

  • Key data structures

  • Detailed walk-through

  • Incrementalism

  • Future tech-talks

  • Wrap-up, Q&A


Basic data flow

Basic Data Flow

  • Source document arrives via network APIs

  • Incrementally “pumped” through the single-threaded layout engine

    • Parse, compute style, render; repeat

    • CSS used for rendering all content

  • Content theoretically separate from “presentation”


Basic data flow1

Basic Data Flow

HTML


Basic data flow2

Basic Data Flow

DOM

HTML

Parser

Content Sink

Content Model


Basic data flow3

Basic Data Flow

DOM

HTML

Parser

Content Sink

Content Model

Style Sheets

CSS Parser

Style Rules


Basic data flow4

Basic Data Flow

DOM

HTML

Parser

Content Sink

Content Model

Frame Constructor

Frame Tree

Style Sheets

CSS Parser

Style Rules


Basic data flow5

Basic Data Flow

DOM

HTML

Parser

Content Sink

Content Model

Reflow

Frame Constructor

Frame Tree

Style Sheets

CSS Parser

Style Rules


Basic data flow6

Basic Data Flow

DOM

HTML

Parser

Content Sink

Content Model

Reflow

Frame Constructor

Frame Tree

Painting

Display

Style Sheets

CSS Parser

Style Rules


Key data structures

Content node

Elements, attributes, leaves

DOM

Frame

Rectangular formatting primitive

Geometric information

[0..n] per content node

2nd thru nth are “continuations”

Style context

Non-geometric information

May be shared by adjacent frames

Reference counted, owned by frame

View

Clipping, z-order, transparency

[0..1] per frame, owned by frame

Widget

Native window

[0..1] per view, owned by view

Key Data Structures

Content Node

1

0..n

Frame

1

0..1

View

1

0..1

Widget

1..n

1

Style Context


Key data structures1

Key Data Structures

Content


Key data structures2

Key Data Structures

Content

Frames


Key data structures3

Key Data Structures

Content

Frames

Style Contexts


Key data structures4

Key Data Structures

Content

Frames

Views

Style Contexts


Key data structures5

Key Data Structures

Content

Frames

Views

Widgets

Style Contexts


Key data structures6

Key Data Structures

  • The document owns the content model, and one or more presentations

    • Exposed programmatically via DOM APIs

  • The presentation owns the frame hierarchy

    • Frames own the style contexts, views, widgets

    • Presentation has media type, dimensions, etc.

    • May not be directly manipulated


Detailed walk through

Detailed Walk-Through

  • Setting up

  • Content model construction

  • Frame construction

  • Style resolution

  • Reflow

  • Painting


Setting up

Setting Up

  • Assume basic knowledge of embedding and network APIs (doc shell, streams)

  • Content DLL auto-registers a Document Loader Factory

    • @mozilla.org/content-viewer-factory/view;1?type=text/html

    • All MIME types mapped to the same class, nsContentDLF

  • nsDocShell

    • Receives inbound content via nsDSURIContentListener

    • Invokes nsIDLF::CreateInstance, passes MIME type to DLF

  • nsContentDLF

    • Creates a nsHTMLDocument object, invokes StartDocumentLoad.

      • Creates a parser, returned as nsIStreamListener back to the docshell

      • Creates a content sink, which is linked to the parser and the document

    • Creates a DocumentViewerImpl object, which is returned as nsIContentViewer back to the docshell

  • DocumentViewerImpl creates pres context and pres shell


Setting up1

Setting Up

nsIStreamListener

nsParser

nsIContentSink

HTMLContentSink

nsIParser

mDocument

nsDocShell

nsIDocument

mContentViewer

nsHTMLDocument

mParser

DocumentViewerImpl

mDocument

nsIContentViewer

PresContext

PresShell


Content model construction

Content Model Construction

  • Content arrives from network via nsIStreamListener::OnDataAvailable

  • Parser tokenizes & processes content; invokes methods on nsIContentSink with parser node objects

    • Some buffering and fixup occurs here

    • OpenContainer, CloseContainer, AddLeaf

  • Content sink creates and attaches content nodes using nsIContent interface

    • Content sink maintains stack of “live” elements

    • More buffering and fixup occurs here

    • InsertChildAt, AppendChildTo, RemoveChildAt


Content model construction1

Content Model Construction

nsHTMLDocument

mRootContent

HTMLContentSink

nsGenericHTMLElement

mContextStack

nsIContent

mChildren


Frame construction

Frame Construction

  • Content sink uses nsIDocument interface to notify of s in content model

    • ContentAppended, ContentInserted, ContentRemoved

  • PresShell is registered as document observer

    • Receives ContentAppended, etc. notifications

    • Passes these to the style set object, who in turn passes to the frame constructor

  • Frame constructor creates frames

    • ConstructFrameInternal recursively walks content tree, resolves style and creates frames

    • Either created by tag (<select>) or by display type (<p>)

  • Frame manager maintains mapping from content to frame


Frame construction1

Frame Construction

PresContext

nsIDocumentObserver

PresShell

StyleSetImpl

nsIStyleSet

mRootFrame

nsIStyleFrameConstruction

FrameManager

nsCSSFrameConstructor

Via nsFrameConstructorState

nsFrame

nsIFrame

mFirstChild, mNextSibling


Style resolution

Style Resolution

  • Compute stylistic information based on the style rules that apply for the frame’s content node

  • Style data broken into different structures

    • Display, visibility, font, color, background, …

    • Inherit vs. reset

  • Style context object is a placeholder for partially computed stylistic data

    • Style data is computed lazily, as it is asked for


Reflow

Reflow

  • Recursively compute geometry (x, y, w, h) for frames, views, and widgets

    • Given w & h constraints of “root frame” compute (x, y, w, h) for all children

    • Constraints propagated “down” via nsHTMLReflowState

    • Desired size returned “up” via nsHTMLReflowMetrics

  • Basic pattern

    • Parent frame initializes child reflow state (available w, h); places child frame (x, y); invokes child’s Reflow method

    • Child frame computes desired (w, h), returns via reflow metrics

    • Parent frame sizes child frame and view based on child’s metrics

  • N.B. many don’t work like this! (Tables, blocks, XUL boxes)


Reflow1

Reflow

  • “Global” reflows

    • Initial, resize, style-change

    • Processed immediately via PresShell method

  • Incremental reflows

    • Targeted at a specific frame

    • Dirty, content-changed, style-changed, user-defined

    • nsHTMLReflowCommand object encapsulates info

    • Queued and processed asynchronously, nsIPressShell::AppendReflowCommand, ProcessReflowCommands


Incremental reflow

Recursively descend to target recovering reflow state

Child rs.reason set to incremtenal

Incremental Reflow


Incremental reflow1

Recursively descend to target recovering reflow state

Child rs.reason set to incremental

Incremental Reflow


Incremental reflow2

Recursively descend to target recovering reflow state

Child rs.reason set to incremental

Process reflow “normally” at target frame

Child rs.reason set based on rc’s type

Incremental Reflow


Incremental reflow3

Recursively descend to target recovering reflow state

Child rs.reason set to incremental

Process reflow “normally” at target frame

Child rs.reason set based on rc’s type

Propagate damage to frames later “in the flow”

Incremental Reflow


Incremental reflow4

Multiple reflow commands are batched

nsReflowPath maintains a tree of target frames

Amortize state recovery and damage propagation cost

Incremental Reflow


Painting

Painting

  • As reflow proceeds through the frame hierarchy, areas are invalidated via nsIViewManager::UpdateView

  • Unless immediate, invalid areas are coalesced and processed asynchronously via OS expose event

  • Native expose event dispatched to widget; widget delegates to the view manager

  • View manager paints views back-to-front, invoking PresShell’s Paint method

  • PresShell::Paint walks from the view to the frame; invokes nsIFrame::Paint for each layer


Incrementalism

Incrementalism

  • Single-threaded

    • Simple (no locking)

    • Can’t leave event queue unattended

  • Content construction unwinds “at will”

    • Parser and content sink do some buffering

    • Content sink has “notification limits”

    • Efficiency vs. responsiveness trade-off

  • Frame construction runs to completion

  • CSS parsing runs to completion

  • Reflow runs to completion (mostly)

  • Painting runs to completion


Incrementalism1

Incrementalism

HTML

Parser

Content Sink

Content Model

Frame Construction

Frame Tree

Style Sheet

CSS Parser

Style Rules

Main Event Loop

Reflow

Painting

Display


Future tech talks

Future (?) Tech Talks

  • Content model and DOM - jst, jkeiser

  • Parser and content sink (esp. invalid content) - harishd

  • Events - saari, joki

  • Block-and-line reflow - waterson, dbaron

  • Table reflow - karnaze

  • Form controls - rods, bryner

  • Style resolution and rule tree - dbaron

  • Views, widgets, and painting - roc, kmcclusk

  • Editor - kin, jfrancis

  • XUL and box layout - hewitt, ben

  • XBL - hewitt, ben


Conclusion

Conclusion

  • Data flow

  • Key data structures

  • Detailed walk-through

  • Incrementalism

  • Q & A?


  • Login