Changes

Jump to: navigation, search

Platform/GFX/APZ

1,540 bytes added, 10:13, 22 October 2013
no edit summary
<sub>1. This module used to be called '''Async Pan/Zoom Controller (APZC)''', but this was changed to avoid confusion because there is a class called AsyncPanZoomController of which there are now multiple instances.</sub>
== Supported Platforms platforms ==
The APZ module is currently enabled on B2G and Metro. Fennec has a Java implementation of asynchronous panning and zooming, but the plan is to port Fennec to use the APZ module as well.
Inside the APZ module, every scrollable layer has an [https://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/AsyncPanZoomController.h AsyncPanZoomController] (APZC). Scrollable layers roughly correspond to the root document, documents in iframes, and overflow:scroll divs. See [[Platform/GFX/OffMainThreadCompositing|OMTC]] for more information about layers.
The APZCs are arranged in a tree whose structure reflects the structure of the layer tree containing the layers that they correspond to, except that the APZC tree only has nodes for scrollable layers, while the layer tree has nodes for all layers. The APZC tree is managed by a class called [https://mxr.mozilla.org/mozilla-central/source/gfx/layers/composite/APZCTreeManager.h APZCTreeManager]. The APZCTreeManager is the interface through which the outside world interacts with the APZ module - there is no access to the APZCs directly, but the APZCTreeManage provides methods that operate on a specific APZC in the tree== Interactions with other components == The APZ interacts with the following other platform components: === Widget code === The '''widget code''' is a platform-specific component of a browser implementation that interfaces with the native widget implementation. It corresponds roughly to the following pieces of code:* On B2G: [https://mxr.mozilla.org/mozilla-central/source/layout/ipc/RenderFrameParent.h RenderFrameParent]/[https://mxr.mozilla.org/mozilla-central/source/layout/ipc/RenderFrameChild.h RenderFrameChild] and [https://mxr.mozilla.org/mozilla-central/source/dom/ipc/TabParent.h TabParent]/[https://mxr.mozilla.org/mozilla-central/source/dom/ipc/TabChild.h TabChild]* On Metro: [https://mxr.mozilla.org/mozilla-central/source/widget/windows/winrt/MetroWidget.h MetroWidget] and [https://mxr.mozilla.org/mozilla-central/source/widget/windows/winrt/MetroInput.h MetroInput]* On Fennec (which doesn't use the APZ yet): [https://mxr.mozilla.org/mozilla-central/source/mobile/android/base/GeckoAppShell.java GeckoAppShell] and [https://mxr.mozilla.org/mozilla-central/source/mobile/android/base/gfx/GeckoLayerClient.java GeckoLayerClient], which communicate with native code via the [https://mxr.mozilla.org/mozilla-central/source/widget/android/nsIAndroidBridge.idl AndroidBridge].  === Compositor === === Gecko === '''[https://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/GeckoContentController.h GeckoContentController]'''
== Main APZ projects on the horizon ==
Confirm
85
edits

Navigation menu