// Copyright (c) 2013 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. 'use strict'; base.require('base.iteration_helpers'); base.exportTo('base', function() { /** * Adds a {@code getInstance} static method that always return the same * instance object. * @param {!Function} ctor The constructor for the class to add the static * method to. */ function addSingletonGetter(ctor) { ctor.getInstance = function() { return ctor.instance_ || (ctor.instance_ = new ctor()); }; } function instantiateTemplate(selector) { return document.querySelector(selector).content.cloneNode(true); } function tracedFunction(fn, name, opt_this) { function F() { console.time(name); try { fn.apply(opt_this, arguments); } finally { console.timeEnd(name); } } return F; } function normalizeException(e) { if (typeof(e) == 'string') { return { message: e, stack: ['<unknown>'] }; } return { message: e.message, stack: e.stack ? e.stack : ['<unknown>'] }; } function stackTrace() { var stack = new Error().stack + ''; stack = stack.split('\n'); return stack.slice(2); } return { addSingletonGetter: addSingletonGetter, tracedFunction: tracedFunction, normalizeException: normalizeException, instantiateTemplate: instantiateTemplate, stackTrace: stackTrace }; });