Coverage Report

Created: 2025-06-24 06:43

/src/icu/source/common/restrace.h
Line
Count
Source (jump to first uncovered line)
1
// © 2019 and later: Unicode, Inc. and others.
2
// License & terms of use: http://www.unicode.org/copyright.html
3
4
#ifndef __RESTRACE_H__
5
#define __RESTRACE_H__
6
7
#include "unicode/utypes.h"
8
9
#if U_ENABLE_TRACING
10
11
struct UResourceBundle;
12
13
U_NAMESPACE_BEGIN
14
15
class CharString;
16
17
/**
18
 * Instances of this class store information used to trace reads from resource
19
 * bundles when ICU is built with --enable-tracing.
20
 *
21
 * All arguments of type const UResourceBundle*, const char*, and
22
 * const ResourceTracer& are stored as pointers. The caller must retain
23
 * ownership for the lifetime of this ResourceTracer.
24
 *
25
 * Exported as U_COMMON_API for Windows because it is a value field
26
 * in other exported types.
27
 */
28
class U_COMMON_API ResourceTracer {
29
public:
30
    ResourceTracer() :
31
        fResB(nullptr),
32
        fParent(nullptr),
33
        fKey(nullptr),
34
        fIndex(-1) {}
35
36
    ResourceTracer(const UResourceBundle* resB) :
37
        fResB(resB),
38
        fParent(nullptr),
39
        fKey(nullptr),
40
        fIndex(-1) {}
41
42
    ResourceTracer(const UResourceBundle* resB, const char* key) :
43
        fResB(resB),
44
        fParent(nullptr),
45
        fKey(key),
46
        fIndex(-1) {}
47
48
    ResourceTracer(const UResourceBundle* resB, int32_t index) :
49
        fResB(resB),
50
        fParent(nullptr),
51
        fKey(nullptr),
52
        fIndex(index) {}
53
54
    ResourceTracer(const ResourceTracer& parent, const char* key) :
55
        fResB(nullptr),
56
        fParent(&parent),
57
        fKey(key),
58
        fIndex(-1) {}
59
60
    ResourceTracer(const ResourceTracer& parent, int32_t index) :
61
        fResB(nullptr),
62
        fParent(&parent),
63
        fKey(nullptr),
64
        fIndex(index) {}
65
66
    ~ResourceTracer();
67
68
    void trace(const char* type) const;
69
    void traceOpen() const;
70
71
    /**
72
     * Calls trace() if the resB or parent provided to the constructor was
73
     * non-null; otherwise, does nothing.
74
     */
75
    void maybeTrace(const char* type) const {
76
        if (fResB || fParent) {
77
            trace(type);
78
        }
79
    }
80
81
private:
82
    const UResourceBundle* fResB;
83
    const ResourceTracer* fParent;
84
    const char* fKey;
85
    int32_t fIndex;
86
87
    CharString& getFilePath(CharString& output, UErrorCode& status) const;
88
89
    CharString& getResPath(CharString& output, UErrorCode& status) const;
90
};
91
92
/**
93
 * This class provides methods to trace data file reads when ICU is built
94
 * with --enable-tracing.
95
 */
96
class FileTracer {
97
public:
98
    static void traceOpen(const char* path, const char* type, const char* name);
99
100
private:
101
    static void traceOpenDataFile(const char* path, const char* type, const char* name);
102
    static void traceOpenResFile(const char* path, const char* name);
103
};
104
105
U_NAMESPACE_END
106
107
#else // U_ENABLE_TRACING
108
109
U_NAMESPACE_BEGIN
110
111
/**
112
 * Default trivial implementation when --enable-tracing is not used.
113
 */
114
class U_COMMON_API ResourceTracer {
115
public:
116
0
    ResourceTracer() {}
117
118
0
    ResourceTracer(const void*) {}
119
120
0
    ResourceTracer(const void*, const char*) {}
121
122
0
    ResourceTracer(const void*, int32_t) {}
123
124
0
    ResourceTracer(const ResourceTracer&, const char*) {}
125
126
0
    ResourceTracer(const ResourceTracer&, int32_t) {}
127
128
0
    void trace(const char*) const {}
129
130
0
    void traceOpen() const {}
131
132
0
    void maybeTrace(const char*) const {}
133
};
134
135
/**
136
 * Default trivial implementation when --enable-tracing is not used.
137
 */
138
class FileTracer {
139
public:
140
0
    static void traceOpen(const char*, const char*, const char*) {}
141
};
142
143
U_NAMESPACE_END
144
145
#endif // U_ENABLE_TRACING
146
147
#endif //__RESTRACE_H__