1# Tool for visualizing window manager traces 2 3## Developing WinScope 4When the trace is enabled, Window Manager and Surface Flinger capture and 5save current state to a file at each point of interest. 6`frameworks/base/core/proto/android/server/windowmanagertrace.proto` 7and `frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto` 8contain the proto definitions for their internal states. 9 10### Checking out code and setting up environment 11* Install [Yarn](https://yarnpkg.com), a JS package manager 12* [Download Android source](https://source.android.com/setup/build/downloading) 13* Navigate to `development/tools/winscope` 14* Run `yarn install` 15 16### Building & testing changes 17* Navigate to `development/tools/winscope` 18* Run `yarn run dev` 19 20### Update IntDefMapping 21* Build `framework-minus-apex-intdefs` module and a preprocessor will 22generate the latest IntDefMapping. From the `ANDROID_ROOT` run: 23``` 24. build/envsetup.sh 25m framework-minus-apex-intdefs 26``` 27 28* Copy the generated `intDefMapping.json` files to the `prebuilts` repo. 29``` 30python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./prebuilts/misc/common/winscope/intDefMapping.json 31``` 32 33* Upload the changes. 34``` 35cd ./prebuilts/misc/common/winscope 36repo start intdef-update 37git commit -am "Update intdef mapping" "Test: N/A" 38repo upload --cbr . 39``` 40 41### Building with internal extensions 42Internal paths in vendor/ which are not available in AOSP must be replaced by 43stub files. See getWaylandSafePath for an example 44