1 // Copyright 2018 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 #ifndef SERVICES_NETWORK_NETWORK_USAGE_ACCUMULATOR_H_ 6 #define SERVICES_NETWORK_NETWORK_USAGE_ACCUMULATOR_H_ 7 8 #include <map> 9 10 #include "base/component_export.h" 11 #include "base/containers/flat_map.h" 12 #include "base/containers/small_map.h" 13 #include "base/memory/weak_ptr.h" 14 #include "services/network/public/mojom/network_service.mojom.h" 15 16 namespace network { 17 18 // NetworkUsageAccumulator keeps track of total network usage for active 19 // consumers. COMPONENT_EXPORT(NETWORK_SERVICE)20class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkUsageAccumulator 21 : public base::SupportsWeakPtr<NetworkUsageAccumulator> { 22 public: 23 NetworkUsageAccumulator(); 24 ~NetworkUsageAccumulator(); 25 26 // Reports raw network usage to this accumulator. 27 void OnBytesTransferred(uint32_t process_id, 28 uint32_t routing_id, 29 int64_t bytes_received, 30 int64_t bytes_sent); 31 32 // Marks a process as inactive and remove the entry. 33 void ClearBytesTransferredForProcess(uint32_t process_id); 34 35 // Returns the accumulated network usage for active consumers. 36 std::vector<mojom::NetworkUsagePtr> GetTotalNetworkUsages() const; 37 38 private: 39 struct NetworkUsageParam; 40 41 // Number of active processes is usually small, but could go as high as 42 // |PhysicalMemoryMB / 80|. 43 // See |RenderProcessHost::GetMaxRendererProcessCount()|. 44 base::small_map< 45 std::map<uint32_t /* process_id */, 46 base::flat_map<uint32_t /* routing_id */, NetworkUsageParam>>> 47 total_network_usages_; 48 49 DISALLOW_COPY_AND_ASSIGN(NetworkUsageAccumulator); 50 }; 51 52 } // namespace network 53 54 #endif // SERVICES_NETWORK_NETWORK_USAGE_ACCUMULATOR_H_ 55