Bug 1890277: part 4) Add CSPParser support for the `trusted-types` directive, guarded...
[gecko.git] / netwerk / base / IOActivityMonitor.h
blob5e46bc9bfcb534485d0aba85da2cac844214d8ba
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef IOActivityMonitor_h___
8 #define IOActivityMonitor_h___
10 #include "mozilla/dom/ChromeUtilsBinding.h"
11 #include "mozilla/Mutex.h"
12 #include "nsCOMPtr.h"
13 #include "nscore.h"
14 #include "nsClassHashtable.h"
15 #include "nsTHashMap.h"
16 #include "nsHashKeys.h"
17 #include "nsINamed.h"
18 #include "nsISupports.h"
19 #include "prinrval.h"
20 #include "prio.h"
21 #include "private/pprio.h"
22 #include <stdint.h>
24 namespace mozilla {
26 namespace dom {
27 class Promise;
30 namespace net {
32 #define IO_ACTIVITY_ENABLED_PREF "io.activity.enabled"
34 using Activities = nsTHashMap<nsCStringHashKey, dom::IOActivityDataDictionary>;
36 // IOActivityMonitor has several roles:
37 // - maintains an IOActivity per resource and updates it
38 // - sends a dump of the activities to a promise via RequestActivities
39 class IOActivityMonitor final : public nsINamed {
40 public:
41 IOActivityMonitor();
43 NS_DECL_THREADSAFE_ISUPPORTS
44 NS_DECL_NSINAMED
46 // initializes and destroys the singleton
47 static nsresult Init();
48 static nsresult Shutdown();
50 // collect amounts of data that are written/read by location
51 static nsresult Read(const nsACString& location, uint32_t aAmount);
52 static nsresult Write(const nsACString& location, uint32_t aAmount);
54 static nsresult MonitorFile(PRFileDesc* aFd, const char* aPath);
55 static nsresult MonitorSocket(PRFileDesc* aFd);
56 static nsresult Read(PRFileDesc* fd, uint32_t aAmount);
57 static nsresult Write(PRFileDesc* fd, uint32_t aAmount);
59 static bool IsActive();
60 static void RequestActivities(dom::Promise* aPromise);
62 private:
63 ~IOActivityMonitor() = default;
65 static already_AddRefed<IOActivityMonitor> Get();
67 nsresult InitInternal();
68 nsresult ShutdownInternal();
69 bool IncrementActivity(const nsACString& location, uint32_t aRx,
70 uint32_t aTx);
71 nsresult WriteInternal(const nsACString& location, uint32_t aAmount);
72 nsresult ReadInternal(const nsACString& location, uint32_t aAmount);
73 void RequestActivitiesInternal(dom::Promise* aPromise);
75 Activities mActivities;
76 // protects mActivities accesses
77 Mutex mLock MOZ_UNANNOTATED;
80 } // namespace net
81 } // namespace mozilla
83 #endif /* IOActivityMonitor_h___ */