| // Copyright (c) 2014 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. | 
 |  | 
 | #include "net/base/network_activity_monitor.h" | 
 |  | 
 | namespace net { | 
 |  | 
 | namespace { | 
 |  | 
 | base::LazyInstance<NetworkActivityMonitor>::Leaky g_network_activity_monitor = | 
 |     LAZY_INSTANCE_INITIALIZER; | 
 |  | 
 | }  // namespace | 
 |  | 
 | NetworkActivityMonitor::NetworkActivityMonitor() | 
 |     : bytes_received_(0), bytes_sent_(0) { | 
 | } | 
 |  | 
 | NetworkActivityMonitor::~NetworkActivityMonitor() { | 
 | } | 
 |  | 
 | // static | 
 | NetworkActivityMonitor* NetworkActivityMonitor::GetInstance() { | 
 |   return g_network_activity_monitor.Pointer(); | 
 | } | 
 |  | 
 | void NetworkActivityMonitor::IncrementBytesReceived(uint64_t bytes_received) { | 
 |   base::TimeTicks now = base::TimeTicks::Now(); | 
 |   base::AutoLock lock(lock_); | 
 |   bytes_received_ += bytes_received; | 
 |   last_received_ticks_ = now; | 
 | } | 
 |  | 
 | void NetworkActivityMonitor::IncrementBytesSent(uint64_t bytes_sent) { | 
 |   base::TimeTicks now = base::TimeTicks::Now(); | 
 |   base::AutoLock lock(lock_); | 
 |   bytes_sent_ += bytes_sent; | 
 |   last_sent_ticks_ = now; | 
 | } | 
 |  | 
 | uint64_t NetworkActivityMonitor::GetBytesReceived() const { | 
 |   base::AutoLock lock(lock_); | 
 |   return bytes_received_; | 
 | } | 
 |  | 
 | uint64_t NetworkActivityMonitor::GetBytesSent() const { | 
 |   base::AutoLock lock(lock_); | 
 |   return bytes_sent_; | 
 | } | 
 |  | 
 | base::TimeDelta NetworkActivityMonitor::GetTimeSinceLastReceived() const { | 
 |   base::TimeTicks now = base::TimeTicks::Now(); | 
 |   base::AutoLock lock(lock_); | 
 |   return now - last_received_ticks_; | 
 | } | 
 |  | 
 | base::TimeDelta NetworkActivityMonitor::GetTimeSinceLastSent() const { | 
 |   base::TimeTicks now = base::TimeTicks::Now(); | 
 |   base::AutoLock lock(lock_); | 
 |   return now - last_sent_ticks_; | 
 | } | 
 |  | 
 | }  // namespace net |