-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/22776/
-----------------------------------------------------------

(Updated June 20, 2014, 5:32 p.m.)


Review request for wave and Yuri Zelikov.


Repository: wave


Description
-------

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.


Diffs
-----

  README.profiling PRE-CREATION 
  build.xml 83b2040 
  server-config.xml 4f1d94f 
  src/org/waveprotocol/box/server/CoreSettings.java 5b3fd0c 
  src/org/waveprotocol/box/server/ServerMain.java 31b6d8c 
  src/org/waveprotocol/box/server/ServerModule.java 029f40f 
  src/org/waveprotocol/box/server/StatModule.java PRE-CREATION 
  src/org/waveprotocol/box/server/authentication/SessionManager.java 097fd28 
  src/org/waveprotocol/box/server/executor/ExecutorAnnotations.java 
PRE-CREATION 
  src/org/waveprotocol/box/server/executor/ExecutorsModule.java PRE-CREATION 
  src/org/waveprotocol/box/server/executor/RequestScopeExecutor.java 
PRE-CREATION 
  src/org/waveprotocol/box/server/executor/ScheduledRequestScopeExecutor.java 
PRE-CREATION 
  src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp a27f35f 
  src/org/waveprotocol/box/server/persistence/file/FileDeltaStore.java 46b00bf 
  src/org/waveprotocol/box/server/rpc/SearchServlet.java 89c0f42 
  src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java 6332174 
  src/org/waveprotocol/box/server/rpc/WebSocketChannel.java a7d2579 
  src/org/waveprotocol/box/server/stat/MultiThreadedRequestScope.java 
PRE-CREATION 
  src/org/waveprotocol/box/server/stat/RequestScopeFilter.java PRE-CREATION 
  src/org/waveprotocol/box/server/stat/StatuszServlet.java PRE-CREATION 
  src/org/waveprotocol/box/server/stat/TimingFilter.java PRE-CREATION 
  src/org/waveprotocol/box/server/stat/TimingInterceptor.java PRE-CREATION 
  src/org/waveprotocol/box/server/waveserver/LookupExecutor.java 07479a5 
  
src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java
 effb5b5 
  src/org/waveprotocol/box/server/waveserver/WaveMap.java d9e01c6 
  src/org/waveprotocol/box/server/waveserver/WaveServerImpl.java ecfbbb3 
  src/org/waveprotocol/box/server/waveserver/WaveServerModule.java e26dcfc 
  src/org/waveprotocol/box/stat/AsyncCallContext.java PRE-CREATION 
  src/org/waveprotocol/box/stat/ExecutionNode.java PRE-CREATION 
  src/org/waveprotocol/box/stat/ExecutionTree.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Measurement.java PRE-CREATION 
  src/org/waveprotocol/box/stat/RequestScope.java PRE-CREATION 
  src/org/waveprotocol/box/stat/SessionContext.java PRE-CREATION 
  src/org/waveprotocol/box/stat/SingleThreadedRequestScope.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Stat.gwt.xml PRE-CREATION 
  src/org/waveprotocol/box/stat/Stat.java PRE-CREATION 
  src/org/waveprotocol/box/stat/StatRecorder.java PRE-CREATION 
  src/org/waveprotocol/box/stat/StatRenderer.java PRE-CREATION 
  src/org/waveprotocol/box/stat/StatService.java PRE-CREATION 
  src/org/waveprotocol/box/stat/StatStore.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Statistic.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Timed.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Timer.java PRE-CREATION 
  src/org/waveprotocol/box/stat/Timing.java PRE-CREATION 
  src/org/waveprotocol/box/stat/TimingReceiver.java PRE-CREATION 
  src/org/waveprotocol/box/webclient/WebClient.gwt.xml 63516ac 
  src/org/waveprotocol/box/webclient/WebClientProd.gwt.xml 6c6e8d5 
  src/org/waveprotocol/box/webclient/client/RemoteWaveViewService.java 923c481 
  src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java 92e3fd8 
  src/org/waveprotocol/box/webclient/client/WebClient.java c012ee6 
  src/org/waveprotocol/box/webclient/stat/Stat.gwt.xml PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/dialog/StatDialog.java PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/gwtevent/GwtStatisticsEvent.java 
PRE-CREATION 
  
src/org/waveprotocol/box/webclient/stat/gwtevent/GwtStatisticsEventDispatcher.java
 PRE-CREATION 
  
src/org/waveprotocol/box/webclient/stat/gwtevent/GwtStatisticsEventSystem.java 
PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/gwtevent/GwtStatisticsHandler.java 
PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/gwtevent/StatisticsEvent.java 
PRE-CREATION 
  
src/org/waveprotocol/box/webclient/stat/gwtevent/StatisticsEventDispatcher.java 
PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/gwtevent/StatisticsEventListener.java 
PRE-CREATION 
  src/org/waveprotocol/box/webclient/stat/gwtevent/StatisticsEventSystem.java 
PRE-CREATION 
  src/org/waveprotocol/wave/client/Stages.java 52ade26 
  src/org/waveprotocol/wave/client/scheduler/BrowserBackedScheduler.java 
6cc57e6 
  src/org/waveprotocol/wave/client/scheduler/TaskInfo.java 23c3f97 
  src/org/waveprotocol/wave/client/wavepanel/event/EventDispatcherPanel.java 
cb0822a 
  src/org/waveprotocol/wave/client/wavepanel/event/FocusManager.java 461a3ce 
  
src/org/waveprotocol/wave/client/wavepanel/view/dom/full/WavePanelResourceLoader.java
 2f16cb2 
  src/org/waveprotocol/wave/client/widget/dialog/Dialog.css PRE-CREATION 
  src/org/waveprotocol/wave/client/widget/dialog/Dialog.gwt.xml PRE-CREATION 
  src/org/waveprotocol/wave/client/widget/dialog/Dialog.java PRE-CREATION 
  src/org/waveprotocol/wave/client/widget/dialog/DialogBox.java PRE-CREATION 
  test/org/waveprotocol/box/server/rpc/RpcTest.java 689d5c6 
  
test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java
 b4d02e4 

Diff: https://reviews.apache.org/r/22776/diff/


Testing
-------


Thanks,

Andrew Kaplanov

Reply via email to