For Developers‎ > ‎

Sync diagnostics

http://go/aboutsync

Overview

  • Located in about:sync (or chrome://sync-internals)
  • Inspired by chrome://net-internals
  • Tabs:
    • About tab: "Classic" about:sync page, concise status overview
    • Data tab: dump debugging data to text for copy & paste
    • Notifications tab: Keeps track of incoming sync notifications
    • Events tab: logs for sync-related events
    • Sync Node Browser tab: browse all synced data

About tab

  • "Classic" about:sync page
  • Updates on the fly
    • Try moving a bookmark, or stopping and starting sync
  • Some stuff will eventually be moved out, but page is still useful as an overview

Data tab

  • Dump to text button
    • Dumps all info from about, notifications, and events tab
    • Once M11 goes stable, can tell users to:
      • Open about:sync
      • Repro the problem if possible
      • Wait a while (15-30 seconds)
      • Go to data tab
      • Dump info, paste into bug (or email privately if there's sensitive info)
    • Event log will probably be most useful part
  • Room for improvement
    • Redact sensitive info
    • Automatically highlight dumped text, add "Copy to clipboard" button
    • Button to add to an existing bug, or create a new one

Notifications tab

  • If a notification is received when the page (not just the tab) is open, a counter will increment (one for each data type)
    • Try moving a bookmark, setting a preference, or stopping and starting sync
    • Takes ~5-10 seconds for a notification to bounce back
    • Counters reset if you reload
  • Room for improvement
    • More detailed connection stats
      • How long has connection been up?  Which XMPP server/port?  How long ago was the last message sent/received?

Events tab

  • Shows all sync events (i.e., functions in SyncManager::Observer and incoming notifications) that happen as long as the page is open
    • Try moving a bookmark, or starting sync (dumps lots of data!)
    • Doesn't quite log everything yet
    • Only logs events after backend is initialized
    • Resets if you reload
  • Room for improvement
    • Store last N events (C++ side) so you can open it right when you hit a problem and still get some useful info
    • Also log requests/responses to HTTP server
    • Perhaps more logging for sync setup events
    • Better display (82866)
    • Start logging even before backend is initialized (tricky)

Sync node browser tab

  • Shows sync nodes
    • One at a time if M11, tree view if canary/ToT
  • M11 version
    • Sync nodes are structured in a tree.
    • Each data type has a top-level node which is a child of the root node
      • Bookmark top-level node is named "Google Chrome" for historical reasons
    • Only bookmarks sub-tree has true tree structure
    • Everything else is just a list under the top-level node
    • Use links to navigate tree: parent, first child, predecessor, successor
    • Ignore specifics information for folder
  • Tree view version
    • Tree visualized on the left, details of selected node on the right
  • Does not auto-update; you need to refresh
    • Be careful, you may lose logged events; you can always open a new about:sync tab instead
  • Room for improvement
    • CSS/JS tweaks to make tree view nicer
      • Overflow behavior, scrolling behavior
    • Implement auto-updating (hard)
    • Add a refresh button (easier)
    • Search (id/client tag/full-text)
    • Cut down on the large number of displayed empty fields (empty strings, etc.) (see autofill nodes)

Network-level debugging

  • Sync talks to the sync server via POSTing to clients4.google.com.
  • Sync talks to the notification servers via XMPP (talk.google.com).
  • Both sockets should show up in chrome://net-internals (after 82365 is fixed).

Room for improvement

  • Data type-specific tabs
    • Model associators / change processors have access to the ProfileSyncService, so shouldn't be too hard to emit events or reply to calls
    • Probably easier for things that live on the UI thread
  • Some way to capture VLOG() events
  • Should be obvious when sync isn't working
  • Use HTML notifications for events
  • Front-end for memory usage info (Lingesh is working on backend)
Comments