1 Star 0 Fork 102

piggyguy_jdx / graphic_surface

forked from OpenHarmony / graphic_surface 
Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Surface

Introduction

A surface is used to manage and transfer the shared memory of graphics and media. Specific use cases include graphics display and composition, and media playback and recording.

A surface transfers data across processes through control structures such as Inter-Process Communication (IPC) handles (with copies), and transfers graphics and media data (zero-copy) through shared memory. The following figure shows the position where a surface works in the system architecture. The elements in green blocks are surface buffers.

Figure 1 Position of a surface in the system architecture

Directory Structure

/foundation/graphic/surface
├── frameworks       # Framework code
├── interfaces       # APIs
│   ├── innerkits    # APIs between modules
│   └── kits         # External APIs
└── test             # Test code
    ├── fuzztest     # Fuzzing
    └── unittest     # Unit testing

Compilation and Building

# Generate the libsurface.so file in the out directory of the product folder through GN compilation.
hb build lite_surface

Description

Process Description

Take the interaction between Window Manager Service (WMS) and UI as an example. UI works as a producer, and WMS works as a consumer.

The producer obtains a buffer from the free queue, draws the UI content into the buffer, and places the buffer in the dirty queue.

The consumer obtains the buffer from the dirty queue, synthesizes graphics data, and places the buffer in the free queue again.

Figure 2 Surface rotation process

NOTICE:

  1. A shared memory is used for data transfer, and the task of managing the shared memory runs in the process of creating a surface for the first time. If the process is abnormal and is not recycled, severe memory leakage occurs. Therefore, pay special attention to the process.
  2. Surfaces are generally used for cross-process transfers of large memory blocks (such as display data) in graphics or media. Especially, when continuous physical memory is used, the transfer rate can be greatly improved. It is not recommended that surfaces be used in small-memory transfer scenarios. Otherwise, memory fragmentation may occur, which affects the performance in typical scenarios.

Usage

For details, see WMS.

Repositories Involved

Graphic subsystem

graphic_wms

graphic_surface

graphic_ui

graphic_utils

About

Graphic shared memory | 图形共享内存 expand collapse
C++
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
C++
1
https://git.oschina.net/piggyguy/graphic_surface.git
git@git.oschina.net:piggyguy/graphic_surface.git
piggyguy
graphic_surface
graphic_surface
master

Search

182229 41614e54 1850385 182230 7885ed45 1850385