Mobile Development 11 min read

Baidu Maps’ Mobile Rendering Engine: Upgrading to Metal for 40% CPU Gains

This article traces the evolution of Baidu Maps' mobile rendering engine, explains why Metal outperforms OpenGL, outlines a cross‑platform engine redesign, and quantifies the CPU, GPU, and memory improvements achieved after the Metal upgrade.

Baidu Maps Tech Team
Baidu Maps Tech Team
Baidu Maps Tech Team
Baidu Maps’ Mobile Rendering Engine: Upgrading to Metal for 40% CPU Gains

Evolution of Baidu Maps Mobile Rendering Technology

Baidu Maps' rendering engine has continuously upgraded as map services grew, moving from raster to vector and high‑definition data, which increased the demand for real‑time graphics rendering on mobile devices. The engine progressed from the fixed‑function OpenGL ES 1.x pipeline to the programmable OpenGL ES 2.0 pipeline, and most recently to the next‑generation graphics APIs Metal and Vulkan. This article focuses on the knowledge required to upgrade the engine to Metal.

Evolution roadmap of Baidu Maps mobile rendering technology
Evolution roadmap of Baidu Maps mobile rendering technology

Introduction to Metal

Metal (and Vulkan) are new‑generation low‑level graphics frameworks launched by Apple in 2014. Compared with OpenGL, they expose fewer driver‑level abstractions, handing resource management, state control, and pipeline assembly to developers, which can reduce CPU and memory usage. Metal’s main advantages over OpenGL include:

Support for multithreading

Reduced CPU load and more efficient CPU‑GPU interaction

Lightweight API that abstracts the GPU minimally

Easier shader language development

Convenient integrated tooling

Metal vs. OpenGL Comparison

Lifecycle comparison between OpenGL and Metal
Lifecycle comparison between OpenGL and Metal

The key differences are summarized as follows:

Window system: Both iOS and OpenGL provide view/layer abstractions, but OpenGL requires an OpenGL Context, which can be error‑prone in multi‑window scenarios. Metal uses a Device object that directly represents the GPU, simplifying resource creation.

GPU interaction: OpenGL is an implicit API driven by the context, whereas Metal is explicit; developers submit commands via CommandQueue, CommandBuffer, and CommandEncoder, giving precise control over execution timing.

Resource management: OpenGL creates opaque handles without exposing storage modes. Metal lets developers create buffers, textures, and samplers with explicit storage modes (private or shared), optimizing for different usage patterns.

Shader language: OpenGL uses GLSL (C‑based) compiled at runtime. Metal’s MSL is C++‑based, supporting classes, templates, structs, enums, namespaces, and offers many built‑in functions; Xcode can pre‑compile shaders.

State management: OpenGL maintains a global state machine checked on each draw call. Metal encapsulates states in objects (e.g., depth‑stencil, blend) that are part of the pipeline state.

Resource updates: Metal can employ multi‑buffering (typically triple buffering) to avoid CPU stalls while the GPU reads data.

For a deeper dive, see Apple’s WWDC 2019 video “Bringing OpenGL Apps to Metal”.

How the Map Rendering Engine Upgrades to Metal

Because Metal only runs on iOS, a cross‑platform engine must support multiple graphics back‑ends (OpenGL ES, Metal, Vulkan) while minimizing business‑specific adaptation costs. The design principles are:

Support multiple graphics platforms (OpenGL ES, Metal, Vulkan, etc.)

Low integration cost and ease of use for business teams

Leverage each platform’s strengths, such as Metal’s multithreading capabilities

Layered architecture of Baidu Maps mobile rendering engine
Layered architecture of Baidu Maps mobile rendering engine

The most complex goal is to abstract and modularize the engine based on the characteristics of each rendering platform, covering state encapsulation, uniform updates, texture and buffer handling, etc.

Module diagram of Baidu Maps mobile rendering engine
Module diagram of Baidu Maps mobile rendering engine

Benefits of Upgrading to Metal

CPU optimization: rendering thread CPU usage reduced by ~40% during continuous map refreshes

GPU optimization: average draw‑call execution time decreased by ~24%

Memory optimization: overall average memory usage reduced by ~17%

Enhanced debugging: Xcode tools enable precise problem location and resource‑usage analysis

Performance gains after upgrading Baidu Maps to Metal
Performance gains after upgrading Baidu Maps to Metal

Final Tips for Upgrading to Metal

Assess whether the app has heavy graphics workloads and high CPU consumption before deciding to upgrade.

Encapsulate Metal behind an abstraction layer to retain cross‑platform compatibility; dynamically select the rendering API based on device and OS.

Exploit Metal’s storage modes, multi‑buffering, and multithreading to reduce memory copies and CPU stalls, especially for large‑scale tiled rendering.

Use Metal’s Xcode tooling (frame capture, memory analysis) for performance debugging.

Watch for API and enum changes across iOS versions to maintain compatibility.

Handle data‑format alignment (e.g., pack_float3 is 12‑byte aligned, float3 is 16‑byte aligned) and coordinate system differences (OpenGL origin at bottom‑left, Metal at top‑left); also adjust projection‑matrix Z ranges (OpenGL [-1,1] vs. Metal [0,1]).

In summary, Metal offers a more approachable and efficient path for developers new to graphics programming, while seasoned OpenGL developers need to adapt to new concepts. Overall complexity ranking: Metal < OpenGL ES < Vulkan.

Performance optimizationMetalBaidu Mapsmobile renderingGraphics API
Baidu Maps Tech Team
Written by

Baidu Maps Tech Team

Want to see the Baidu Maps team's technical insights, learn how top engineers tackle tough problems, or join the team? Follow the Baidu Maps Tech Team to get the answers you need.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.