Cobalt 27 RC3 (Release Candidate 3)

The Cobalt team has published Cobalt 27 RC3 (Release Candidate 3) including Starboard API version 18 to the 27.lts branch with tag 27.lts.3 (27.lts.3.1040907).

Corresponding Evergreen binaries are available on GitHub at the 27.lts.3 Release tag

Cobalt Core can be updated via the Evergreen static channel (27lts3).

Please migrate and rebase your RC1/RC2 integrations to RC3 to get the latest fixes and improvements below.

The Cobalt team strongly encourages external contribution to fix issues and improvements.

Available Reference Ports:

  • Desktop Linux
  • RDK (starboard/contrib/rdk)
  • Android (AOSP) (starboard/aosp)
    • [Docs] cobalt/site/docs/development/setup-aosp.md
    • NOTE: This is still work-in-progress. Basic functionality is working though there may still be general issues. Please report any issues that surface on your platform.

Migration guide from Cobalt 25 to Cobalt 27 is available here:

  • For the latest changes, the code at tip in the 27.lts branch is always available, but is under development and may be unstable.

Cobalt Changes

See comprehensive list of changes in cobalt/CHANGELOG.md and baseline release notes for Cobalt 27 RC on developers.google.com/youtube/cobalt.

Memory Reductions & Performance Improvements

  • Evergreen Memory Mapping Documentation: Added guidance to configure memory map to trade storage space for lower memory usage using CobaltExtensionMemoryMappedFileApi and the --loader_use_mmap_file launch flag. (#12245)
  • V8 Heap & HTTP Cache Tuning: Reduced default initial V8 old space from 64MB to 16MB (--v8-initial-old-space-size=16) saving startup heap, and added CLI and Android switches to configure V8 heap limits and HTTP cache size/type. (#11670, #11669, #11695, #11683, #11688)
  • Default V8 Code Cache Scaling: Increased default V8 code cache size from 3MB to 5MB to accelerate application startup latency. (#11950)
  • Background GPU Memory Release: Releases all GPU channels, EGL contexts, and surfaces on background suspend to minimize background memory consumption. (#11796)
  • Live Memory Diagnostics: Added real-time Cobalt memory breakdown metrics to Chrome DevTools Protocol (Performance.getMetrics) for interactive profiling and diagnostics. (#11676, #11679)
  • Media Buffering & Binary Size Reductions: Enabled dynamic video memory budgeting based on display resolution, stripped unused Chromium components (media muxers, fenced frames, IP protection) to reduce binary size, and added options to force dual audio/video decoder threads. (#11704, #11596, #11352, #11509, #11507, #11696)
  • Performance Memory APIs: Added measureSystemMemoryInfo, measureUsedGpuMemory, and MeasureApplicationUsageMemory web performance APIs to allow web applications to monitor system, GPU, and app memory usage accurately. (#12310, #12066, #11838, #12130)
  • Rendering Performance & JIT Tuning: Implemented zero-copy in-process direct raster for faster graphics throughput, enabled Peak RSS tracking, and added an Android switch to disable the Sparkplug compiler to save memory on constrained devices. (#12134, #12138, #12307, #11867, #12153)

Critical Bug Fixes

  • Graphics Context Stability: Resolved EGL/GL context initialization crashes on GLES 3+, increased max texture units limit to 96, and fixed compositor callback leaks. (#10934)
  • Renderer & Player Teardown Stability: Resolved teardown crashes and use-after-free errors in the renderer and media player, canceled pending sample jobs during player destruction, and fixed on-screen keyboard disconnect handling. (#11597, #11681, #11656)
  • Background Freeze Compliance: Reverted the delay following visibilityChange events to restore immediate background freeze behavior. (#11675)
  • Media Pipeline Cleanup: Downgraded noisy false-positive media log warnings (including unknown EOTF warnings), simplified player initialization, and removed dead frame-tracking code. (#11709, #11678, #11710, #11583, #11599)
  • Process Lifecycle & HangWatcher Stability: Prevented exit segmentation faults in ElfLoader, resolved shutdown aborts and startup DCHECK crashes in HangWatcher, and fixed race conditions during stream flushing. (#12386, #12303, #12164, #12255, #12050)
  • Sync Starboard Window Resizing: Fixed window size desynchronization between Starboard and Chromium, enabling dynamic compositor swapchain updates and proper surface resizing on window resize events. (#12032)

Android

  • Native NDK Audio: Introduced native NDK audio track support (AAudio, OpenSL ES, native AudioTrack) to reduce JNI bridging overhead and lower audio latency. (#11022)
  • Direct Window Rendering: Added support for direct rendering to the activity window surface via the DirectWindowRendering switch, handled asynchronous native startup, and cleaned up legacy window size APIs. (#11538, #11691, #11652, #11634)
  • Font Handling & Platform Services: Added AOSP font directory path support in SbSystemGetPath, stabilized font resolution fallback, and improved error propagation from Java to JavaScript in PlatformService. (#11582, #11714, #11336, #11355)
  • Android Build & Test Infrastructure: Resolved android-arm_debug compilation, streamlined test harness activity lifecycle, and managed the ExoPlayer SbPlayer evaluation cycle. (#11653, #11572, #11577, #11723, #5899, #11690)
  • Video Playback & AOSP Windowing: Prevented false-positive post-seek frame drop counts in media playback, added native window creation and input handling for AOSP targets, and modernized JNI bindings. (#11377, #11813, #12354)
  • GPU Suspend/Resume Stability: Resolved crashes and driver segfaults during EGL context teardown and restore on Android suspend/resume. (#12453)

RDK

  • Crashpad, Certification & Test Filters: Fixed binary path resolution for Crashpad crash reporting, enabled kSbSystemPropertyCertificationScope reading from /etc/device.properties, and updated NPLB test filters for passing graphics, media, and video tests. (#11661, #11407, #11490)

Testing & Verification

  • Native Stability Diagnostics: Added web interface support (getPendingReports()) bridging renderer services with the Starboard NativeStability extension for platform crash and hang diagnostics. (#11561)

Updates and Enhancements

  • Networking, Splash Screen & CLI Features: Added support for --proxy-server CLI flag, migrated splash screen configuration from legacy switches to Chromium base::Feature flags with early startup checks, and modernized CommandLinePreprocessor. (#11747, #11595, #11639, #11409)

Starboard Changes

See comprehensive list of changes in starboard/CHANGELOG.md and baseline release notes for Cobalt 27 RC on developers.google.com/youtube/cobalt.

  • Player Settings & Experimental Features: Consolidated player settings extensions into a unified dev.cobalt.extension.PlayerSettings extension, added default fallbacks to ExperimentalFeatureKey, and introduced Media.ForceDualThreads to enable dual decoder threads on multi-core platforms. (#11748, #11763, #11696)
  • Alignment & Event Architecture: Standardized memory alignment across media decoders and audio sinks, and modularized SbEventHandle into a dedicated library target. (#11635, #11593)
  • Modernized the SbDrmSystemPrivate interface and strengthened thread safety during subsystem initialization. (#12106, #12235, #12304, #12404)

New & Updated Starboard Extensions

Contact Points

Please contact our support channels if you have any problems, questions, or feedback.