| Index: lib/runtime/dart_sdk.js
|
| diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
|
| index ef5c8aed4fa232bfe28c579a26d6205b07cb706c..7e8c20fbc08cc46c4feb5b4ef5c21f13f903af33 100644
|
| --- a/lib/runtime/dart_sdk.js
|
| +++ b/lib/runtime/dart_sdk.js
|
| @@ -30,6 +30,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| const web_audio = Object.create(null);
|
| const web_gl = Object.create(null);
|
| const web_sql = Object.create(null);
|
| + let ListOfProfileEntry = () => (ListOfProfileEntry = dart.constFn(core.List$(dart.ProfileEntry)))();
|
| + let MapOfString$int = () => (MapOfString$int = dart.constFn(core.Map$(core.String, core.int)))();
|
| let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
|
| let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
|
| let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
|
| @@ -470,6 +472,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let ListOfTransform = () => (ListOfTransform = dart.constFn(core.List$(svg$.Transform)))();
|
| let CompleterOfAudioBuffer = () => (CompleterOfAudioBuffer = dart.constFn(async.Completer$(web_audio.AudioBuffer)))();
|
| let EventStreamProviderOfAudioProcessingEvent = () => (EventStreamProviderOfAudioProcessingEvent = dart.constFn(html$.EventStreamProvider$(web_audio.AudioProcessingEvent)))();
|
| + let StringAndStringToint = () => (StringAndStringToint = dart.constFn(dart.definiteFunctionType(core.int, [core.String, core.String])))();
|
| let dynamicToString = () => (dynamicToString = dart.constFn(dart.definiteFunctionType(core.String, [dart.dynamic])))();
|
| let dynamicToListOfString = () => (dynamicToListOfString = dart.constFn(dart.definiteFunctionType(ListOfString(), [dart.dynamic])))();
|
| let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
|
| @@ -975,6 +978,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| };
|
| dart.dload = function(obj, field) {
|
| field = dart._canonicalFieldName(obj, field, [], field);
|
| + dart._trackCall(obj, field);
|
| if (dart.hasMethod(obj, field)) {
|
| return dart.bind(obj, field);
|
| }
|
| @@ -983,6 +987,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| };
|
| dart.dput = function(obj, field, value) {
|
| field = dart._canonicalFieldName(obj, field, [value], field);
|
| + dart._trackCall(obj, field);
|
| obj[field] = value;
|
| return value;
|
| };
|
| @@ -1026,6 +1031,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| dart.throwNoSuchMethod(obj, name, pArgs);
|
| };
|
| dart._checkAndCall = function(f, ftype, obj, typeArgs, args, name) {
|
| + dart._trackCall(obj, name);
|
| let originalFunction = f;
|
| if (!(f instanceof Function)) {
|
| if (f != null) {
|
| @@ -1070,6 +1076,39 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| dart.dgcall = function(f, typeArgs, ...args) {
|
| return dart._checkAndCall(f, dart._getRuntimeType(f), void 0, typeArgs, args, 'call');
|
| };
|
| + dart.getDynamicStats = function() {
|
| + let ret = ListOfProfileEntry().new();
|
| + let keys = dart._callMethodStats[dartx.keys][dartx.toList]();
|
| + keys[dartx.sort](dart.fn((a, b) => dart._callMethodStats[dartx.get](b)[dartx.compareTo](dart._callMethodStats[dartx.get](a)), StringAndStringToint()));
|
| + for (let key of keys) {
|
| + let count = dart._callMethodStats[dartx.get](key);
|
| + ret[dartx.add](new dart.ProfileEntry(key, count));
|
| + }
|
| + return ret;
|
| + };
|
| + dart.clearDynamicStats = function() {
|
| + dart._callMethodStats[dartx.clear]();
|
| + };
|
| + dart._trackCall = function(obj, name) {
|
| + if (!window.trackDdcProfile) return;
|
| + let actual = dart.getReifiedType(obj);
|
| + let stackStr = new Error().stack;
|
| + let stack = stackStr[dartx.split]('\n at ');
|
| + let src = '';
|
| + for (let i = 2; i < dart.notNull(stack[dartx.length]); ++i) {
|
| + let frame = stack[dartx.get](i);
|
| + if (!dart.test(frame[dartx.contains]('dev_compiler/lib/runtime/dart_sdk.js'))) {
|
| + src = frame;
|
| + break;
|
| + }
|
| + }
|
| + name = dart.str`${dart.typeName(actual)}.${name} <${src}>`;
|
| + if (dart.test(dart._callMethodStats[dartx.containsKey](name))) {
|
| + dart._callMethodStats[dartx.set](dart.as(name, core.String), dart.notNull(dart._callMethodStats[dartx.get](name)) + 1);
|
| + } else {
|
| + dart._callMethodStats[dartx.set](dart.as(name, core.String), 1);
|
| + }
|
| + };
|
| dart._callMethod = function(obj, name, typeArgs, args, displayName) {
|
| let symbol = dart._canonicalFieldName(obj, name, args, displayName);
|
| let f = obj != null ? obj[symbol] : null;
|
| @@ -1819,32 +1858,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this.controller.addError(error, stackTrace);
|
| }
|
| };
|
| - dart._ignoreTypeFailure = (() => {
|
| - return dart._ignoreMemo((actual, type) => {
|
| - if (!!dart.isSubtype(type, core.Iterable) && !!dart.isSubtype(actual, core.Iterable) || !!dart.isSubtype(type, async.Future) && !!dart.isSubtype(actual, async.Future) || !!dart.isSubtype(type, core.Map) && !!dart.isSubtype(actual, core.Map) || dart.isFunctionType(type) && dart.isFunctionType(actual) || !!dart.isSubtype(type, async.Stream) && !!dart.isSubtype(actual, async.Stream) || !!dart.isSubtype(type, async.StreamSubscription) && !!dart.isSubtype(actual, async.StreamSubscription)) {
|
| - console.warn('Ignoring cast fail from ' + dart.typeName(actual) + ' to ' + dart.typeName(type));
|
| - return true;
|
| - }
|
| - return false;
|
| - });
|
| - })();
|
| - dart._stack = new WeakMap();
|
| - dart._value = Symbol("_value");
|
| - dart.constants = new Map();
|
| - dart.constantLists = new Map();
|
| - dart.JsIterator = class JsIterator {
|
| - constructor(dartIterator) {
|
| - this.dartIterator = dartIterator;
|
| - }
|
| - next() {
|
| - let i = this.dartIterator;
|
| - let done = !i.moveNext();
|
| - return {done: done, value: done ? void 0 : i.current};
|
| - }
|
| - };
|
| - dart._runtimeType = Symbol("_runtimeType");
|
| - dart.metadata = Symbol("metadata");
|
| - dart._typeObject = Symbol("typeObject");
|
| + dart.defineLazy(dart, {
|
| + get _callMethodStats() {
|
| + return MapOfString$int().new();
|
| + },
|
| + set _callMethodStats(_) {}
|
| + });
|
| core.Object = class Object {
|
| constructor(...args) {
|
| return this.new.apply(this, args);
|
| @@ -1875,6 +1894,41 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| noSuchMethod: dart.definiteFunctionType(dart.dynamic, [core.Invocation])
|
| })
|
| });
|
| + dart.ProfileEntry = class ProfileEntry extends core.Object {
|
| + new(key, count) {
|
| + this.key = key;
|
| + this.count = count;
|
| + }
|
| + };
|
| + dart.setSignature(dart.ProfileEntry, {
|
| + constructors: () => ({new: dart.definiteFunctionType(dart.ProfileEntry, [core.String, core.num])})
|
| + });
|
| + dart._ignoreTypeFailure = (() => {
|
| + return dart._ignoreMemo((actual, type) => {
|
| + if (!!dart.isSubtype(type, core.Iterable) && !!dart.isSubtype(actual, core.Iterable) || !!dart.isSubtype(type, async.Future) && !!dart.isSubtype(actual, async.Future) || !!dart.isSubtype(type, core.Map) && !!dart.isSubtype(actual, core.Map) || dart.isFunctionType(type) && dart.isFunctionType(actual) || !!dart.isSubtype(type, async.Stream) && !!dart.isSubtype(actual, async.Stream) || !!dart.isSubtype(type, async.StreamSubscription) && !!dart.isSubtype(actual, async.StreamSubscription)) {
|
| + console.warn('Ignoring cast fail from ' + dart.typeName(actual) + ' to ' + dart.typeName(type));
|
| + return true;
|
| + }
|
| + return false;
|
| + });
|
| + })();
|
| + dart._stack = new WeakMap();
|
| + dart._value = Symbol("_value");
|
| + dart.constants = new Map();
|
| + dart.constantLists = new Map();
|
| + dart.JsIterator = class JsIterator {
|
| + constructor(dartIterator) {
|
| + this.dartIterator = dartIterator;
|
| + }
|
| + next() {
|
| + let i = this.dartIterator;
|
| + let done = !i.moveNext();
|
| + return {done: done, value: done ? void 0 : i.current};
|
| + }
|
| + };
|
| + dart._runtimeType = Symbol("_runtimeType");
|
| + dart.metadata = Symbol("metadata");
|
| + dart._typeObject = Symbol("typeObject");
|
| dart.TypeRep = class TypeRep extends core.Object {
|
| get name() {
|
| return this.toString();
|
| @@ -2111,7 +2165,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| Object.setPrototypeOf(StrongModeError.prototype, Error.prototype);
|
| return StrongModeError;
|
| })();
|
| - _debugger.skipDartConfig = dart.const(new core.Object());
|
| + _debugger.skipDartConfig = "skipDartConfig";
|
| + _debugger.keyToStringConfig = "keyToStringConfig";
|
| _debugger.maxIterableChildrenToDisplay = 50;
|
| dart.defineLazy(_debugger, {
|
| get _devtoolsFormatter() {
|
| @@ -2195,9 +2250,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let name = opts && 'name' in opts ? opts.name : null;
|
| let value = opts && 'value' in opts ? opts.value : null;
|
| let skipDart = opts && 'skipDart' in opts ? opts.skipDart : null;
|
| + let keyToString = opts && 'keyToString' in opts ? opts.keyToString : null;
|
| this.name = name;
|
| this.value = value;
|
| this.skipDart = skipDart == true;
|
| + this.keyToString = keyToString == true;
|
| }
|
| ['=='](other) {
|
| return dart.is(other, _debugger.NameValuePair) && other.name == this.name;
|
| @@ -2207,7 +2264,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| };
|
| dart.setSignature(_debugger.NameValuePair, {
|
| - constructors: () => ({new: dart.definiteFunctionType(_debugger.NameValuePair, [], {name: core.String, value: core.Object, skipDart: core.bool})})
|
| + constructors: () => ({new: dart.definiteFunctionType(_debugger.NameValuePair, [], {name: core.String, value: core.Object, skipDart: core.bool, keyToString: core.bool})})
|
| });
|
| _debugger.MapEntry = class MapEntry extends core.Object {
|
| new(opts) {
|
| @@ -2218,7 +2275,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| };
|
| dart.setSignature(_debugger.MapEntry, {
|
| - constructors: () => ({new: dart.definiteFunctionType(_debugger.MapEntry, [], {key: core.String, value: core.Object})})
|
| + constructors: () => ({new: dart.definiteFunctionType(_debugger.MapEntry, [], {key: core.Object, value: core.Object})})
|
| });
|
| _debugger.ClassMetadata = class ClassMetadata extends core.Object {
|
| new(object) {
|
| @@ -2310,6 +2367,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| let c = this[_simpleFormatter].preview(object);
|
| if (c == null) return null;
|
| + if (core.identical(config, _debugger.keyToStringConfig)) {
|
| + c = dart.toString(object);
|
| + }
|
| let element = new _debugger.JsonMLElement('span');
|
| element.setStyle('background-color: #d9edf7');
|
| element.createTextChild(c);
|
| @@ -2334,6 +2394,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| if (dart.test(child.skipDart)) {
|
| objectTag.addAttribute('config', _debugger.skipDartConfig);
|
| }
|
| + if (dart.test(child.keyToString)) {
|
| + objectTag.addAttribute('config', _debugger.keyToStringConfig);
|
| + }
|
| if (!dart.test(this[_simpleFormatter].hasChildren(child.value))) {
|
| li.setStyle("padding-left: 13px;");
|
| }
|
| @@ -2536,7 +2599,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let map = dart.as(object, core.Map);
|
| let entries = LinkedHashSetOfNameValuePair().new();
|
| map[dartx.forEach](dart.fn((key, value) => {
|
| - let entryWrapper = new _debugger.MapEntry({key: dart.as(key, core.String), value: value});
|
| + let entryWrapper = new _debugger.MapEntry({key: key, value: value});
|
| entries.add(new _debugger.NameValuePair({name: dart.toString(entries.length), value: entryWrapper}));
|
| }, dynamicAnddynamicTovoid()));
|
| this.addMetadataChildren(object, entries);
|
| @@ -2633,7 +2696,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return true;
|
| }
|
| children(object) {
|
| - return JSArrayOfNameValuePair().of([new _debugger.NameValuePair({name: 'key', value: dart.dload(object, 'key')}), new _debugger.NameValuePair({name: 'value', value: dart.dload(object, 'value')})]);
|
| + return JSArrayOfNameValuePair().of([new _debugger.NameValuePair({name: 'key', value: dart.dload(object, 'key'), keyToString: true}), new _debugger.NameValuePair({name: 'value', value: dart.dload(object, 'value')})]);
|
| }
|
| };
|
| _debugger.MapEntryFormatter[dart.implements] = () => [_debugger.Formatter];
|
|
|