Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 base.require('base.iteration_helpers');
      8 
      9 base.exportTo('base', function() {
     10   /**
     11    * Adds a {@code getInstance} static method that always return the same
     12    * instance object.
     13    * @param {!Function} ctor The constructor for the class to add the static
     14    *     method to.
     15    */
     16   function addSingletonGetter(ctor) {
     17     ctor.getInstance = function() {
     18       return ctor.instance_ || (ctor.instance_ = new ctor());
     19     };
     20   }
     21 
     22   function instantiateTemplate(selector) {
     23     return document.querySelector(selector).content.cloneNode(true);
     24   }
     25 
     26   function tracedFunction(fn, name, opt_this) {
     27     function F() {
     28       console.time(name);
     29       try {
     30         fn.apply(opt_this, arguments);
     31       } finally {
     32         console.timeEnd(name);
     33       }
     34     }
     35     return F;
     36   }
     37 
     38   function normalizeException(e) {
     39     if (typeof(e) == 'string') {
     40       return {
     41         message: e,
     42         stack: ['<unknown>']
     43       };
     44     }
     45 
     46     return {
     47       message: e.message,
     48       stack: e.stack ? e.stack : ['<unknown>']
     49     };
     50   }
     51 
     52   function stackTrace() {
     53     var stack = new Error().stack + '';
     54     stack = stack.split('\n');
     55     return stack.slice(2);
     56   }
     57 
     58   return {
     59     addSingletonGetter: addSingletonGetter,
     60 
     61     tracedFunction: tracedFunction,
     62     normalizeException: normalizeException,
     63     instantiateTemplate: instantiateTemplate,
     64     stackTrace: stackTrace
     65   };
     66 });
     67 
     68