Home | History | Annotate | Download | only in net_internals
      1 // Copyright (c) 2012 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 /** This view displays summary statistics on bandwidth usage. */
      6 var BandwidthView = (function() {
      7   'use strict';
      8 
      9   // We inherit from DivView.
     10   var superClass = DivView;
     11 
     12   /**
     13    * @constructor
     14    */
     15   function BandwidthView() {
     16     assertFirstConstructorCall(BandwidthView);
     17 
     18     // Call superclass's constructor.
     19     superClass.call(this, BandwidthView.MAIN_BOX_ID);
     20 
     21     g_browser.addSessionNetworkStatsObserver(this, true);
     22     g_browser.addHistoricNetworkStatsObserver(this, true);
     23 
     24     this.sessionNetworkStats_ = null;
     25     this.historicNetworkStats_ = null;
     26   }
     27 
     28   BandwidthView.TAB_ID = 'tab-handle-bandwidth';
     29   BandwidthView.TAB_NAME = 'Bandwidth';
     30   BandwidthView.TAB_HASH = '#bandwidth';
     31 
     32   // IDs for special HTML elements in bandwidth_view.html
     33   BandwidthView.MAIN_BOX_ID = 'bandwidth-view-tab-content';
     34 
     35   cr.addSingletonGetter(BandwidthView);
     36 
     37   BandwidthView.prototype = {
     38     // Inherit the superclass's methods.
     39     __proto__: superClass.prototype,
     40 
     41     onLoadLogFinish: function(data) {
     42       // Even though this information is included in log dumps, there's no real
     43       // reason to display it when debugging a loaded log file.
     44       return false;
     45     },
     46 
     47     /**
     48      * Retains information on bandwidth usage this session.
     49      */
     50     onSessionNetworkStatsChanged: function(sessionNetworkStats) {
     51       this.sessionNetworkStats_ = sessionNetworkStats;
     52       return this.updateBandwidthUsageTable_();
     53     },
     54 
     55     /**
     56      * Displays information on bandwidth usage this session and over the
     57      * browser's lifetime.
     58      */
     59     onHistoricNetworkStatsChanged: function(historicNetworkStats) {
     60       this.historicNetworkStats_ = historicNetworkStats;
     61       return this.updateBandwidthUsageTable_();
     62     },
     63 
     64     /**
     65      * Update the bandwidth usage table.  Returns false on failure.
     66      */
     67     updateBandwidthUsageTable_: function() {
     68       var sessionNetworkStats = this.sessionNetworkStats_;
     69       var historicNetworkStats = this.historicNetworkStats_;
     70       if (!sessionNetworkStats || !historicNetworkStats)
     71         return false;
     72 
     73       var sessionOriginal = sessionNetworkStats.session_original_content_length;
     74       var sessionReceived = sessionNetworkStats.session_received_content_length;
     75       var historicOriginal =
     76           historicNetworkStats.historic_original_content_length;
     77       var historicReceived =
     78           historicNetworkStats.historic_received_content_length;
     79 
     80       var rows = [];
     81       rows.push({
     82           title: 'Original (KB)',
     83           sessionValue: bytesToRoundedKilobytes_(sessionOriginal),
     84           historicValue: bytesToRoundedKilobytes_(historicOriginal)
     85       });
     86       rows.push({
     87           title: 'Received (KB)',
     88           sessionValue: bytesToRoundedKilobytes_(sessionReceived),
     89           historicValue: bytesToRoundedKilobytes_(historicReceived)
     90       });
     91       rows.push({
     92           title: 'Savings (KB)',
     93           sessionValue:
     94               bytesToRoundedKilobytes_(sessionOriginal - sessionReceived),
     95           historicValue:
     96               bytesToRoundedKilobytes_(historicOriginal - historicReceived)
     97       });
     98       rows.push({
     99           title: 'Savings (%)',
    100           sessionValue: getPercentSavings_(sessionOriginal, sessionReceived),
    101           historicValue: getPercentSavings_(historicOriginal,
    102                                             historicReceived)
    103       });
    104 
    105       var input = new JsEvalContext({rows: rows});
    106       jstProcess(input, $(BandwidthView.MAIN_BOX_ID));
    107       return true;
    108     }
    109   };
    110 
    111   /**
    112    * Converts bytes to kilobytes rounded to one decimal place.
    113    */
    114   function bytesToRoundedKilobytes_(val) {
    115     return (val / 1024).toFixed(1);
    116   }
    117 
    118   /**
    119    * Returns bandwidth savings as a percent rounded to one decimal place.
    120    */
    121   function getPercentSavings_(original, received) {
    122     if (original > 0) {
    123       return ((original - received) * 100 / original).toFixed(1);
    124     }
    125     return '0.0';
    126   }
    127 
    128   return BandwidthView;
    129 })();
    130