Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1041)

Unified Diff: chrome/common/extensions/docs/server2/app_engine_handler.py

Issue 108213010: Docserver: Add per-request profiling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add github crash thing Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/app_engine_handler.py
diff --git a/chrome/common/extensions/docs/server2/app_engine_handler.py b/chrome/common/extensions/docs/server2/app_engine_handler.py
index 993ad9d7f1cd6e0f95c4dab78aa6f10872540d39..7c45ac0e7a07d0e8b9e45040f9c93f3dfba199ce 100644
--- a/chrome/common/extensions/docs/server2/app_engine_handler.py
+++ b/chrome/common/extensions/docs/server2/app_engine_handler.py
@@ -10,11 +10,28 @@ class AppEngineHandler(webapp2.RequestHandler):
'''Top-level handler for AppEngine requests. Just converts them into our
internal Servlet architecture.
'''
+
def get(self):
- request = Request(self.request.path,
- self.request.url[:-len(self.request.path)],
- self.request.headers)
- response = Handler(request).Get()
- self.response.out.write(response.content.ToString())
- self.response.headers.update(response.headers)
- self.response.status = response.status
+ profile_mode = self.request.get('profile')
+ if profile_mode:
+ import cProfile, pstats, StringIO
+ pr = cProfile.Profile()
+ pr.enable()
+
+ try:
+ request = Request(self.request.path,
+ self.request.url[:-len(self.request.path)],
+ self.request.headers)
+ response = Handler(request).Get()
+ finally:
+ if profile_mode:
+ pr.disable()
+ s = StringIO.StringIO()
+ pstats.Stats(pr, stream=s).sort_stats(profile_mode).print_stats()
+ self.response.out.write(s.getvalue())
+ self.response.headers['Content-Type'] = 'text/plain'
+ self.response.status = 200
+ else:
+ self.response.out.write(response.content.ToString())
+ self.response.headers.update(response.headers)
+ self.response.status = response.status

Powered by Google App Engine
This is Rietveld 408576698