The sync subfolders should have a hierarchy like this, where things depend on their line and below, and only foo depends on foo_impl:
driver(_impl?)
syncable*
api(_impl?), engine(_impl)*
base, protocol
* sessions should be merged into engine (engine/cycles?)
Updated hierarchy goals copied from a doc:
Each folder can depend on folders within or below its own tier. Additionally, any folder foo_impl/ can depend on anything that foo/ can (including foo/), but only be depended on by foo/.
Tier 1
base/ - Useful things with no other dependencies
protocol/ - Sync protocol files
Tier 1.5
android/ - Low-level Android support code
js/ - Javascript bindings for sync
Tier 2
engine/ - The sync engine (things that run on the sync thread)
api/ - The model type interface (things that live on the model thread)
syncable/ - Directory-specific engine code (things that could be removed if all types were USS)
Tier 3
driver/ - Managing the sync engine (things that live on the UI thread)
device_info/ - Implementation of the device info data type
Tier 3.5
test/ - Code that exists only for testing (fake server)
tools/ - Scripts etc. (Python server...)
Comment 1 by bugdroid1@chromium.org
, Aug 15 2016