Chromium Code Reviews| Index: chrome/test/functional/tracing/timeline_model_decorator.js |
| diff --git a/chrome/test/functional/tracing/timeline_model_decorator.js b/chrome/test/functional/tracing/timeline_model_decorator.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cc6b9043273aff89dcb479ccead007152c1f1c5b |
| --- /dev/null |
| +++ b/chrome/test/functional/tracing/timeline_model_decorator.js |
| @@ -0,0 +1,66 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +function TimelineModelDecorator() { |
| + tracing.TimelineModel.apply(this, arguments); |
| +} |
| + |
|
nduca
2012/07/20 07:13:13
I'm struggling with naming here. Decorator is not
|
| +TimelineModelDecorator.prototype = { |
| + __proto__: tracing.TimelineModel.prototype, |
| + |
| + invokeOnTimelineModel: function(methodName, args) { |
|
nduca
2012/07/20 07:13:13
since you've made this a subclass of TimelineModel
|
| + var sendToPython = function(obj) { |
| + // We use sendJSON here because domAutomationController's send() chokes on |
| + // large amounts of data. Inside of send() it converts the arg to JSON and |
| + // invokes sendJSON. The JSON conversion is what fails. This way works |
| + // around the bad code, but note that the recieving python converts from |
| + // JSON before passing it back to the pyauto test. |
| + window.domAutomationController.sendJSON( |
| + JSON.stringify(obj) |
| + ); |
| + }; |
| + var result; |
| + try { |
| + result = this[methodName].apply(this, JSON.parse(args)); |
| + } catch( e ) { |
| + var ret = { |
| + success: false, |
| + message: 'Unspecified error', |
| + }; |
| + // We'll try sending the entire exception. If that doesn't work, it's ok. |
| + try { |
| + ret.exception = JSON.stringify(e); |
| + } catch(e2) {} |
| + if( typeof(e) == 'string' || e instanceof String ) { |
| + ret.message = e; |
| + } else { |
| + if( e.stack != undefined ) ret.stack = e.stack; |
| + if( e.message != undefined ) ret.message = e.message; |
| + } |
| + sendToPython(ret); |
| + throw e; |
| + } |
| + sendToPython({ |
| + success: true, |
| + data: result |
| + }); |
| + } |
| +}, |
| + |
| +TimelineModelDecorator.recordTrace = function(callback) { |
| + var handler = function() { |
| + tracingController.removeEventListener('traceEnded', handler); |
| + var model = new TimelineModelDecorator( |
| + Array.prototype.slice.call(arguments, 1) |
| + ); |
| + var events = [tracingController.traceEvents_]; |
| + if (tracingController.supportsSystemTracing) |
| + events.push(tracingController.systemTraceEvents_); |
| + model.importTraces(events); |
| + callback(model); |
| + }; |
| + tracingController.addEventListener('traceEnded', handler); |
| +} |
| + |
| +window.domAutomationController.send(''); |
|
nduca
2012/07/20 07:13:13
Put a comment about what this does? It doesn't mak
|