blob: 76663cff5939fddbe1d3ba00a849eb21d4d269e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsLayoutStatics_h__
#define nsLayoutStatics_h__
#include "nscore.h"
#include "MainThreadUtils.h"
#include "nsISupportsImpl.h"
#include "nsDebug.h"
// This isn't really a class, it's a namespace for static methods.
// Documents and other objects can hold a reference to the layout static
// objects so that they last past the xpcom-shutdown notification.
class nsLayoutStatics
{
public:
// Called by the layout module constructor. This call performs an AddRef()
// internally.
static nsresult Initialize();
static void AddRef()
{
NS_ASSERTION(NS_IsMainThread(),
"nsLayoutStatics reference counting must be on main thread");
NS_ASSERTION(sLayoutStaticRefcnt,
"nsLayoutStatics already dropped to zero!");
++sLayoutStaticRefcnt;
NS_LOG_ADDREF(&sLayoutStaticRefcnt, sLayoutStaticRefcnt,
"nsLayoutStatics", 1);
}
static void Release()
{
NS_ASSERTION(NS_IsMainThread(),
"nsLayoutStatics reference counting must be on main thread");
--sLayoutStaticRefcnt;
NS_LOG_RELEASE(&sLayoutStaticRefcnt, sLayoutStaticRefcnt,
"nsLayoutStatics");
if (!sLayoutStaticRefcnt)
Shutdown();
}
private:
// not to be called!
nsLayoutStatics();
static void Shutdown();
static nsrefcnt sLayoutStaticRefcnt;
};
class nsLayoutStaticsRef
{
public:
nsLayoutStaticsRef()
{
nsLayoutStatics::AddRef();
}
~nsLayoutStaticsRef()
{
nsLayoutStatics::Release();
}
};
#endif // nsLayoutStatics_h__
|