CTR-Pia
5.4.3
Game Communication Engine
メインページ
ネームスペース一覧
クラス構成
クラス索引
関連ページ
Result 検索
全て
クラス
ネームスペース
関数
変数
型定義
列挙型
列挙型の値
ページ
common_Trace.h
1
/*--------------------------------------------------------------------------------*
2
Copyright (C)Nintendo All rights reserved.
3
4
These coded instructions, statements, and computer programs contain proprietary
5
information of Nintendo and/or its licensed developers and are protected by
6
national and international copyright laws. They may not be disclosed to third
7
parties or copied or duplicated in any form, in whole or in part, without the
8
prior written consent of Nintendo.
9
10
The content herein is highly confidential and should be handled accordingly.
11
*--------------------------------------------------------------------------------*/
12
13
14
#pragma once
15
16
#include <nn/pia/common/common_StringStream.h>
17
#include <nn/pia/common/common_EmptyStream.h>
18
#include <nn/pia/common/common_Time.h>
19
20
21
namespace
nn
22
{
23
namespace
pia
24
{
25
namespace
common
26
{
27
28
#if NN_PIA_ENABLE_TRACE
29
/*!
30
@cond PRIVATE
31
@brief トレース出力をします。
32
*/
33
#define PIA_TRACE(FLAG, ...) \
34
\
35
{ \
36
::nn::pia::common::Trace* pNnPiaCommonTrace = ::nn::pia::common::Trace::GetInstance(); \
37
if (pNnPiaCommonTrace) \
38
{ \
39
if (pNnPiaCommonTrace->IsFlagSet(FLAG)) \
40
{ \
41
pNnPiaCommonTrace->WriteCaption(); \
42
pNnPiaCommonTrace->Write(__VA_ARGS__); \
43
pNnPiaCommonTrace->Write("\n"); \
44
} \
45
} \
46
\
47
}
48
//! @endcond
49
50
/*!
51
@cond PRIVATE
52
@brief bool値を文字列に変換します。
53
*/
54
#define PIA_BOOL_TO_TEXT(VALUE) ((VALUE) ? "true" : "false")
55
//! @endcond
56
57
/*!
58
@cond PRIVATE
59
@brief 関数名を追加してトレース出力をします。
60
*/
61
#if NN_PIA_A
62
#define PIA_TRACE_EX(FLAG, ...) \
63
\
64
{ \
65
::nn::pia::common::Trace* pNnPiaCommonTrace = ::nn::pia::common::Trace::GetInstance(); \
66
if (pNnPiaCommonTrace) \
67
{ \
68
if (pNnPiaCommonTrace->IsFlagSet(FLAG)) \
69
{ \
70
pNnPiaCommonTrace->WriteCaption(PIA_CODE_POSITION_FILE, PIA_CODE_POSITION_FUNC); \
71
pNnPiaCommonTrace->Write(__VA_ARGS__); \
72
} \
73
} \
74
\
75
}
76
#else
77
#define PIA_TRACE_EX(FLAG, ...) \
78
\
79
{ \
80
::nn::pia::common::Trace* pNnPiaCommonTrace = ::nn::pia::common::Trace::GetInstance(); \
81
if (pNnPiaCommonTrace) \
82
{ \
83
if (pNnPiaCommonTrace->IsFlagSet(FLAG)) \
84
{ \
85
pNnPiaCommonTrace->WriteCaption(); \
86
pNnPiaCommonTrace->Write("%s %s:", PIA_CODE_POSITION_FILE, PIA_CODE_POSITION_FUNC); \
87
pNnPiaCommonTrace->Write(__VA_ARGS__); \
88
pNnPiaCommonTrace->Write("\n"); \
89
} \
90
} \
91
\
92
}
93
#endif
94
//! @endcond
95
96
97
#else // else of NN_PIA_ENABLE_TRACE
98
99
#define PIA_TRACE(FLAG, ...) (void)(FLAG)
100
#define PIA_BOOL_TO_TEXT(VALUE)
101
#define PIA_TRACE_EX(FLAG, ...) (void)(FLAG)
102
103
#endif // end of NN_PIA_ENABLE_TRACE
104
105
//n1589: モジュールごとに8ビット割り当てています。不足が出てきたら調整を検討します。
106
/*!
107
@brief トレースフラグです。
108
109
@details PIA_TRACE()マクロの第一引数に渡すなどして使用します。
110
*/
111
112
typedef
uint64_t
TraceFlag
;
113
114
/*!
115
@name トレースフラグ
116
@anchor TraceFlag
117
@{
118
*/
119
static
const
TraceFlag
TraceFlagNever
= 0ULL;
//!< 常に表示されないことを示すフラグです。
120
static
const
TraceFlag
TraceFlagAlways
= 1ULL << 0;
//!< 常に表示されることを示すフラグです。
121
122
static
const
TraceFlag
TraceFlagCommon
= 1ULL << 1;
//!< PiaCommon モジュールのトレースを示すフラグです。
123
static
const
TraceFlag
TraceFlagCommonEvent
= 1ULL << 2;
//!< PiaCommon モジュールのイベント関係のトレースを示すフラグです。
124
static
const
TraceFlag
TraceFlagCommonJob
= 1ULL << 3;
//!< PiaCommon モジュールのジョブ関係のトレースを示すフラグです。
125
static
const
TraceFlag
TraceFlagCommonSocket
= 1ULL << 4;
//!< PiaCommon モジュールのソケット関係のトレースを示すフラグです。
126
static
const
TraceFlag
TraceFlagCommonDetail
= 1ULL << 5;
//!< PiaCommon モジュールの詳細トレースを示すフラグです。
127
128
static
const
TraceFlag
TraceFlagLocal
= 1ULL << 7;
//!< PiaLocal モジュールのトレースを示すフラグです。
129
static
const
TraceFlag
TraceFlagLocalTransport
= 1ULL << 8;
//!< PiaLocal モジュールの送受信処理関係のトレースを示すフラグです。
130
static
const
TraceFlag
TraceFlagLocalMigration
= 1ULL << 9;
//!< PiaLocal モジュールのホストマイグレーション機能関係のトレースを示すフラグです。
131
132
static
const
TraceFlag
TraceFlagInet
= 1ULL << 11;
//!< PiaInet モジュールのトレースを示すフラグです。
133
static
const
TraceFlag
TraceFlagInetInit
= 1ULL << 12;
//!< PiaInet モジュールの初期化、終了処理関係のトレースを示すフラグです。
134
static
const
TraceFlag
TraceFlagInetStream
= 1ULL << 13;
//!< PiaInet モジュールの送受信処理関係のトレースを示すフラグです。
135
static
const
TraceFlag
TraceFlagInetRelayStream
= 1ULL << 14;
//!< PiaInet モジュールのサーバーリレー送受信処理関係のトレースを示すフラグです。
136
static
const
TraceFlag
TraceFlagInetReport
= 1ULL << 15;
//!< PiaInet モジュールのレポート処理関係のトレースを示すフラグです。
137
138
static
const
TraceFlag
TraceFlagInetNat
= 1ULL << 16;
//!< PiaInet モジュールの NAT トラバーサル処理のトレースを示すフラグです
139
static
const
TraceFlag
TraceFlagInetNatDetail
= 1ULL << 17;
//!< PiaInet モジュールの NAT トラバーサル処理の詳細トレースを示すフラグです。
140
static
const
TraceFlag
TraceFlagInetNatProbe
= 1ULL << 18;
//!< PiaInet モジュールの NAT トラバーサル処理のプルーブ関連のトレースを示すフラグです。
141
142
static
const
TraceFlag
TraceFlagTransport
= 1ULL << 19;
//!< PiaTransport モジュールのトレースを示すフラグです。
143
static
const
TraceFlag
TraceFlagTransportInit
= 1ULL << 20;
//!< PiaTransport モジュールの初期化処理、終了処理関係のトレースを示すフラグです。
144
static
const
TraceFlag
TraceFlagTransportKeepAlive
= 1ULL << 21;
//!< PiaTransport モジュールのキープアライブ関係のトレースを示すフラグです。
145
static
const
TraceFlag
TraceFlagTransportRtt
= 1ULL << 22;
//!< PiaTransport モジュールのRTTプロトコル関係のトレースを示すフラグです。
146
static
const
TraceFlag
TraceFlagTransportBuffer
= 1ULL << 23;
//!< PiaTransport モジュールのバッファ関係のトレースを示すフラグです。
147
static
const
TraceFlag
TraceFlagTransportPacketSend
= 1ULL << 24;
//!< PiaTransport モジュールにおける Packet 送信に関係するトレースフラグです。
148
static
const
TraceFlag
TraceFlagTransportPacketReceive
= 1ULL << 25;
//!< PiaTransport モジュールにおける Packet 受信に関係するトレースフラグです。
149
static
const
TraceFlag
TraceFlagTransportProtocolmessageSend
= 1ULL << 26;
//!< PiaTransport モジュールにおける ProtocolMessage 送信に関係するトレースフラグです。
150
static
const
TraceFlag
TraceFlagTransportProtocolmessageReceive
= 1ULL << 27;
//!< PiaTransport モジュールにおける ProtocolMessage 受信に関係するトレースフラグです。
151
static
const
TraceFlag
TraceFlagTransportRelay
= 1ULL << 28;
//!< PiaTransport モジュールのリレー機能のトレースを示すフラグです。
152
static
const
TraceFlag
TraceFlagTransportRelayDetail
= 1ULL << 29;
//!< PiaTransport モジュールのリレー機能の詳細のトレースを示すフラグです。
153
154
static
const
TraceFlag
TraceFlagSession
= 1ULL << 30;
//!< PiaSession モジュールのトレースを示すフラグです。
155
static
const
TraceFlag
TraceFlagSessionConnect
= 1ULL << 31;
//!< PiaSession モジュールの接続処理関係のトレースを示すフラグです。
156
static
const
TraceFlag
TraceFlagSessionLeave
= 1ULL << 32;
//!< PiaSession モジュールの切断処理関係のトレースを示すフラグです。
157
static
const
TraceFlag
TraceFlagSessionUpdate
= 1ULL << 33;
//!< PiaSession モジュールの更新処理関係のトレースを示すフラグです。
158
static
const
TraceFlag
TraceFlagSessionMigration
= 1ULL << 34;
//!< PiaSession モジュールのホストマイグレーション処理関係のトレースを示すフラグです。
159
static
const
TraceFlag
TraceFlagSessionDetail
= 1ULL << 35;
//!< PiaSession モジュールの詳細トレースを示すフラグです。
160
static
const
TraceFlag
TraceFlagSessionInit
= 1ULL << 36;
//!< PiaSession モジュールの初期化、終了処理に関係するトレースを示すフラグです。
161
static
const
TraceFlag
TraceFlagSessionJoint
= 1ULL << 37;
//!< PiaSession モジュールのジョイントセッション処理関係のトレースを示すフラグです。
162
static
const
TraceFlag
TraceFlagSessionClock
= 1ULL << 38;
//!< PiaSession モジュールの同期クロック関係のトレースを示すフラグです。
163
164
static
const
TraceFlag
TraceFlagSync
= 1ULL << 39;
//!< PiaSync モジュールのトレースを示すフラグです。
165
166
static
const
TraceFlag
TraceFlagClone
= 1ULL << 41;
//!< PiaClone モジュールのトレースを示すフラグです。
167
static
const
TraceFlag
TraceFlagCloneDetail
= 1ULL << 42;
//!< PiaClone モジュールの詳細トレースを示すフラグです。
168
169
static
const
TraceFlag
TraceFlagReckoning
= 1ULL << 43;
//!< PiaReckoning モジュールのトレースを示すフラグです。
170
171
static
const
TraceFlag
TraceFlagChat
= 1ULL << 45;
//!< PiaChat モジュールのトレースを示すフラグです。
172
static
const
TraceFlag
TraceFlagChatDetail
= 1ULL << 46;
//!< PiaChat モジュールの詳細トレースを示すフラグです。
173
174
static
const
TraceFlag
TraceFlagService
= 1ULL << 49;
//!< PiaService モジュールのトレースを示すフラグです。
175
static
const
TraceFlag
TraceFlagServiceTransport
= 1ULL << 50;
//!< PiaService モジュールのトレースを示すフラグです。
176
static
const
TraceFlag
TraceFlagServiceTransportDetail
= 1ULL << 51;
//!< PiaService モジュールのトレースを示すフラグです。
177
static
const
TraceFlag
TraceFlagServiceRelayServer
= 1ULL << 52;
//!< PiaService モジュールのトレースを示すフラグです。
178
static
const
TraceFlag
TraceFlagServiceMonitoringServer
= 1ULL << 53;
//!< PiaService モジュールのトレースを示すフラグです。
179
180
static
const
TraceFlag
TraceFlagBrain
= 1ULL << 54;
//!< PiaBrain モジュールのトレースを示すフラグです。
181
static
const
TraceFlag
TraceFlagBrainDetail
= 1ULL << 55;
//!< PiaBrain モジュールのトレースを示すフラグです。
182
static
const
TraceFlag
TraceFlagBrainBehaviorExecution
= 1ULL << 56;
//!< PiaBrain モジュールのトレースを示すフラグです。
183
184
static
const
TraceFlag
TraceFlagFramework
= 1ULL << 58;
//!< PiaFramework モジュールのトレースを示すフラグです。
185
186
static
const
TraceFlag
TraceFlagLan
= 1ULL << 60;
//!< PiaLan モジュールのトレースを示すフラグです。
187
static
const
TraceFlag
TraceFlagLanDetail
= 1ULL << 61;
//!< PiaLan モジュールの詳細トレースを示すフラグです。
188
189
static
const
TraceFlag
TraceFlagPlugin
= 1ULL << 62;
//!< PiaPlugin のトレースを示すフラグです。
190
191
static
const
TraceFlag
TraceFlagDirect
= 1ULL << 63;
//!< PiaDirect のトレースを示すフラグです。
192
193
static
const
TraceFlag
TraceFlagAll
=
TraceFlagAlways
;
//!< 全てのトレースで表示されることを示すフラグです。
194
195
static
const
TraceFlag
TraceFlagDefault
=
TraceFlagAlways
;
//!< TraceFlag のデフォルト値です。
196
197
/*!
198
end of name トレースフラグ
199
@}
200
*/
201
202
203
/*!
204
@brief トレースのクラスです。
205
206
@details Releaseビルドでは、トレースのコードは無効化されます。
207
<br>
208
*/
209
class
Trace
:
public
nn::pia::common::RootObject
210
{
211
public
:
212
/*!
213
@brief Trace クラスのインスタンスを作成します(シングルトンパターン)。
214
215
@details この API は、 nn::pia::common::BeginSetup() を呼び出してから、
216
nn::pia::common::EndSetup() を呼び出すまでの間に呼び出す必要があります。
217
218
@return インスタンスの作成に成功すれば、成功の Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
219
220
@retval ResultAlreadyExists 既にインスタンスは作成されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
221
@retval ResultNotInitialized common モジュールが初期化されていません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
222
@retval ResultInvalidState BeginSetup() ~ EndSetup() 間で呼び出されていません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
223
*/
224
static
Result
CreateInstance
(
void
);
225
226
227
/*!
228
@brief Trace クラスのインスタンスを破棄します(シングルトンパターン)。
229
230
@details Trace クラスのインスタンスを破棄します。インスタンスが作成されて
231
いない状態の時にこのAPIを呼び出した場合は、何も起こらずに返ります。
232
*/
233
static
void
DestroyInstance
(
void
);
234
235
236
/*!
237
@brief Trace クラスのインスタンスを得ます(シングルトンパターン)
238
239
@details 事前に @ref CreateInstance でインスタンスを作成していなかった場合は、
240
NULLポインタが返されます。
241
242
@return Trace インスタンスへのポインタ。
243
*/
244
static
Trace
*
GetInstance
(
void
)
245
{
246
return
s_pInstance;
247
}
248
249
//n1589:IsFlagSetチェックのコードを最短化
250
/*!
251
@cond PRIVATE
252
*/
253
static
bool
IsFlagSetStatic(uint64_t flag)
254
{
255
#if NN_PIA_ENABLE_TRACE
256
if
(
Trace::GetInstance
() == NULL)
257
{
258
return
false
;
259
}
260
261
return
Trace::GetInstance
()->
IsFlagSet
(flag);
262
#else
263
NN_PIA_UNUSED(flag);
264
return
false
;
265
#endif
266
}
267
//! @endcond
268
269
/*!
270
@cond PRIVATE
271
@brief 文字列を出力します。
272
マクロから呼び出されるので直接呼んではいけません。
273
*/
274
void
Write(
const
char
* pFmt, ...);
275
//! @endcond
276
277
278
/*!
279
@cond PRIVATE
280
@brief キャプション文字列を出力します。
281
マクロから呼び出されるので直接呼んではいけません。
282
*/
283
void
WriteCaption();
284
//! @endcond
285
286
/*!
287
@cond PRIVATE
288
@brief キャプション文字列とファイル名、関数名を出力します。
289
マクロから呼び出されるので直接呼んではいけません。
290
*/
291
void
WriteCaption(
const
char
* pFile,
const
char
* pFunction);
292
//! @endcond
293
294
/*!
295
@brief トレースフラグをアクティブに設定します。
296
297
@details このメソッドを使用して、追加のトレースフラグをアクティブに設定します。
298
<br>
299
@param[in] flags アクティブにする @ref TraceFlag の論理和です。
300
*/
301
void
SetFlag
(uint64_t flags)
302
{
303
m_flags |= flags;
304
}
305
306
/*!
307
@brief 指定したトレースフラグを非アクティブに設定します。
308
309
@details 指定したトレースフラグを非アクティブに設定します。
310
ただし、 TraceFlagAlways は除きます。
311
312
@param[in] flags 非アクティブにする @ref TraceFlag の論理和です。
313
*/
314
void
ClearFlag
(uint64_t flags)
315
{
316
m_flags = m_flags & (~flags);
317
}
318
319
/*!
320
@brief 特定のフラグが設定されているかどうかを返します。
321
322
@details なお、 IsFlasSet ( TraceFlagNever ) の結果は true となります。
323
引数で複数のフラグを指定した際は、指定したフラグのいずれかが設定されていれば
324
true が返されます。
325
<br>
326
@return 特定のフラグが設定されていれば true 、そうでなければ false を返します。
327
328
@param[in] flag 問い合わせるトレースフラグ。
329
*/
330
bool
IsFlagSet
(uint64_t flag)
const
331
{
332
#if NN_PIA_ENABLE_TRACE
333
return
(m_flags & flag) != 0;
334
#else
335
NN_PIA_UNUSED(flag);
336
return
false
;
337
#endif
338
}
339
340
/*!
341
@brief TraceFlagAlways を除き、トレースフラグを全てクリアします。
342
*/
343
void
ClearFlag
(
void
)
344
{
345
m_flags =
TraceFlagDefault
;
346
}
347
348
349
/*!
350
@brief 時刻表示の ON / OFF を切り替えます。
351
ON の時は "[Pia:12345] ..." のように基準時刻からの経過時間をミリ秒単位で表示します。
352
@param[in] isPrint true なら時刻を表示します。
353
*/
354
void
SetPrintTime
(
bool
isPrint)
355
{
356
m_IsPrintTime = isPrint;
357
}
358
359
360
/*!
361
@brief 時刻表示の ON / OFF を取得します。
362
@return 時刻表示が ON になっていれば true を返します。
363
*/
364
bool
IsPrintTime
()
const
365
{
366
return
m_IsPrintTime;
367
}
368
369
370
/*!
371
@brief 時刻表示の基準時刻を現在の時刻にします。
372
*/
373
void
ResetBaseTime
()
374
{
375
m_BaseTime.
SetNow
();
376
}
377
378
private
:
379
/*!
380
@brief コンストラクタです。フラグは TraceFlagAlways のみセットされます。
381
*/
382
Trace
();
383
384
/*!
385
@brief デストラクタです。
386
*/
387
~
Trace
(
void
)
388
{
389
}
390
391
392
uint64_t m_flags;
393
Time m_BaseTime;
394
bool
m_IsPrintTime;
395
396
static
Trace* s_pInstance;
397
398
NN_PIA_DISALLOW_COPY(Trace);
399
};
400
}
401
}
402
}
// end of namespace nn::pia::common
Include
nn
pia
common
common_Trace.h
© 2016 Nintendo Co., Ltd. All rights reserved. 記載されている会社名、製品名等は、各社の登録商標または商標です。