Skip to content

Conversation

@melekr
Copy link
Collaborator

@melekr melekr commented Dec 13, 2025

Context

WebGL users can lose unsent Backtrace reports when:

  • BacktraceDatabase writes aren’t flushed from IDBFS to IndexedDB before tab close/background.

and/or

  • BacktraceDatabase is disabled/unavailable, causing network/server send failures to be dropped.

Solution

Persist offline reports reliably (IDBFS flush hooks + PlayerPrefs fallback queue)

This PR adds two WebGL-specific reliability layers consistent with existing Backtrace database settings:

  1. IDBFS flush support
  • Adds BacktraceSync.jslib exposing FS.syncfs
  • Adds BacktraceWebGLSync.cs wrapper
  • Installs page lifecycle hooks (pagehide, beforeunload, visibilitychange, freeze) and calls FS.syncfs at key SDK lifecycle points to reduce data loss.
  1. Fallback offline queue when BacktraceDatabase is unavailable:
  • Adds WebGLOfflineDatabase.cs PlayerPrefs queue.
  • Queue bounds derive from BacktraceConfiguration database settings (MaxRecordCount, MaxDatabaseSize, RetryLimit, RetryOrder, RetryInterval, AutoSendMode)
  • Enforces WebGL safe hard caps to avoid excessive PlayerPrefs/browser storage use
  • Replays queued reports on an interval when AutoSendMode is enabled.

Notes / Limitations

  • FS.syncfs is best-effort and async: abrupt tab termination can still lose data.
  • PlayerPrefs queue is intentionally bounded: oversized reports are not persisted.

Sample Reports

ref: BT-6231

- Flush IDBFS to IndexedDB on browser lifecycle events.
- Add PlayerPrefs offline queue fallback when BacktraceDatabase is unavailable.
@melekr melekr requested a review from rick-bt December 13, 2025 00:09
@melekr melekr self-assigned this Dec 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants