| Wiab profiling. |
| |
| The basis of profiling code was taken from the Splash project (https://code.google.com/p/google-wave-splash/). |
| |
| Features appended to Splash profiling code: |
| 1. Current authentification session context. |
| 2. Cross-thread profiling (one request is executed in several threads simultaneously). |
| 3. Client-side profiling. |
| 4. GWT profiling. |
| 5. Loading of scope through static object (instead of custom Guice scope). |
| 6. Profiling popup dialog. |
| |
| Server code changes: |
| 1. Used only own-designed RequestScopeExecutor and ScheduledRequestScopeExecutor, transferring profiling context to the executed task. |
| 2. Profiling context is set in following places: |
| - RequestScopeFilter - for Servlet requests |
| - WebSocketChannel - for WebSocket requests |
| |
| Client code changes: |
| 1. Added GWT profiling: |
| - Added handling of event.__gwtStatsEvent |
| - Added own listener, as defined in https://code.google.com/p/gwt-debug-panel/wiki/GettingStarted. |
| 2. Used only own-designed custom executor BrowserBackedScheduler, transferring profiling context to the executed task. |
| 3. Profiling context is set in following places: |
| - Keyboard events - FocusManager.dispatch |
| - Mouse events - EventDispatcherPanel.ChangeHandlers.dispatch |
| - Client RPC requests - RemoteWaveViewService |
| |
| Statistics recorded on the server: |
| 1. Accumulated statistics for task calls for current session and whole program: |
| - Methods of objects, created by Guice Inject, and annotated as @Timed. |
| - Code from Timing.start() or Timing.startRequest() to Timer.stop(). |
| 2. Statistics for last 100 requests with execution tree for current session and whole program: |
| - Code from Timing.startRequest() to Timer.stop(). |
| 3. Statistics for static fields, annotated as @Stat. |
| |
| Statistics recorded on the client: |
| 1. Accumulated statistics for task calls: |
| - Code from Timing.start() or Timing.startRequest() to Timer.stop(). |
| 2. Statistics for last 100 requests with execution tree: |
| - Code from Timing.startRequest() to Timer.stop(). |
| |
| How to display statistics: |
| 1. In order to show profiling dialog in the client, press and release one-by-one Ctrl, Alt and Ctrl keys. |
| 2. To show only server statistics go to URL <wave_server_url>/speedz. |