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"
14 #include "nsClassHashtable.h"
15 #include "nsTHashMap.h"
16 #include "nsHashKeys.h"
18 #include "nsISupports.h"
21 #include "private/pprio.h"
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
{
43 NS_DECL_THREADSAFE_ISUPPORTS
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
);
63 ~IOActivityMonitor() = default;
65 static already_AddRefed
<IOActivityMonitor
> Get();
67 nsresult
InitInternal();
68 nsresult
ShutdownInternal();
69 bool IncrementActivity(const nsACString
& location
, uint32_t aRx
,
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
;
81 } // namespace mozilla
83 #endif /* IOActivityMonitor_h___ */